1. 程式人生 > >initrd導致系統核心無法啟動的修復示例

initrd導致系統核心無法啟動的修復示例

>> INTRO:initrd概述
initrd 是 boot loader initialized RAM disk的簡稱,即由 boot loader 初始化的記憶體盤。Linux初始 RAM磁碟(initrd)是在系統引導過程中掛載的一個臨時根檔案系統,initrd最初是設計用來通過一個臨時根檔案系統來作為核心到最終的根檔案系統之間的橋樑。用於支援兩階段的引導過程(即載入驅動模組和執行真正的根檔案系統中/sbin/init程序兩個階段)。initrd檔案中包含了各種可執行程式和驅動程式,它們可以用來掛載實際的根檔案系統,然後再將這個 initrd RAM 磁碟解除安裝,並釋放記憶體。在很多嵌入式Linux 系統中,initrd 就是最終的根檔案系統。
  initrd 中包含了實現兩個階段引導過程所需要的目錄(如/bin、/dev、/etc等)和可執行程式的最小集合,例如將核心模組載入到核心中所使用的 insmod 工具。
一旦initrd損壞或由於grub.conf出錯等原因造成系統無法識別initrd時,核心將無法載入,系統可能直接進入“grub>” 介面或者出現如下錯誤:
Kernel panic – not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
注:在出現該錯誤時,系統宕機,鍵盤無法動彈,只能通過手工按電源鍵關機。此時,當務之急是先啟動系統,然後再進行後續處理,過程如下:
>>STEP 1: 進入grub命令列
系統啟動到grub選單時,按“c”進入grub命令列。原本嘗試通過按“e”然後進入單使用者進行操作,但此時因核心無法載入而無法進入單使用者。
若啟動時系統自動進入“grub>”模式,則可忽略此步驟。
>>STEP 2: 找到/boot/grub/grub.conf 分割槽所在目錄
grub> find /boot/grub/grub.conf
當然,如果你已經知道linux所在分割槽的具體位置,可以略過此步驟。如“sda1”所在位置即為“(hd0,0)”
--本例所在位置為“(hd0,0)”
檢視linux核心資訊
grub> cat (hd0,0)/boot/grub/grub.conf
>>STEP 3: 修正並指定/boot分割槽,並從所指定的/boot分割槽啟動
grub> kernel /vmlinuz-2.6.18-194.el5 ro root=/dev/VolGroup00/LogVol01 rhgh quiet
--該部分內容即正常啟動時啟動項的內容,可以從安裝同一版本Linux的裝置的/boot/grub/grub.conf中模仿編輯。輸入完畢後,按“Enter”。
grub> init /initrd-2.6.18-194.el5.img     
--此部分內容仿自可以正常使用的同一版本的主機grub.conf檔案。輸入完畢後,按“Enter”。
grub> boot(hd0,0)
--從指定分割槽啟動。啟動時在螢幕下端看到“Kernel alive”等字樣,表明此時核心真正Alive了。
>>STEP 4: 修改並確認grub.conf內容
順利啟動後,記得修改/boot/grub/grub.conf 的內容   
--可參見其他可以正常使用的同一版本的主機grub.conf檔案。
當然,對於此種情況,如果手頭有系統安裝光碟,也可通過光碟進入“linux rescue”模式進行處理,不再贅述。


參考材料:http://hi.baidu.com/ge_star/blog/item/67a8a72221deccfbd6cae2b0.html