不光對於linux對於其他的操作系統一樣,我們要想對系統啓動故障進行排除,就必須瞭解系統的構造,以及啓動過程所牽涉到文件及程序。
1.Linux操作系統的構成(大致分爲三個層次):
內核能夠完成的任務:管理內存、調度任務、驅動硬件、網絡功能、安全、文件系統
linux系統的啓動過程:
加電-->cmos-->post(上電自測試)-->grub
2.系統啓動引導的過程(如下圖):如果系統採用硬盤引導的話,那麼每塊硬盤的前端的第一個扇區就是MBR(512Byte),MBR分爲三個部分:前446Byte爲bootloader(引導加載器),中間64Byte分區表,後2Byte magic
MBR中的bootloader引導了系統啓動的第一階段,grub菜單引導了系統啓動的第二階段(grub的配置)。
grub 菜單的配置:
當第二階段引導完成會grub菜單會提示我們選擇操作系統,
選擇完操作系統後,系統就會加載內核,
內核加載完成後就開始運行系統中第一個進程—INIT,在linux操作系統中init是一切進程的前提。
運行init進程會調用/etc/inittab配置文件,指明系統進入的默認級別,無論進入任何的級別,系統都會調用/etc/rc.d/rc.sysinit腳本對系統進行初始化,當系統進入某一級別時,執行/etc/rc.d/rc系統會進入相應級別的目錄{etc/rc0.d/ etc/rc1.d/ etc/rc2.d/ etc/rc3.d/ etc/rc4.d/ etc/rc5.d/ etc/rc6.d/},執行到最後時,系統會執行/etc/rc.d/rc.local(又稱爲開機腳本),最後根據提供的終端進行登錄。
至此,系統引導到開機的整個過程就完成了。
故障排除:在linux系統中故障一般發生在系統引導的第一階段或者第二階段。第一階段發生故障的原因是MBR中446Byte的bootloader出現問題,如果出現問題就看不到後面的grub菜單;第二階段是grub菜單的配置文件和說明文件出現問題,就沒有辦法選擇操作系統。
下面我們模擬第一階段的故障:
首先,使用dd if=/dev/zero of=/dev/sda bs=446 count=1命令重寫硬盤的前446字節,把MBR中的446字節的bootloader蓋掉。
重啓之後,發現系統引導失敗
此時,我們可以通過引導光盤進行引導系統,進入急救模式(rescue)
進入急救模式後,出現下面的畫面,選擇相應的操作:
點擊ok,出現如下界面:
此時,我們需要重建第一階段,首先執行grub進入下圖模式
然後,用root(hd0,0)來指明某一盤的引導分區,接着使用setup(hd0)重建硬盤的第一階段。
接着,使用crtl+c組合鍵退出grub模式,連續執行兩次exit,系統會自動引導,若引導成功會出現如下的登陸界面。
第二階段的故障模擬:
第二階段主要在/boot/grub/生成很多的配置和說明文件,如果/boot/grub/下的grub.conf文件丟失了,會出現什麼情況呢?現在我們把該目錄下的grub.conf文件刪除,然後重啓系統。
結果出現了以下界面
進入了grub模式,說明我們第一階段的引導正常,問題出現在了第二階段。
然後,使用boot來啓動引導,接着出現下面的登陸界面:
我們進入系統,使用grub-install --root-directory=/ /dev/sda 來重建二階段。
由於第二階段相關的文件都在/boot/grub/目錄下,我們進入該目錄下,查看是否文件缺失
結果發現鏈接所指的文件不存在,那麼我們就需要創建該文件(grub.conf)內容如下:
然後重新啓動,若正常出現如下的界面,說明引導正常:
現在來模擬更嚴重的第二階段的引導,如果我的/boot/grub/下的文件全部丟失了,現在會出現什麼情況呢?我們該怎麼辦?
首先,我把/boot/grub/目錄下的文件全部刪除掉,然後重新啓動系統出現如下界面:
此時,我們需要進入cmos模式,把引導項修改爲光盤引導:
按F10保存修改,會進入如下界面:
然後,進入rescue急救模式,出現如下操作:
點擊ok,出現如下界面:
然後,使用chroot改變根目錄爲/mnt/sysp_w_picpath,使用ls 來查看/boot/grub/目錄下的內容發現內容爲空,然後使用grub-install 重建第二階段:
再次,查看/boot/grub/目錄:
此時,由於我們在cmos中設置了光盤引導,所以要使用硬盤引導的話,就必須去掉光盤,這裏我們取出光盤,連續執行兩次exit,系統會自動引導,接着出現如下界面:
進入了grub模式,說明我們第一階段的引導正常,問題出現在了第二階段。
然後,使用boot來啓動引導,接着出現下面的登陸界面:
我們進入系統,使用grub-install --root-directory=/ /dev/sda 來重建二階段。
由於第二階段相關的文件都在/boot/grub/目錄下,我們進入該目錄下,查看是否文件缺失
結果發現鏈接所指的文件不存在,那麼我們就需要創建該文件(grub.conf)內容如下:
然後重新啓動,若正常出現如下的界面,說明引導正常: