一、Linux系統啓動過程的大體步驟與調用過程:linux
第一階段:BIOS啓動引導階段,主要實現硬件的初始化以及查找啓動介質,從MBR中裝載啓動引導管理器(GRUB)並運行該啓動引導管理;shell
第二階段:GRUB引導階段,裝載statge1,statge1.5,statge2,讀取/boot/grub.conf文件並顯示啓動菜單,裝載所選的kernel和initrd文件到內存中;vim
第三階段:內核階段,運行內核啓動參數,解壓initrd文件並掛載initrd文件系統,裝載必須的驅動,掛載根文件系統;windows
第四階段:Sysinit初始化階段,啓動/sbin/init/程序,運行rc.sysinit腳本,設置系統環境,啓動swap分區,檢查和掛載文件系統,讀取/etc/inittab文件,運行/etc/rc.d/rcn.d中定義的不一樣運行級別的服務初始化腳本,打開字符終端1-6號控制檯或者圖形顯示管理的7號控制檯bash
啓動階段服務器 |
讀取的文件和操做的對象運維 |
BIOS啓動引導階段ide |
Noneui |
GRUB啓動引導階段spa |
/boot/grub/grub.conf /boot/grub/statge1_5 /boot/grub/statge2 |
內核階段 |
/boot/vmlinux-<version> /boot/initrd-<version> |
Sysinit初始化階段 |
/etc/rc.d/rc.sysinit /etc/inittab /etc/rc.d/rc<n>.d /etc/rc.d/init.d/* |
二、常見的系統啓動故障與排除
1)、故障一:root口令丟失
當你忘記本身的root口令時,只須要在系統啓動時進入單用戶模式,即系統運行的0級別下便可,這個模式下不須要root的口令便可登陸,具體過程以下:
在引導等待的讀秒結束前按下回車鍵:
而後進入BIOS模式,選擇須要操做的系統(若是是多系統的話),按E進入編輯模式
選擇內核編輯,在quiet後面輸入1或者single,表示進入單用戶模式,
而後回車返回到內核,按下B啓動系統
執行runlevel,能夠看到已經進入單用戶模式
修改root帳號的密碼
或者直接刪除root帳號的密碼
修改完成後執行init 3,進入3級別運行系統
而後登入系統執行runlevel,能夠看到運行正常
2)、故障二:grub.conf文件被誤刪除
/boot/grub/grub.conf文件肩負着引導內核和驅動等的重要功能,若是在操做中不當心誤刪除了該文件,那麼系統的在啓動時會自動進入grub shell模式,你只能手動來引導內核和驅動了,通常狀況下,該文件最好作一個備份,防止因爲誤操做刪除引發系統沒法啓動,具體解決過程以下:
沒有grub.conf文件時開機會進入grub shell模式:
輸入help能夠查看當前模式的可用命令
輸入root (按下tab鍵能夠看到幫助,因爲系統還沒有啓動,因此默認硬盤爲hd0
輸入root (hd0,按下tab能夠查看分區
若是不知道系統的/boot在那個分區上,能夠一個一個試試,不過要注意,安裝操做系統時,/boot分區確定是ext格式的文件系統,因此這也能夠做爲一個區分依據
假如我輸入root (hd0,1),即選擇第二個分區,輸入kernel / 按下tab鍵,會顯示當前分區下的文件,由此能夠發現並無咱們引導所需的內核和驅動
輸入正確的/boot分區,輸入kernel / ,按下tab鍵,選擇內核(ro表示只讀,root=表示把引導程序交給/dev/sdb2分區,即爲原系統的/boot/分區)
輸入initrd / 按下tab鍵,選擇驅動文件
輸入boot重啓系統
進入系統後,查看一下grub引導文件
沒有grub.conf文件,因此下次系統啓動後還須要從新手動引導,咱們能夠本身編寫一個grub.conf文件,方便系統啓動時自動引導
[root@fcy ~]# vim /boot/grub/grub.conf default=0 #默認啓動第一個系統 timeout=5 #引導等待時間 hiddenmenu #隱藏BIOS,須要在timeout計時結束前按下enter進入 title CentOS-6.5 #系統啓動顯示的標題信息 root (hd0,0) #指定引導分區 kernel /vmlinuz-2.6.32-431.el6.i686 ro root=/dev/sda2 rhgb quiet #指定內核文件,ro表示只讀,root=/dev/sda2引導完成後交給真正的系統根目錄,rhgb表示引導時以進度條的方式顯示引導過程,quiet表示靜默啓動,即不輸出引導進程 initrd /initramfs-2.6.32-431.el6.i686.img #指定驅動文件名稱
若是在指定內核和驅動時不知道文件完整名稱,可使用vim的底行命令來調入
按住shift輸入兩個!!,便可以進入底行命令模式,而後輸入使用ls命令顯示內核文件和驅動文件便可,支持命令補全
Grub.conf文件編輯文成後,從新啓動系統便可
這個即爲rhgb的做用
這個是timeout指定的時間,CentOS-6.5即爲title
系統正常啓動
3)、故障三:GRUB引導的statge1丟失(即MBR前446字節被覆蓋)
使用命令覆蓋MBR引導分區的前446字節
dd if=/dev/zero of=/dev/sda bs=446 count=1
重啓系統,並插入光盤
發現選項裏有一個Rescure install system,這是系統的救援模式,進入救援模式
救援模式下輸入chroot /mnt/sysp_w_picpath,執行grub-install /dev/sda,便可從新設置MBR
重啓系統,恢復正常
4)、故障四:MBR丟失
若是隻是MBR的前446字節丟失,還能夠用救援模式使用grub-install從新安裝,這種狀況下分區表並未丟失,若是整個MBR的512字節都丟失了,也就是意味着連同分區表與引導去一塊沒有了,爲了防止這種狀況出現,要提早作好MBR的備份文件
使用命令備份MBR文件,保存在系統本地或者遠程服務器上
一但這種狀況發生了,那麼救援模式葉沒法拯救你的系統了,這時候咱們須要一種光盤,名爲liveCD的鏡像光盤,相似於windows的PE盤,是一種移動系統,啓動liveCD系統後能夠救援你的硬盤上的文件資源
裝上liveCD的光盤後進入BIOS,並設置光盤啓動系統,F10保存退出
登入系統後切換root帳號,查看/dev/sda盤的信息,發現沒有分區表
登陸遠程服務器,拷貝mbr的備份
恢復備份文件到MBR
再次查看/dev/sda的分區狀況
能夠看到,MBR已經恢復,重啓系統便可
5)、故障五:statge2丟失(即/boot目錄下的grub目錄丟失)
進入系統,刪除/boot/grub
重啓系統後進入grub shell模式,重複故障二的步驟,手動引導系統啓動
進入系統後會,使用命令重裝grub,指定路徑爲根目錄/
查看生成的grub目錄,發現沒有grub.conf文件
手工建立/boot/grub/grub.conf
重啓系統便可
三、總結
做爲一個系統運維師,熟悉linux系統的啓動過程是必需的,而且可以處理最多見的系統啓動故障問題。因爲沒有接觸過真實環境的系統啓動故障 ,以上排除方法只是手動模擬出來的,因此有不少欠缺,有錯誤和建議請指導。