error:no such partition grub rescue


重新安裝了ubuntu12.04后,Ubuntu開機就出現:
error:no such partition
grub rescue >
一般情況下,出現這類錯誤是引導文件出錯或者系統找不到引導文件,而系統並沒有壞,所以不用重新安裝系統。需要進行如下的設置。
一 grub介紹
grub是一個引導管理程序,它允許用戶可以在計算機內同時擁有多個操作系統,並在計算機啟動時選擇希望運行的操作系統。GRUB可用於選擇操作系統分區上的不同內核,也可用於向這些內核傳遞啟動參數。
[引導過程]
由硬盤啟動時,BIOS通常是轉向第一塊硬盤的第一個扇區,即主引導記錄(MBR)。裝載GRUB和操作系統的過程,包括以下幾個操作步驟:
(1)裝載記錄
基本引導裝載程序所做的唯一的事情就是裝載第二引導裝載程序。
(2)裝載Grub
這第二引導裝載程序實際上是引出更高級的功能,即裝載grub,它同時引導機器里的多個系統,如win7和ubuntu12.04, 以方便允許用戶選擇裝載一個特定的操作系統。

 

當Grub環境開始載入第二步引導裝載程序時,它尋找自己的配置文件(menu.lst)。當找到配置文件后,它使用這個配置文件建立一個要載入的操作系統的菜單列表,即供用戶選擇的菜單, 然后顯示器上顯示引導菜單。 如果配置文件沒有被找到,或者如果配置文件不能讀取,那么GRUB將載入命令行接口,即出現grub>      我的機器出錯現實是grub rescue >  顧名思義是急救方式
(3)裝載系統
當用戶選擇某個系統后,如選擇ubuntu12.04, 即選擇了linux內核。GRUB把機器的控制權移交給操作系統。這樣就進了選擇的系統的啟動界面。windows的啟動時現實的經典圖標還記得嗎?

 

需要提醒的是,windows操作系統都是使用一種稱為鏈式裝載的引導方法來啟動的,主引導記錄僅僅是簡單地指向操作系統所在分區的第一個扇區。而linux使用的是引導管理程序grub,靈活性更強!

 

[設備名稱]
IDE硬盤用hd開始,SCSI硬盤用sd開頭。軟盤用fd開頭。
windows下分區命名和linux不大一樣。是從0算起。
(hd0,0)。表示C盤。(hd0,4)。表示D盤。
這里表示第一個主分區是c盤,且它的第一個邏輯分區是d盤,  如果D盤也是主分區,應該寫成hd0,1)

 

windows系統的第一個IDE硬盤驅動器表示成(hd0),其上的第一個分區表示為(hd0,0),也就是說對於硬盤,采用(hdx,y)的形式來表示,x、y都是從0開始計數的,x表示硬盤號,y表示分區號。
由於主分區只能有四個,所以第一硬盤的四個主分區分別用(hd0,0)~(hd0,3)來表示;邏輯分區則從(hd0,4)開始算,即第一邏輯分區用(hd0,4),第二邏輯分區用(hd0,5)來表示,依次類推。
在Linux系統中,如ubuntu,(hdx,y)中的y是從1開始計數的。第一邏輯分區用(hd0,5),第二邏輯分區用(hd0,6)來表示

 
 

二 解決問題
由上面的內容可知,這是grub的命令行接口
1 檢查當前設置:grub rescue> set 顯示
我的機器顯示的結果:
prefix=(hd0,msdos3)/boot/grub   //表示grub的位置
root=hd0,msdos3    //根root位置
grub指示的位置是(hd0,msdos3)/boot/grub,跟用戶是hd0,msdos3

 

2 找出grub目錄的真實位置
grub rescue>ls
ls命令會列出所有磁盤分區信息,如我的系統列出的信息如下:
(hd0) (hd0,msdos9) (hd0,msdos8) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5) (hd0,msdos1)
很明顯我的機器里沒有(hd0,msdos3)分區,所以系統找不到引導記錄,啟動不了機器。

 

循環使用下面的命令,直至顯示該分區所包含文件內容,如果磁盤下面沒有grub會提示unknown filesystem或者其他一些不正常信息
grub rescue>ls (hd0,msdos9)/boot/grub
假設我們試到(hd0,msdos9)時,成功顯示了文件內容.
2 設定root
grub rescue>set root=(hd0,msdos9) //括號里分區為上一步嘗試成功的分區,即linux grub 所在分區
grub rescue>set prefix=(hd0,msdos9)/boot/grub
3 啟動模式設定,這里選擇正常啟動。還記得我們啟動windows時的“正常啟動”,“進入安全模式啟動”選項嗎?
正常啟動:
grub rescue>insmod /boot/grub/normal.mod

網上有的教程是insmod normal.mod,這個是一種相對路徑,我沒有嘗試去驗證,感興趣的可以試試,我給出的是絕對路徑。

在我的機器ubuntu12.04 上測試了一下,使用insmod normal.mod會出現錯誤。

這是grub rescue會高亮,進去第四步。
4 正常啟動 
    grub>normal
5 修復grub(之后我沒有試成功,感興趣的自己常識下)
進入Linux系統后,在命令行里輸入 sudo update-grub

6 使用sudo fdisk -l 查看啟動盤位置,使用下面指令安裝grub sudo grub-install /dev/sda9 //sda是你的啟動磁盤

5 修復grub(在我的機器上成功修復,ubuntu12.04)

 

(1)更新grub   
     sudo update- grub
(2)安裝grub
      sudo   grub-install /dev/sda     //sda是主分區,sda5,sda6,sda7......是邏輯分區
 只要這個正確了,下次重啟電腦就不會再進入剛才那種錯誤
6 至此,系統能夠引導ubuntu,但是不能夠引導原來的win7,解決辦法
  (1)進入 /boot/ grub/ 下面查看grub.cfg  和menu.lst
               cd /boot/ grub
     (2) 發現grub.cfg 里面有win7的記錄,但是沒有menu.lst里面沒有,所以沒有系統啟動時沒有看到win7的選項,這里可以看出,menu.lst是一個呈現給用戶的引導菜單,只要我們將win7加入到這個菜單中就可以了
    (3)往menu.lst里面添加引導記錄
       參照網上教程

 

 

轉引請注明:http://blog.csdn.net/u012606927/article/details/17929369


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM