最近幫朋友解決了一下這個問題,路途艱辛啊。
先說一下這個問題是咋回事?grub可以理解爲引導Linux的一個程序,如果不小心損壞了,例如強制開關機,就出現這種問題。當然我最後發現我這問題遠沒有那麼簡單
正常情況下出現這種問題,可以這麼着來,我先列舉最簡單的辦法:
1.收到命令行的方法:
先在grub rescue中輸入ls,出現類似於
(hd0,msdos1)(hd0,msdos2)等等
然後你分別探測一下,看看咱們的linux在哪個分區下面。
ls (hd0,X)/boot/grub
這樣試試。這是正常的情況下,如果你的磁盤的文件系統不太一樣,直接ls (hd0,msdosx)即可。x指的是上面ls後出現的分區。
最後肯定會發現一個不一樣的,我ls完了後顯示ext4.這正是Linux的系統
grub rescue>set root=(hd0,5)
grub rescue>set prefix=(hd0,5)/grub
grub rescue>insmod /grub/normal.mod
grub rescue>normal
這樣一般就OK了。算是進系統了,但是沒解決問題,因爲只是手動進入了系統,但是grub還是壞的。
sudo update-grub sudo grub-install /dev/sda
進系統後執行上面的命令。重新進行安裝grub.
2.用工具進行修復。boot repair官網
上面的官網有介紹怎麼使用。我稍微說一下。
首先下載.iso鏡像,然後刻錄到U盤裏,開機U盤啓動,然後就進去了,點XXsession進U盤系統進行修復。
3.上面如果都沒有解決,那麼就需要個Livecd,也就是找你的系統U盤,沒有的話就自己再燒錄。
開機U盤啓動,按F5進去,就會進U盤裏的系統。
在這裏所有的命令都可以使用了,還可以操作咱們損壞的Linux的文件。如果你是不小心刪除或者移動了,在這裏都可以進行操作。說一下步驟
sudo mount /dev/sdb5 /mnt
sudo grub-install /dev/sdb --root-directory=/mnt
這樣就可以了。其中,sdb5指的是你的系統所在的分區,剛纔ls的時候已經探測出來了。
如果還沒有解決,用下面的方法,目的是從U盤的root權限轉移到原linux中進行操作。相當於臨時進入原來系統
sudo -s
#where sda1 is my root partition
mount /dev/sda1 /mnt
mount -t proc none /mnt/proc
mount -t sysfs none /mnt/sys
mount -o bind /dev /mnt/dev
mount -o bind /tmp/ /mnt/tmp
# chroot into your ubuntu installation
chroot /mnt
# remove all those grub efi packages
apt-get remove --purge grub-efi-amd64 grub-efi-amd64-bin
# and re-install grub with the bios (non-efi) packages only
apt-get --reinstall install grub-common grub-pc os-prober
# if there is an error repeat the setup via:
grub-install --recheck /dev/sda
這個方法沒用到,一般前面的方法就可以。
最後說一下我爲什麼這些方法都不管用,原來是妹子移動了根目錄的文件,導致GRUB找不到文件了。系統也找不到了。還好最後發現了,用系統啓動盤進去,把文件重新移動回去,這才管用了。