修复启动

介绍

如果GRUB接管MBR,那么GRUB安装分为三部分:

  • 第一部分(一般情况下)写在了MBR上
  • 第二部分是将core.img嵌入到MBR之后的保留扇区部分
  • 第三部分才是/boot/grub下面的各种模块和文件(如果/boot单独分区,则直接写在对应分区的/grub目录)里面。

注意:本条目只针对GRUB2.0。

显示GRUB

一般情况下,GRUB菜单是直接显示的。

有时候用户会将GRUB等待时间设为0,若想临时显示GRUB菜单,开机时,在GRUB加载前按住Shift键不放即可,部分主板可能需要多重启一次才会生效。

若能进入深度操作系统,也可以到 控制中心->启动菜单 调整相应选项。

GRUB错误

deepin15.3启动失败(UEFI)

报错与分析

GRUB loading
Minimal BASH-like line editing is supported.For the first word...(后面省略)
grub > 

与旧版教程中的报错不同,这种情况下标识符是grub>而不是grub rescure>。这个时候直接输入normal并回车不会执行任何操作,说明是normal.mod出错导致的,grub正常识别了deepin的/boot分区,但是加载了出错的normal.mod,导致无法引导系统。出错的原因可能是由于easybcd与grub之间存在兼容性问题导致的,也可能是因为之前重复安装其他操作系统系统但是删除旧系统后没有清理efi分区甚至是直接在旧系统上安装deepin15.3。

解决办法

使用liveUSB、liveCD或者设备上的另一个linux发行版打开gparted查看引导出错的deepin15.3的根目录挂载点,例如/dev/sda1,具体的值与你的分区有关,为了描述方便下面均以/dev/sda1为例,实际操作时记得改为你的系统的挂载点,下文的系统分区也是,以你的实际显示为准; 选择deepin引导,进入grub命令行后(也就是这个报错界面),输入set然后回车; 一般这种报错并不是因为路径识别出错,如果你希望验证是否是grub没有正确识别系统路径,可以参照链接的“查找正确分区”部分(后面的不需要看,因为错误不同),所以可以直接查看prefix=行的显示(一般在set输出的末尾几行),示例:

prefix=(hd2,gpt1)/boot/grub

其中(hd2,gpt1)代表系统所在分区。为了描述方便下面均以(hd2,gpt1)为例。 输入 linux (hd2,gpt1)/boot/vmlinuz,然后按tab按键(Q键左边的那个按键)补全名字。补全之后不要按回车,而是输入空格,然后继续输入root=/dev/sda1 foo bar,之后才回车。这一步是加载系统内核。

注意:(hd2,gpt1)和/boot之间没有空格。

输入initrd (hd2,gpt1)/boot/init,然后按tab按键补全名字,补全之后回车。 输入boot,回车,就可以引导进入系统了。 进入系统之后,在终端下输入sudo update-grub,之后在控制中心打开启动菜单选项,等待它自动更新,更新完毕后就完成修复工作了,可以正常引导deepin15.3了。欢呼吧!

鸣谢:@mattd

旧版方法

GRUB loading
error:unknow filesystem
grub rescue> 

已经发现下面几种操作会导致这种问题:

  • 想删除Linux,于是直接在windows下删除/格式化了Linux所在的分区。
  • 调整磁盘,利用工具合并/分割/调整/删除分区,使磁盘分区数目发生了变化。
  • 重新安装系统,把linux安装到了新分区,原有分区已经格式化,但是没有重新安装GRUB2。
  • 用Linux备份工具/衍生版制造工具等,把主分区恢复成了8.X的老版本,结果老版本的GRUB是GRUB1,于是把GRUB2破坏掉了。

重装GRUB

  1. 使用深度操作系统启动盘引导电脑启动,待进入安装界面后,按下Ctrl+Alt+F1,执行以下命令,稍等片刻,进入Live CD模式。

    sudo service lightdm stop  
    startx
    
  2. 进入Live CD系统后打开终端,挂载需要修复系统的 / 挂载到/mnt,可以利用Gparted或者sudo fdisk -l命令查看,例如需要修复系统的/分区为/dev/sda1。

    执行以下命令:

    sudo mount /dev/sda1 /mnt

    如果需要修复系统的/boot单独分了出来(假设为/dev/sda2),也要挂上,终端执行:

    sudo mount /dev/sda2 /mnt/boot

    另外,将Live CD系统的/dev目录同时挂在/mnt下,终端执行:

    sudo mount --bind /dev /mnt/dev

    然后使用chroot命令,将Live CD的 / 设为以前的/,终端执行:

    sudo mount --bind /proc /mnt/proc
    sudo mount --bind /sys /mnt/sys
    sudo chroot /mnt
    

    安装并刷新GRUB设置(主板为BIOS引导),请终端执行:

    grub-probe -t device /boot/grub
    sudo grub-install /dev/sda
    sudo grub-install --recheck /dev/sda
    sudo update-grub
    

    安装并刷新GRUB设置(主板为UEFI引导),请终端执行:

    grub-probe -t device /boot/grub
    sudo grub-install --target=$(ls /usr/lib/grub/ | grep efi)
    sudo grub-install --recheck /dev/sda
    sudo update-grub
    
  3. 挂载efi分区到/boot/efi,安装grub-efi包。

    grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Deepin
    sudo grub-mkconfig -o /boot/grub/grub.cfg
    
  4. 修复完成,重启电脑生效。

删除GRUB

删除GRUB可能会导致电脑无法引导deepin,请谨慎操作。如果需要彻底删除GRUB2(卸载深度操作系统),请查看卸载系统

参考链接