我的linux在調整分區後,出現了grub rescue>這表示grub2的設定檔壞了,由於分區調整或分區UUID改變造成GRUB2不能正常啟動,從而進入修複模式(grub rescue)也稱救援模式。在救援模式下只有很少的命令可以用:set , ls , insmod , root , prefix(1)set 查看環境變數,這裡可以查看啟動路徑和分區。(2)ls 查看裝置(3)insmod 載入模組(4)root 指定用於啟動系統的分區,在救援模式下設定grub開機磁碟分割(5)prefix 設定grub啟動路徑一、分區亂了,我不知道boot目錄在什麼地方了ls #查看一下裝置狀態
grub rescue> ls (hd0,msdos3)error: bad filename.提示:錯誤的檔案名稱,我在測試時發現必須是後面加一個/grub rescue> ls (hd0,msdos3)/./ ../ lost+found/通過查看發現在(hd0,msdos1)/下有一個boot目錄二、設定grub的開機磁碟分割和路徑set root=(hd0,msdos1) #設定grub開機磁碟分割set prefix=(hd0,msdos1)/boot/grub/ #設定grub啟動路徑查看一下設定情況:grub rescue> setprefix=(hd0,msdos1)/boot/grubroot=hd0,msdos1三、載入基本模組insmod /boot/grub/normal.mod #載入基本模組四、進入正常模式normal #進入正常模式,出現菜單,如果載入grub.cfg(錯誤的)可能出現問題,按shift可以出現菜單,之後按c鍵進入控制台進入正常模式後就會出現grub>這樣的提示符,在這裡支援的命令就非常多了。五、引導系統set root=(hd0,msdos1) #設定正常開機磁碟分割linux /boot/vmlinuz .... ro text root=/dev/sda1 #載入核心,進入控制台模式initrd /boot/initrd .... #載入initrd.imgboot #引導六、更新grub安裝:grub-install /dev/sda更新:update-grub虛擬機器實驗:經過上面的經曆,我在虛擬機器裡進行了一下實驗,加深鞏固。一、把boot目錄移到別的分區mv /boot/ /home/這樣重啟之後就出現了grub rescue>救援模式。二、手動啟動過程記錄ls (hd0,msdos6)/ #找到了boot所在的分區set root=(hd0,msdos6) #設定grub開機磁碟分割set prefix=(hd0,msdos6)/boot/grub/ #設定grub啟動路徑insmod /boot/grub/normal.mod #載入基本的模組normal #從救援模式進入正常模式set root=(hd0,msdos6) #設定系統開機磁碟分割,在這裡指向核心所在的分區linux /boot/vmlinuz-2.6.35-22-generic ro text root=/dev/sda1 #載入核心initrd /boot/initr ..... #載入initrd.imgboot #啟動
測試中正常啟動並出現登入對話方塊。
雙系統,win7下一鍵Ghost,進入grub rescue的解決方案
本人安裝的是win7+ubuntu10.10,硬碟直接安裝。因為win7下裝了幾個大軟體,所以決定一鍵Ghost備份一下,結果重啟之後,就進入了grub
rescue介面:
error:unknown filesystem
grub rescue>
研究了半天,才解決這個問題。先說說是怎麼回事。
安裝ubuntu時,啟動是用grub2進行啟動。我的win7在C盤,
Ubuntu空間是從D盤裡分出來的。我們知道,每次系統啟動時都是先進入grub,也就是先在ubuntu的啟動目錄裡選擇進入哪個系統,如果按分區來講,grub2在(hd0,msdos7)也就是我的ubuntu所在的分區。那麼啟動時root應該設在(hd0,msdos7),可一鍵ghost會修改啟動,它把root改在(hd0,msdos9),這是個windows分區,也就是NTFS分區,ubuntu是不能識別這種檔案系統的,所以就有了error:unknown
filesystem,這種情況下自然不能啟動,那麼grub2就會啟動grub rescue模式,就是修複模式。那麼我們要做的就是把grub重新指向(hd0,msdos7)。
下面是具體步驟:
①查看分區
因為每個人的分區不一樣,所以我們要查看分區,用ls指令
grub rescue>ls
斷行符號後,就會出現
(hd0) (hd0,msdos9) (hd0,msdos8) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5) (hd0,msdos1)
grub rescue>
註:我用的是grub2,對於grub使用者,分區前沒有msdos字樣
上面是我的分區,每個人的不一樣。
grub rescue>set斷行符號
prefix=(hd0,msdos9)/boot/grub
root=hd0,msdos9
從上面可以看出來現在我的系統是從(hd0,msdos9)裡啟動的。
那麼怎麼知道ubuntu在哪個分區呢?進入第二步
②尋找ubuntu所在分區
這一步我們要一個一個的試,
還是用ls指令
先試下在不在(hd0,msdos8)裡邊
grub rescue>ls (hd0,msdos8)
斷行符號會發現,不是,還是unknown filesystem
接著來
。。。。。。。。。
當我試到
(hd0,msdos7)的時候,可以看到一下子多了很多字,這些就是我ubuntu主資料夾下的檔案夾和檔案的名字。OK,找到分區了!
③修改開機磁碟分割
grub rescue>root=(hd0,msdos7)
grub rescue>prefix=/boot/grub //grub路徑設定
grub rescue>set root=(hd0,msdos7)
grub rescue>set prefix=(hd0,msdos7)/boot/grub
grub rescue>insmod normal //啟動normal啟動
grub rescue>normal
依次敲入上面的指令,是不是看到熟悉的啟動菜單了?選win7後,一鍵Ghost就開始備份系統了。別高興太早,一切還都沒開始呢。如果你不是因為一鍵Ghost問題進入grub
rescue,可以直接跳到第⑤步
④再來一遍
當你等著一鍵Ghost備份完系統,重啟後,你發現還是
error:unknown filesystem
grub rescue>
別著急,再把前三步進行一遍就可以了
⑤進入命令列啟動Ubuntu
進入系統啟動選項介面後,你發現,無論點那個還是進不去,這是因為你還沒有真正的修改grub,這個要到ubuntu裡修改
進入系統啟動項介面後,按C進入命令列模式
grub >set root=hd0,msdos7
grub >set prefix=(hd0,msdos7)/boot/grub
grub >linux /vmlinuz-xxx-xxx root=/dev/sda7
//裡邊的xxxx可以按Tab鍵,如果有acpi問題,在最後加一句acpi=off
grub >initrd /initrd.img-xxx-xxx
grub >boot
Ubuntu正常啟動了吧?
⑥進入ubuntu修複grub
大功就要高成了
進入Ubuntu後,修複grub
在終端裡運行
sudo update-grub
重建grub到第一硬碟mbr
sudo grub-install /dev/sda
好啦,重啟,一切搞定!