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

重启电脑就进不去系统了。

黑底白字的显示

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),msdos2),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重新变更分区的顺序,产生这样的问题。

相关文章

ubuntu退出redis的示例:指定配置文件方式启动源码redis:roo...
ubuntu中mysql改密码忘了的解决方法:1.在终端中切换到root权...
ubuntu安装mysql失败的解决方法原因:可能是原有的MySQL还有...
使用centos和ubuntu建站的区别有以下几点1.CentOS是Linux发行...
ubuntu图形界面和字符界面切换的方法:可以通过快捷键CTRL+A...
ubuntu中重启mysql失败的解决方法1.首先,在ubuntu命令行中,...