對系統的裁剪首先要先瞭解系統的整個啟動流程,明白其所需要的設定檔;這樣在操作的時候才能清楚自己在做什麼,以及需要做什麼
啟動流程詳解
POST-->BIOS(Boot Sequence) -->MBR讀取BootLoader--->Kernel~initrd~-->init(/etc/inittab)
電腦本身不會執行程式,系統剛剛啟動的時候會將某個ROM中的程式映射到cpu可以定址的地址空間中去並且能夠讓cpu能夠執行其中的指令,這些指令就是完成系統檢測的,檢測完成後如果核心硬體沒有問題時,緊接著根據BIOS中所設定的啟動流程去依次的尋找對應裝置上的MBR;如果MBR存在就會讀取MBR中的Bootloader,Bootloader中配置了所有引導的作業系統的核心所在位置,然後將核心裝載到記憶體,進行解壓縮並完成核心初始化以後,Bootloader將控制權交給核心
核心初始化
核心初始化完成的工作;硬體探測-->裝載驅動-->掛載根檔案系統-->啟動使用者空間的第一個進程(即init)。init本身的設定檔是/etc/inittab 紅帽6上是upstart(也稱呼為init,upstart的設定檔在/etc/inittab和/etc/init/*.conf的檔案
initrd介紹
核心完成初始化要依賴於驅動程式,這些驅動程式如果沒有直接做在核心當中的時候,就需要到某個檔案路徑去裝載這個驅動程式,當核心訪問根檔案系統的裝置,但是裝置驅動沒有直接裝載到核心時,核心首先要到檔案系統上找這個裝置驅動,但是檔案系統又沒有被掛載,initrd就是核心與檔案系統的中間人。initrd有核心所依賴到的額外的裝置驅動,最重要的是根檔案系統的驅動核心是藉助initrd為核心提供訪問真正的檔案系統所需要的基本驅動程式所以initrd是個輔助性的過渡性的中介層,能夠實現將kernel與真正的檔案系統串連起來的,串連之後,工作即完成了
init主要完成的工作
init的功能即是在inittab設定檔內容定義,主要是:設定預設運行層級、系統初始化指令碼(依賴指令碼/etc/rc.d/rc.sysinit)、運行指定層級的服務指令碼(服務指令碼在/etc/rc.d/init.d/目錄下,這些服務指令碼都有連結,即連結到/etc/rc.d/rc#.d/目錄下,#代表是系統的運行層級(rc0.d--rc6.d),還有最後一個啟動並執行指令碼rc。local 設定ctrl+alt+delet按鍵組合的意義 設定突然斷電時的程式 設定電源恢複後的程式然後啟動虛擬終端。(有了預設運行層級及初始化指令碼,系統就可以跑起來的)
/etc/rc.d/rc.sysinit主要功能
在inittab執行的第二步是執行/etc/rc.d/rc.sysinit指令碼程式,檢測,並且以讀寫方式重新掛載根檔案系統;設定主機名稱;檢測並掛載/etc/fstab中的其他檔案系統;啟用交換分區;啟用swap分區初始化外圍硬體裝置的驅動;根據/etc/sysctl.conf設定核心參數啟用udev和selinux;啟用lvm和RAID裝置清理到期鎖和FID檔案