不光對於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/sysimage,使用ls 來查看/boot/grub/目錄下的內容發現內容為空白,然後使用grub-install 重建第二階段:
再次,查看/boot/grub/目錄:
此時,由於我們在cmos中設定了光碟片引導,所以要使用硬碟引導的話,就必須去掉光碟片,這裡我們取出光碟片,連續執行兩次exit,系統會自動引導,接著出現如下介面:
進入了grub模式,說明我們第一階段的引導正常,問題出現在了第二階段。
現在,我們就需要用命令來引導系統的啟動了:
然後,使用boot來啟動引導,接著出現下面的登陸介面:
我們進入系統,使用grub-install --root-directory=/ /dev/sda 來重建二階段。
由於第二階段相關的檔案都在/boot/grub/目錄下,我們進入該目錄下,查看是否檔案缺失
結果發現連結所指的檔案不存在,那麼我們就需要建立該檔案(grub.conf)內容如下:
然後重新啟動,若正常出現如下的介面,說明引導正常:
本文出自 “夜風” 部落格,請務必保留此出處http://jiangkun08.blog.51cto.com/6266992/1262482