黑底白字的显示
grub>
一下就愣了。
接下来的几天一直找方法和折腾中,如果没能挽救我的电脑,我最后肯定就重装了。
原因分析,这是因为grub没能找到正确的Ubuntu分区的原因,我们可以通过设置解决。
输入:ls
会显示分区输入:set
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重新变更分区的顺序,产生这样的问题。