最近帮朋友解决了一下这个问题,路途艰辛啊。
先说一下这个问题是咋回事?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找不到文件了。系统也找不到了。还好最后发现了,用系统启动盘进去,把文件重新移动回去,这才管用了。