UBUNTU修改了分區無法啟動之後的修複

來源:互聯網
上載者:User

 

我的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

好啦,重啟,一切搞定!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.