手撕開機grub-rescue問題

原文地址:html

http://52sox.com/linux-resolv...linux

在實際折騰Linux的過程當中,遇到grub-rescue問題是件很正常的事情。實際上這個問題,沒有什麼技術含量,可是要看什麼場合。
記得以前教了某個MM玩Linux,主要也是工做須要吧。原本一切都是很美好的,但是下午卻被一通電話吵醒了。電話的那頭很着急的跟我說,她的電腦啓動不了了,電腦啓動不了的理由有千萬種死法。因而我平靜的問她,由什麼提示或輸出嗎?
而後她跟我講屏幕中出現了grub resuce的字樣。對於這樣的狀況,不用說我都知道,她把某些東西給搞壞了。可是按照網上的教程卻沒法修復,因而詳細詢問後就有了這篇文章了。
實話說,grub2主要分爲2個部分,一部分通常狀況下寫在MBR中,而另1部分寫在某個分區的/boot/grub目錄中。若是grub沒有正確的被安裝就可能會引起上面的問題。
對於這樣的問題,咱們能夠經過以下的方式來進行修復:shell

  • 找到Linux安裝的分區ui

  • 進行臨時grub的關聯.net

  • 從新生成grubunix

下面咱們分別來進行說明。
在這裏,要修改的Linux爲Ubuntu 14.04版本,對於其餘的發行版也是相似的。code

找到分區

咱們先在提示符grub rescue>下輸入命令ls列出全部的磁盤分區信息,這裏假設獲得以下的結果:orm

(hd0),(hd0,msdos8),(hd0,msdos7),(hd0,msdos6),....

接着,咱們須要嘗試列出某個分區上是否存在/boot/grub這個目錄。對於Windows系統的分區來講,會直接獲得1個unknow filesystem的錯誤提示。換句話說,咱們須要進行以下的操做:htm

ls (hd0,msdosX)/boot/grub

在這裏,X表明上面分區中獲得的數字,好比msdos8中的數字8。
若是按照這種方式應該是能夠找到對應分區的,這也是網上教程的方法,可是因爲她的電腦中將boot分區單獨進行了分區,所以使用上述的方式會出現1個對應文件不存在的提示。
所以,咱們須要將上述的方式修改成:blog

ls (hd0,msdosX)/grub

在這裏,咱們去掉了boot目錄,這樣就能夠搜索到對應的目錄了。
對於在使用ls命令時提示文件不存在的狀況咱們能夠進行以下的操做:

ls (hd0,msdosX)/

進行關聯

緊接着,若是找到了正確的grub目錄後,咱們須要將其與grub關聯起來,在這裏,咱們主要經過set命令來進行設置操做,從而臨時進行關聯操做:

grub resuce> set root=(hd0,msdos6)
grub resuce> set prefix=(hd0,msdos6)

而GRUB的正常啓動過程涉及到經過grub-install生成的核心鏡像的環境變量prefix。而環境變量root主要用於從前綴中加載normal模塊。
在這裏,咱們假設正確的分區爲(hd0,msdos6),咱們經過set命令設置其root和prefix都爲該分區。以後咱們須要進行加載的操做了:

grub resuce> insmod normal
grub resuce> normal

在這裏,normal命令會讀取/boot/grub/grub.cfg文件並運行菜單。

從新生成grub

經過上述的方式咱們能夠現實丟失的grub菜單了。此時不要高興的太早了,所以這只是臨時的關聯,若是重啓的話,這個問題仍是會再次出現的。爲了解決這個問題,咱們須要進入Linux中從新生成grub來進行修改:

cat@cat-pc:~$ sudo update-grub
Generating grub configuration file ...
Found theme: /boot/grub/themes/deepin/theme.txt
Found background image: /boot/grub/themes/deepin/background.png
Found linux image: /boot/vmlinuz-4.4.0-2-deepin-amd64
Found initrd image: /boot/initrd.img-4.4.0-2-deepin-amd64
Found Windows 7 (loader) on /dev/sda1
done
cat@cat-pc:~$ sudo grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

在這裏,咱們假設使用的是deepin的發行版,而後使用update-grub從新生成grub菜單。最後再使用grub-install將其安裝在硬盤上。
這樣,咱們就完美的解決了開機啓動時grub rescue致使沒法正常啓動的問題了。
若是某天某個MM向你諮詢這個問題,不要吝惜這樣的好機會,由於花不了你10分鐘又能夠拉近關係。

參考文章:

http://www.gnu.org/software/g...
http://blog.chinaunix.net/uid...

相關文章
相關標籤/搜索