linux的啓動流程及啓動失敗時的修復

    linux開機一般是這個樣子,首先開機執行POST加電自檢,加電自檢其實是調用主板COMS中的BIOS中的程序,來檢測計算機主要硬件的可用性,如果加電自檢成功,BIOS會根據設定的默認啓動項取尋找MBR,比如你的第一啓動項是U盤,第二啓動項是關盤,他會依次在U盤、光盤、磁盤中尋找,找到MBR後會運行MBR中的前446個字節的小程序--bootloader,bootloader會找到被標識爲活動分區的那個分區,並使用grub從該分區引導操作系統,如果能加載到,他會把加載內核(kenerl)並把內核讀入內存並展開,並試圖運行起來,運行起來以後內核開始初始化,此時內核獲取系統的控制權。

    內核獲取控制權後會加載額外的外圍設備驅動,然後把各種外圍的設備做一些初始化,內核把能夠識別的硬件識別出來,比如磁盤,但是內核中能夠加載的驅動程序是很有限。等磁盤系統加載完成後,系統運行第一個進程init,init是所有進程的父進程,當內核加載完成初始化並加載跟文件系統以後,init啓動,init要完成整個系統的初始化,init靠/etc/inittad來實現初始化,所以說inittab這個文件非常重要,inittab丟失或損壞,系統將無法運行。init首先讀取默認的運行級別,然後執行/etc/rc.d/rc.sysinit文件完成系統初始化,而/etc/rc.d/rc.sysinit這個腳本大致完成以下幾項工作1:激活udev和selinux;2:根據/etc/sysctl.conf文件來設置內核參數;3:設置系統4:裝載鍵盤映射;5:激活swap設備;6:設置主機名稱,/etc/sysconfig/netmork;7:跟文件系統檢測,完成後以讀寫方式重新掛載;8:激活Raid;和LVM設備啓用磁盤配額;10:檢查並掛載其他文件系統,根據/etc/fstab;11:清除啓動過程中的臨時文件。rc.sysinit執行完成後,inittab繼續啓動指定級別下的服務,定義ctrl+alt+del的組合功能,定義ups電源,打開6個虛擬終端,初始化GUI的環境等。
    grub是怎樣引導系統的呢?現在講以下grub的執行流程
    grub找到被標識爲活動分區的那個分區,並在該分區中找到kernel,例如vmlinuz-2.6.18-164.el5然後已只讀(ro)方式運行,並指定系統跟所在的位置,如root=/dev/vol0/root。使用initrd釋放initrd-2.6.18-164.el5.img這樣一個小linux系統用來加載內核中沒有的但是系統啓動所必須的驅動,如磁盤的驅動。然後啓動系統。
    但是如果MBR丟失了怎麼辦呢?我們可以使用U盤來引導,將bootloadr寫入U盤
    如果/boot/grub/grub.conf對視或損壞了怎麼辦?我們可以手動引導,如下:
    grub>find (hd0,0) 找第一塊磁盤上的第一個分區中的,產看有沒有內核等文件
    grub>root (hd0,0) 設定root爲對應的那個設備,即第一塊磁盤上的第一個分區
    grub>kernel /vmlinuz-2.6.18-164.e15 ro root=/dev/col0/root quiet
    grub>initrd /initrd-2.6.18-164.e15.img
    grub>boot   引導
    但是grub壞掉了怎麼辦?
    如果你的機器只有一塊磁盤 藉助額外工具如光盤、U盤、或者將硬盤摘先來放在其他主機上,使用其他宿主機編輯grub如下
grub>root (hd1,0)      設定要再哪塊硬盤安裝grub,我們現在認爲在第2塊盤上
grub>setup (hd1)       安裝
grub>quit
但是此次安裝安裝的只是grub的第一段
我們也可以或者使用grub-install命令安裝,但是使用grub-install命令時必須掛載磁盤分區,例如我們將第二塊盤第一分區掛載在系統下的/mnt/boot
接下來我們使用
grub-install --root-driectory=/mnt/boot 回車即可
OK!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章