linux內核管理--之定製一個屬於本身的小型系統


1、linux系統啓動流程介紹
linux

  咱們來了解下linux系統的啓動流程:
ios

     首先linux要經過POST自檢過程(BIOS)-->若是想要作多塊啓動盤的話,還須要在bios中選擇啓動磁盤-->引導MBR(bootloader引導程序)-->加載initrd文件-->執行進程init-->顯示歡迎界面;vim

  須要注意:bash

  在linux的啓動流程中,加載內核文件時還須要藉助別外兩個文件:
ide

      1)initrd,CentOS5上是用內存模擬的磁盤設備;
測試

      2)initramfs,CentOS6上是用內存模擬的文件系統;
ui

  在啓程的流程中,init主要經過調用/etc/inittab這個配置文件,而後再去執行/etc/rc.d/rc.sysinit的系統初始化腳本.spa


2、製做的詳細步驟3d

   在宿主機上添加塊新磁盤,並將其命名:1111111111.vmdk,這是宿主機上的第二塊磁盤(/dev/sdb),而等到時候掛載到目標主機的時候,由於那裏只有這宿主機上(/dev/sdb)的這一塊磁盤,因此在目標主機上應該是/dev/sda這個名字,這是必需要清楚的。弄清楚以後在來作其它操做,第一個分區500M,用來裝引導程序;第二個分區15G,用來裝根文件系統。格式化完成後要將其掛載,將/dev/sdb1掛載到/mnt/boot下,將、dev/sda2掛載到/mnt/sysroot下.code



1).給目標機磁盤分區:

wKiom1MXGgjA2C8eAAJVRU-gN_8548.jpg

2).將分區格式化:

[root@xiaomazi ~]# mke2fs -t ext4 /dev/sdb1
[root@xiaomazi ~]# mke2fs -t ext4 /dev/sdb2


3).建立掛載目錄並將其掛載至/mnt/sysroot/mnt/boot目錄下:

wKiom1MXGiKAIkKLAAIPisnf1BU159.jpg


4). 安裝grub至目標磁盤(注意:boot在哪裏就在哪裏安裝grub.):

wKioL1MXGhCB2HPRAALj_IJIY6A602.jpg


5). 複製內核和initrd文件:

wKioL1MXGjmDgBHmAAFmmRiTCGo160.jpg


6). 建立目標主機的根文件系統:

wKiom1MXGo6wdh1eAANsb7hYxb0473.jpg

7).接着去移植bashls等命令至目標主機的根文件系統:

[root@xiaomazi sysroot]# vim bincp.sh
#!/bin/bash
#
target=/mnt/sysroot
clearCmd() {
ifwhich $cmd &> /dev/null; then
cmdPath=`which--skip-alias$cmd`
else
echo"No such command"
return5
fi
}
cmdCopy() {
cmdDir=`dirname$1`
[ -d ${target}${cmdDir} ] || mkdir-p ${target}${cmdDir}
[ -f ${target}${1} ] || cp$1 ${target}${cmdDir}
}
libCopy() {
forlib in`ldd $1 | grep-o "/[^[:space:]]\{1,\}"`; do
libDir=`dirname$lib`
[ -d ${target}${libDir} ] ||mkdir-p ${target}${libDir}
[ -f ${target}${lib} ] ||cp$lib ${target}${libDir}
done
}
whiletrue; do
read-p "Enter a command: "cmd
if[ "$cmd"== 'quit'] ;then
echo"quit"
exit0
fi
clearCmd $cmd
[$? -eq5 ] && continue
cmdCopy $cmdPath
libCopy $cmdPath
done

執行腳本:

[root@xiaomazi ~]# chmod +x bincp.sh 給執行權限
[root@xiaomazi ~]# sh -n bincp.sh 測試語法錯誤
[root@xiaomazi ~]# sh bincp.sh
Enter a command: bash給目標機一個bash命令
Enter a command: quit
quit
[root@xiaomazi ~]#


8).使用tree /mnt/sysroot 命令,查看庫文件等文件是否存在:

wKioL1MXHGfTauOqAAIcyNcuSww564.jpg


I.執行bincp.sh腳本給目標機可執行命令:ls,cat,vi,cp,mv,mkdir,touch.

wKiom1MXHLbh7r-TAADFUPsn70M384.jpg


II.bash建立個軟鏈接:

wKiom1MXHNaw8MG3AAKHQV4cthw668.jpg



9). 爲目標機的grub提供配置文件:


I.注意這樣寫會有報錯的,請看:

wKiom1MXHUnQYGBtAAHzkVqr0CY176.jpg


II.在新建虛擬機時候須要注意的地方:

wKiom1MXNwHQ5wo_AAGL5XHxSa0327.jpg

wKiom1MXLO7DFns2AAGIx18m1zU575.jpg


III.本身定義的系統名字,與等待時間:

wKiom1MXLSmjrTxZAAF7RBlCZj0195.jpg


IV.內核恐慌,沒有找到init,在上面I中已經說明了,那裏指的錯誤就是這個吆.

wKiom1MXLT6AtlziAAJiNT5YC2Q301.jpg


V.告訴系統找/bin/bash:

wKioL1MXLSuAuCw7AAGLaOXBpnI496.jpg


VI.在目標機上顯示以下信息就能夠了:

wKioL1MXLVrTf9LyAAM-_OBdbJg495.jpg



2.編寫init腳本:

1).如何去寫一個init腳本呢?

注意:init 通常都在/sbin目錄下面:

咱們知道init要經過調用etc/inittab配置文件,而後再去執行/etc/rc.d/rc.sysinit的系統初始化腳本的,

如今就經過init腳原本完成它也是能夠的.

[root@xiaomazi ~]# vim /mnt/sysroot/sbin/init

wKiom1MXRe-CfLVzAAJ8mfFQiVM083.jpg


2).在grub.conf文件中指定init腳本:

wKioL1MXLVvhKI_aAAF1T4svarg193.jpg


3).建立模塊modules目錄,以後將e1000.ko複製進目標主機的磁盤上,並複製命令之目標機:

wKiom1MXLYLxVf1tAALc45hczJ0906.jpg

4).在啓動目標機後就會顯示以下信息:

wKiom1MXRpuhLGCiAAPM4M-CcbE254.jpg


5).查看下網卡信息:

wKiom1MXRpzz_SQyAAIqlgvp62w481.jpg


6).測試配置好IP後,是否能ping通:

wKioL1MXRnWxz65bAAF1xaft8KY991.jpg


7).測試可否建立文件:

wKioL1MYVq_hQxPdAAB0cfYgsPk268.jpg






A smile is the most beautiful language!!!


j_0057.gifj_0057.gifj_0057.gif以本人的理解而寫出博客,如如有錯誤,歡迎指出.j_0057.gifj_0057.gifj_0057.gif

                                                                       ---->小馬子


                        ---->小馬子

相關文章
相關標籤/搜索