您的位置:首页 > 其它

grub无法引导ubuntu分区的解决方法

2017-02-13 13:50 423 查看
重启电脑就进不去系统了。
黑底白字的显示

grub>

一下就愣了。

接下来的几天一直找方法和折腾中,如果没能挽救我的电脑,我最后肯定就重装了。

原因分析,这是因为grub没能找到正确的Ubuntu分区的原因,我们可以通过设置解决。

输入:ls

会显示分区
输入:set

显示现在的grub设置,我的显示了

prefix=(hd0,msdos1)/boot/grub

root=hd0,msdos1

显然不对,我的ubuntu分区在(hd0,msdos8),这里主要还是看你自己的系统在哪个分区,不清楚可以一个个试。
输入:set prefix=(hd0,msdos8)/boot/grub

输入:set root=hd0,msdos8
再一次

输入:set

查看一下是不是设置好了。
显示

prefix=(hd0,msdos8)/boot/grub

root=hd0,msdos8

设置正确了。

输入:insmod normal
输入:normal

应该可以看到grub成功引导了。不要以为这样就完了,如果最后一步没做,重启后你就又要郁闷了。
输入:update-grub

输入:grub-install /dev/sda

更新grub,写入磁盘。

----------------------------------------------------------------我是分割线---------------------------------------------------

一、开机出现 grub rescue 指令模式

假如看到grub rescue,表示mbr (master boot record)的资料,完全对应不上磁盘的状况,所以无法辨别系统的所有分区,更不用说连grub menu都无法读入。所以,处理的方法就是帮他找到grub的设置。



grub rescue>ls

(hd0), (hd0,msdos3), (hd0,msdos2), (hd0,msdos1)

ls可以列出所有的硬碟与分区,(hd0)是第一个硬碟,(hd0,msdos1)是第一颗硬碟的第一个分区。以此类推。输入指令时,可以简写成(hd0,1)表示。若是GPT分割,出现的会是(hd0,gpt0)的格式。

接下来我们必须了解各分区,到底是什麼分区?所以我们可以用ls列出文件列表判断,格式如下:

grub recue> ls (hd0,1)/

grub recue> ls (hd0,2)/

grub recue> ls (hd0,3)/

确定各个分区那个是 / ,哪个是/boot,哪个是swap后,就可以开始继续处理。现在假设 / 是(hd0,3),/boot 是(hd0,2)。

额外说明一下,(hd0,2)/grub下的i386-pc或者x86_64-efi目录,是放置grub模组所在:前者出现在以mbr开机的系统,后者出现在efi开机的系统 。你可以尝试 ls 看看,会发现列出一堆.mod档,这是开机所需要的文件,稍候我们也会需要其中一个模组。





接下来是正式设置,其实只有四行指令:

grub rescue> set root=(hd0,3)

grub rescue> set prefix=(hd0,2)/grub

grub rescue> insmod normal

grub rescue> normal

第一行指令:设置根目录所在的分区

第二行指令:设置grub目录。这样他才知道哪里去找模组。此行设置错误,第三行指令执行时,就无法载入模组。假如你的 /boot 没有额外分割,那这行就要写成 set prefix=(hd0,3)/boot/grub

第三行指令:载入normal模组

第四行指令:执行normal模组

normal模组作用是什麼?他会把一些指令,文件系统模组,及其他需要的模组自动呼叫进来。

假如你的grub.cfg没有问题,应该就可以看见grub菜单了。提醒一点,这模式下,指令只要打错,只能开机重来,无法重打一次覆盖之前的命令。

进入系统后,记得 处理grub的异常状况

附注:我利用fdisk的expert mode重新变更分区的顺序,产生这样的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐