天天看點

Linux裁剪一個MINI系統

一、系統啟動流程

首先POST開機加電自檢-->BIOS(boot sequence)選擇啟動順序-->GRUB(bootloader)引導-->加載核心kernel(initrd)-->啟動SHELL

二、裁剪準備工作

1、首先在虛拟機添加一塊硬碟,硬碟名稱寫一個好記得,以便後續需要時友善查找到。

<a href="http://s3.51cto.com/wyfs02/M00/1C/71/wKioL1MW_yzRBPa9AAD2BoKmAaQ973.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/1C/71/wKiom1MW_2bzjt88AAGJi-ZYRio300.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/1C/71/wKiom1MXACWTznoGAAFqczBjCdY238.jpg" target="_blank"></a>

2、硬碟添加完成後,需要對硬碟進行格式化分區處理。

1

2

3

4

5

6

7

8

<code>#檢視添加的硬碟</code>

<code>[Linux]</code><code>#fdisk -l /dev/sd[a-z]</code>

<code>Disk </code><code>/</code><code>dev</code><code>/</code><code>sdb: </code><code>21.5</code> <code>GB, </code><code>21474836480</code> <code>bytes</code>

<code>255</code> <code>heads, </code><code>63</code> <code>sectors</code><code>/</code><code>track, </code><code>2610</code> <code>cylinders</code>

<code>Units </code><code>=</code> <code>cylinders of </code><code>16065</code> <code>*</code> <code>512</code> <code>=</code> <code>8225280</code> <code>bytes</code>

<code>Sector size (logical</code><code>/</code><code>physical): </code><code>512</code> <code>bytes </code><code>/</code> <code>512</code> <code>bytes</code>

<code>I</code><code>/</code><code>O size (minimum</code><code>/</code><code>optimal): </code><code>512</code> <code>bytes </code><code>/</code> <code>512</code> <code>bytes</code>

<code>Disk identifier: </code><code>0x00000000</code>

格式化分區處理,分兩個主分區:一個500M的,剩餘為一個分區

9

10

11

12

13

14

15

16

17

<code>[Linux]</code><code>#fdisk -l /dev/sdb</code>

<code>   </code><code>Device Boot      Start         End      Blocks   </code><code>Id</code>  <code>System</code>

<code>/</code><code>dev</code><code>/</code><code>sdb1               </code><code>1</code>          <code>65</code>      <code>522081</code>   <code>83</code>  <code>Linux</code>

<code>/</code><code>dev</code><code>/</code><code>sdb2              </code><code>66</code>        <code>2610</code>    <code>20442712</code><code>+</code>  <code>83</code>  <code>Linux</code>

<code>#格式化分區為ext4檔案格式</code>

<code>[Linux]</code><code>#mke2fs -t ext4 /dev/sdb1</code>

<code>[Linux]</code><code>#mke2fs -t ext4 /dev/sdb2</code>

<code>在</code><code>/</code><code>mnt下建立兩個檔案夾來挂載這兩個分區</code>

<code>[Linux]</code><code>#mkdir /mnt/{boot,sysroot}</code>

<code>挂載</code>

<code>[Linux]</code><code>#mount /dev/sdb1 /mnt/boot/</code>

<code>[Linux]</code><code>#mount /dev/sdb2 /mnt/sysroot/</code>

<code>出現lost</code><code>+</code><code>found說明挂載成功</code>

<code>[Linux]</code><code>#ls /mnt/boot/</code>

<code>lost</code><code>+</code><code>found</code>

<code>[Linux]</code><code>#ls /mnt/sysroot/</code>

3、複制核心檔案以及一些基本的指令至新硬碟中;核心檔案複制至boot目錄;指令複制sysroot目錄;

<code>複制時進行了重命名是友善後續操作,也可以不用重命名,但是需要注意兩個檔案的版本比對</code>

<code>[Linux]</code><code>#cp /boot/vmlinuz-2.6.32-358.el6.x86_64 /mnt/boot/vmlinuz</code>

<code>[Linux]</code><code>#cp /boot/initramfs-2.6.32-358.el6.x86_64.img /mnt/boot/initramfs.img</code>

<code>initramfs.img  lost</code><code>+</code><code>found  vmlinuz</code>

4、安裝grub檔案:指令grub-install

格式:grub-install --root-directory=/path(為boot上級目錄) /dev/disk

<code>[Linux]</code><code>#grub-install --root-directory=/mnt /dev/sdb</code>

<code>Probing devices to guess BIOS drives. This may take a </code><code>long</code> <code>time.</code>

<code>Installation finished. No error reported.</code>

<code>This </code><code>is</code> <code>the contents of the device </code><code>map</code> <code>/</code><code>mnt</code><code>/</code><code>boot</code><code>/</code><code>grub</code><code>/</code><code>device.</code><code>map</code><code>.</code>

<code>Check </code><code>if</code> <code>this </code><code>is</code> <code>correct </code><code>or</code> <code>not</code><code>. If </code><code>any</code> <code>of the lines </code><code>is</code> <code>incorrect,</code>

<code>fix it </code><code>and</code> <code>re</code><code>-</code><code>run the script `grub</code><code>-</code><code>install'.</code>

<code>(fd0)   </code><code>/</code><code>dev</code><code>/</code><code>fd0</code>

<code>(hd0)   </code><code>/</code><code>dev</code><code>/</code><code>sda</code>

<code>(hd1)   </code><code>/</code><code>dev</code><code>/</code><code>sdb</code>

<code>grub  initramfs.img  lost</code><code>+</code><code>found  vmlinuz</code>

5、cp基本指令和指令所依賴的庫檔案至sysroot目錄下,此處為自己寫的腳本,由于不完善;在此不提供

18

<code>[Linux]</code><code>#sh cpcommand.sh</code>

<code>Enter a executable command:bash</code>

<code>Copy successful!</code>

<code>Enter a executable command:ifconfig</code>

<code>Enter a executable command:ip</code>

<code>Enter a executable command:ls</code>

<code>Enter a executable command:cat</code>

<code>Enter a executable command:mkdir</code>

<code>Enter a executable command:touch</code>

<code>Enter a executable command:quit</code>

<code>You choose quit!</code>

<code>[Linux]</code><code>#</code>

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

<code>#如下顯示都已複制成功</code>

<code>[Linux]</code><code>#tree /mnt/</code>

<code>/</code><code>mnt</code><code>/</code>

<code>├── boot</code>

<code>│   ├── grub</code>

<code>│   │   ├── device.</code><code>map</code>

<code>│   │   ├── e2fs_stage1_5</code>

<code>│   │   ├── fat_stage1_5</code>

<code>│   │   ├── ffs_stage1_5</code>

<code>│   │   ├── iso9660_stage1_5</code>

<code>│   │   ├── jfs_stage1_5</code>

<code>│   │   ├── minix_stage1_5</code>

<code>│   │   ├── reiserfs_stage1_5</code>

<code>│   │   ├── stage1</code>

<code>│   │   ├── stage2</code>

<code>│   │   ├── ufs2_stage1_5</code>

<code>│   │   ├── vstafs_stage1_5</code>

<code>│   │   └── xfs_stage1_5</code>

<code>│   ├── initramfs.img</code>

<code>│   ├── lost</code><code>+</code><code>found</code>

<code>│   └── vmlinuz</code>

<code>└── sysroot</code>

<code>    </code><code>├── </code><code>bin</code>

<code>    </code><code>│   ├── bash</code>

<code>    </code><code>│   ├── cat</code>

<code>    </code><code>│   ├── ls</code>

<code>    </code><code>│   ├── mkdir</code>

<code>    </code><code>│   └── touch</code>

<code>    </code><code>├── lib64</code>

<code>    </code><code>│   ├── ld</code><code>-</code><code>linux</code><code>-</code><code>x86</code><code>-</code><code>64.so</code><code>.</code><code>2</code>

<code>    </code><code>│   ├── libacl.so.</code><code>1</code>

<code>    </code><code>│   ├── libattr.so.</code><code>1</code>

<code>    </code><code>│   ├── libcap.so.</code><code>2</code>

<code>    </code><code>│   ├── libc.so.</code><code>6</code>

<code>    </code><code>│   ├── libdl.so.</code><code>2</code>

<code>    </code><code>│   ├── libpthread.so.</code><code>0</code>

<code>    </code><code>│   ├── libresolv.so.</code><code>2</code>

<code>    </code><code>│   ├── librt.so.</code><code>1</code>

<code>    </code><code>│   ├── libselinux.so.</code><code>1</code>

<code>    </code><code>│   └── libtinfo.so.</code><code>5</code>

<code>    </code><code>├── lost</code><code>+</code><code>found</code>

<code>    </code><code>└── sbin</code>

<code>        </code><code>├── ifconfig</code>

<code>        </code><code>└── ip</code>

6、編輯grub.conf檔案來引導系統核心,裡面内容的具體意思:

default:系統預設啟動項

timeout:等待使用者選擇的時間,機關秒

title:啟動菜單顯示标志

root(hd0,0):根目錄

kernel:核心路徑,根下檔案

root:挂載磁盤的根目錄

selinux:系統内置安全軟體,0代表關閉

init:系統引導檔案

initrd:幫助核心挂載根

<code>[Linux]</code><code>#vi /mnt/boot/grub/grub.conf</code>

<code>default</code><code>=</code><code>0</code>

<code>timeout</code><code>=</code><code>5</code>

<code>title Test Linux System</code>

<code>        </code><code>root (hd0,</code><code>0</code><code>)</code>

<code>        </code><code>kernel </code><code>/</code><code>vmlinuz ro root</code><code>=</code><code>/</code><code>dev</code><code>/</code><code>sda2 selinux</code><code>=</code><code>0</code> <code>init</code><code>=</code><code>/</code><code>bin</code><code>/</code><code>bash</code>

<code>        </code><code>initrd </code><code>/</code><code>initramfs.img</code>

7、建立根(/)也就是新磁盤/mnt/sysroot/下必要的檔案夾:

<code>[Linux]</code><code>#mkdir -pv /mnt/sysroot/{etc/rc.d,root,proc,sys,lib,lib64,bin,sbin}</code>

<code>[Linux]</code><code>#tree /mnt/sysroot/</code>

<code>/</code><code>mnt</code><code>/</code><code>sysroot</code><code>/</code>

<code>├── </code><code>bin</code>

<code>│   ├── bash</code>

<code>│   ├── cat</code>

<code>│   ├── ls</code>

<code>│   ├── sh </code><code>-</code><code>&gt; </code><code>/</code><code>mnt</code><code>/</code><code>sysroot</code><code>/</code><code>bin</code><code>/</code><code>bash</code>

<code>│   └── vi</code>

<code>├── etc</code>

<code>│   └── rc.d</code>

<code>├── lib</code>

<code>├── lib64</code>

<code>│   ├── ld</code><code>-</code><code>linux</code><code>-</code><code>x86</code><code>-</code><code>64.so</code><code>.</code><code>2</code>

<code>│   ├── libacl.so.</code><code>1</code>

<code>│   ├── libattr.so.</code><code>1</code>

<code>│   ├── libcap.so.</code><code>2</code>

<code>│   ├── libc.so.</code><code>6</code>

<code>│   ├── libdl.so.</code><code>2</code>

<code>│   ├── libm.so.</code><code>6</code>

<code>│   ├── libncurses.so.</code><code>5</code>

<code>│   ├── libpthread.so.</code><code>0</code>

<code>│   ├── libresolv.so.</code><code>2</code>

<code>│   ├── librt.so.</code><code>1</code>

<code>│   ├── libselinux.so.</code><code>1</code>

<code>│   └── libtinfo.so.</code><code>5</code>

<code>├── lost</code><code>+</code><code>found</code>

<code>├── proc</code>

<code>├── root</code>

<code>├── sbin</code>

<code>│   ├── ifconfig</code>

<code>│   └── ip</code>

<code>├── sys</code>

<code>└── usr</code>

<code>    </code><code>└── </code><code>bin</code>

<code>        </code><code>└── tree</code>

<code>########################################################</code>

<code>#最後一定要記得執行同步指令</code>

<code>[Linux]</code><code>#sync</code>

三、建立虛拟機進行測試

<a href="http://s3.51cto.com/wyfs02/M01/1C/8F/wKioL1MXKR6yWNrwAAEG7mK0CUk639.jpg" target="_blank"></a>

啟動前先挂起之前的虛拟機或者解除安裝挂載的/mnt/boot/和/mnt/sysroot/這兩個目錄,否則會提示另一個正在使用磁盤;

<a href="http://s3.51cto.com/wyfs02/M02/1C/8F/wKiom1MXKoLhrncCAAF04D5DoE0750.jpg" target="_blank"></a>

如果看到bash-這個就說明已經成功了,能基本進入。但是這個還不能配置IP位址和建立檔案,因為grub裡面挂載的是隻讀方式,且沒有網卡,下面繼續對網卡進行配置。

四、重新以讀寫模式挂載目錄和自動加載網卡驅動

1、首先檢視網卡子產品類型

<code>[Linux]</code><code>#lsmod</code>

<code>Module                  Size  Used by</code>

<code>autofs4                </code><code>26513</code>  <code>3</code>

<code>8021q</code>                  <code>25349</code>  <code>0</code>

<code>garp                    </code><code>7152</code>  <code>1</code> <code>8021q</code>

<code>stp                     </code><code>2218</code>  <code>1</code> <code>garp</code>

<code>llc                     </code><code>5546</code>  <code>2</code> <code>garp,stp</code>

<code>ipv6                  </code><code>317340</code>  <code>152</code>

<code>uinput                  </code><code>7992</code>  <code>0</code>

<code>microcode             </code><code>112685</code>  <code>0</code>

<code>ppdev                   </code><code>8537</code>  <code>0</code>

<code>vmware_balloon          </code><code>7199</code>  <code>0</code>

<code>parport_pc             </code><code>22690</code>  <code>0</code>

<code>parport                </code><code>36209</code>  <code>2</code> <code>ppdev,parport_pc</code>

<code>e1000                 </code><code>170646</code>  <code>0</code> <code>#這個就是我們需要的網卡名稱</code>

檢視詳細資訊

<code>[Linux]</code><code>#modinfo e1000</code>

<code>filename:       </code><code>/</code><code>lib</code><code>/</code><code>modules</code><code>/</code><code>2.6</code><code>.</code><code>32</code><code>-</code><code>431.el6</code><code>.x86_64</code><code>/</code><code>kernel</code><code>/</code><code>drivers</code><code>/</code><code>net</code><code>/</code><code>e1000</code><code>/</code><code>e1000.ko</code>

<code>version:        </code><code>7.3</code><code>.</code><code>21</code><code>-</code><code>k8</code><code>-</code><code>NAPI</code>

<code>license:        GPL</code>

<code>description:    Intel(R) PRO</code><code>/</code><code>1000</code> <code>Network Driver</code>

<code>author:         Intel Corporation, &lt;[email protected]&gt;</code>

<code>#最上面是網卡子產品的路徑,需要的就是這個路徑</code>

<code>[Linux]</code><code>#cd /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/modules/</code>

<code>[Linux]</code><code>#ls /mnt/sysroot/lib/modules/</code>

<code>e1000.ko</code>

<code>#把網卡子產品複制到該目錄下為同名檔案</code>

2、在/sbin下寫一個init腳本,引導系統重新挂載下根檔案系統和自動裝載網卡驅動,和配置IP位址。

<code>[Linux]</code><code>#vi /mnt/sysroot/sbin/init</code>

<code>#!/bin/bash</code>

<code>echo </code><code>-</code><code>e </code><code>"\033[36mWelcome to CentOS6.5 Test System\033[0m"</code>

<code>mount </code><code>-</code><code>n </code><code>-</code><code>t proc proc </code><code>/</code><code>proc</code>

<code>mount </code><code>-</code><code>n </code><code>-</code><code>t sysfs sysfs </code><code>/</code><code>sys</code>

<code>mount </code><code>-</code><code>n </code><code>-</code><code>o remount,rw </code><code>/</code><code>dev</code><code>/</code><code>sda2 </code><code>/</code>

<code>insmod </code><code>/</code><code>lib</code><code>/</code><code>modules</code><code>/</code><code>e1000.ko</code>

<code>ifconfig lo </code><code>127.0</code><code>.</code><code>0.1</code><code>/</code><code>8</code>

<code>ifconfig eth0 </code><code>192.168</code><code>.</code><code>1.100</code><code>/</code><code>24</code>

<code>/</code><code>bin</code><code>/</code><code>bash</code>

<code>#首先給一個歡迎資訊,然後挂載/proc和/sys目錄</code>

<code>#可參照/etc/fstab檔案;和/etc/rc.d/rc.sysinit檔案</code>

<code>#在重新挂載根檔案系統已讀寫方式。</code>

<code>#在用insmod指令安裝網卡,在配置IP。前提要先複制mount指令。</code>

<code>#最後記得給這個檔案執行權限</code>

3、在重寫下grub.conf配置檔案,指定下init引導檔案

<code>title CentOS Test!</code>

<code>        </code><code>root(hd0,</code><code>0</code><code>)</code>

<code>        </code><code>kernel </code><code>/</code><code>vmlinuz ro root</code><code>=</code><code>/</code><code>dev</code><code>/</code><code>sda2 selinux</code><code>=</code><code>0</code> <code>init</code><code>=</code><code>/</code><code>sbin</code><code>/</code><code>init</code>

完成後sync同步下,然後再按照之前的方式進行測試。

<a href="http://s3.51cto.com/wyfs02/M01/22/4C/wKioL1MZ5UfzH35eAAN1Yo2KZFc190.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/22/4B/wKiom1MZ5YOihhAhAAH6GuGxfv8831.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/22/4C/wKioL1MZ5XKgRcs1AAGA27OuH2k982.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M01/22/4B/wKiom1MZ5a2Tu3PMAABZIt28s_Q180.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/22/4C/wKioL1MZ5ZugjT1FAAEf2tFgH28575.jpg" target="_blank"></a>

測試可以建立檔案,網卡也是自動加載的,IP是配置檔案裡自動寫入的,測試也是可以通的。至此,一個微型的linux系統已裁剪完成,其中複制指令的腳本是自己寫的,由于不是很完善,這裡就不予提供了,這中間還有很多不是很完善,如有錯誤,請及時指出。如有問題,也感謝及時回報!

本文轉自Mr_陳 51CTO部落格,原文連結:http://blog.51cto.com/chenpipi/1370102,如需轉載請自行聯系原作者

繼續閱讀