重新安裝了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>normal5 修復grub(之后我沒有試成功,感興趣的自己常識下)
進入Linux系統后,在命令行里輸入 sudo update-grub
6 使用sudo fdisk -l 查看啟動盤位置,使用下面指令安裝grub sudo grub-install /dev/sda9 //sda是你的啟動磁盤
5 修復grub(在我的機器上成功修復,ubuntu12.04)
(2)安裝grub
轉引請注明:http://blog.csdn.net/u012606927/article/details/17929369
