利用 Boot Repair 修复 Ubuntu 的 UEFI 引导

By | 最新修改:2024-08-17

本文主要写如何修复 Ubuntu 的 UEFI GRUB 启动引导。

前言

事件原由

原本本人物理机器上安装有 Ubuntu 20.04 系统,今天想在同一物理机器给U盘安装一个 Ubuntu Kylin,它们 同是 UEFI 引导启动

当安装完成 UKylin,启动的时候,结果就出现问题。

然而原因是 UKylin 的 /boot/efi/EFI/ubuntu 目录覆盖掉原有的 Ubuntu 20.04 的 EFI/ubuntu 目录。

在本人删除 UKylin 后,进不入 Ubuntu 20.04。

然后启动程序给带入了 GRUB 的界面(如下图):

系统启动进入 GRUB 命令行界面

点击图片查看大图

模拟并且重现

由于需要重现当时的环境,现在 Ubuntu 20.04 下用 VirtualBox 虚拟机做这件事。


进入 GRUB

在 GRUB 命令行查看硬盘和分区信息

输入 ls 命令查看当前机器的所有硬盘,将会按一定顺序列出所有分区:

列出所有分区

点击图片查看大图

这里只有一个硬盘,并且此虚拟机中安装的 Ubuntu 只有两个分区,一个是 /(系统根目录,root 分区),一个是 EFI 分区。

而本人的物理机器中有多个硬盘,并且 Ubuntu 系统 有多个分区,那么就类似于下面的输出:

...(hd0) (hd0,gpt2) (hd0,gpt1) (hd1) (hd1,gpt5) (hd1,gpt4) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1)...

在本人物理机器中安装 Ubuntu 的硬盘有五个分区。

  1. 第一个分区 (hd1,gpt1) 装的是 boot 分区。
  2. 第二个分区 (hd1,gpt2) 装的是 EFI 分区,EFI 分区在 /boot/efi/ 目录下。

  3. 第三个分区 (hd1,gpt3) 装的是 root 分区。

  4. 第四个是装着普通用户目录的 home 目录。

  5. 第五个是 Swap 分区。

不难看出,以上的大部分分区(除了 EFI)都将挂载在 / 分区(即分区 (hd1,gpt3) )中,而 EFI 分区挂载在 boot 分区的 efi 目录上。

至于如何确定哪个分区的职能,请看下一步。

列出某个硬盘的某个分区

执行 ls (hd(硬盘序号,从 0 开始),gpt(分区序号,从 1 开始)) ,比如: ls (hd1,gpt1),列出第二个硬盘第1个分区的信息,这里以此虚拟机中的系统为例。

查看某个分区的文件系统格式

运行 ls (hd0,gpt1) 获取第一个硬盘第 1 个分区的信息,显示的信息有:文件系统的格式(如 fat,ext 等等)、分区的编号(UUID …)以及分区的大小等等。

列出分区下的文件

运行 ls (hd0,gpt1)/ 列出该分区下的文件

如下图:

列出分区下的文件

点击图片查看大图

图中表明分区 (hd0,gpt2) 为系统根目录,即 / 目录。


使用 GRUB 命令行

通过一些简单的配置,然后 临时进入 Ubuntu 20.04 的图形界面

为进入图形界面而设置 GRUB

# ls 获取所有的分区序号
grub > ls

# 告诉 GRUB 程序 Ubuntu 20.04 系统的根目录(即 / 目录)
# 可以根据上文关于 ls 命令的使用方法来确定哪个是系统根目录
# 这里的 / 目录是在第一个硬盘的第 2 个分区
grub > set root=(hd0,gpt2)

# 指定 GRUB 目录的位置
# 如果像本人物理机器那样分出一个 boot 分区,
# 即:/boot 为独立于 / 的独立分区
# 假设 boot 分区在第二个硬盘的第 1 个分区,
# 那么就这样做:
grub > set prefix=(hd1,gpt1)/grub

# 如果并没有分出 boot 分区,也就是没有 /boot 分区,
# 只有 /boot (一个在根目录下的)一般目录
# 那么 boot 目录将在 / 目录下(/boot)。
# 假设 / 目录在第一个硬盘的第 2 个分区
# 此时要这样做:
grub > set prefix=(hd0,gpt2)/boot/grub

grub > insmod normal
grub > normal

注意事项

如果在执行 normal 命令后不能正确启动 Ubuntu 20.04,请 检查一下系统根目录和 grub 目录是否正确指定

遇到麻烦可以执行 reboot 重启解决。

如果正确指定上面所说的两个目录( /grub),那么您就没有必要再往下看了。

那么你也只能 进入 Live CD 做其他处理方式了。因为这里就只写到在 GRUB 命令行里 临时进入 Ubuntu 图形用户界面

临时进入 Ubuntu

点击图片查看大图


临时进入 Ubuntu 图形界面

这一章写的是通过上文在 GRUB 命令行进行简单的配置成功进入 Ubuntu 20.04,并且修复 UEFI 引导。

Ubuntu 的 GUI 登录界面

点击图片查看大图

登录进 Ubuntu 后:

  1. 打开终端(Ctrl+Alt+t)。
  2. 删除 EFI 目录下的所有文件(不包含父目录 EFI 本身):

    sudo rm -rf /boot/efi/EFI/*
    
  3. 安装 Boot Repair
    sudo add-apt-repository ppa:yannubuntu/boot-repair
    sudo apt-get update
    # 安装boot-repair
    sudo apt-get install -y boot-repair
    sudo boot-repair
    
  4. 应用图形界面的 Boot Repair 工具修改 UEFI 引导。
    sudo boot-repair
    

    启动 Boot Repair

    点击图片查看大图

    Boot Repair 正在应用更改

    点击图片查看大图

    Boot Repair 正在重新安装 GRUB

    点击图片查看大图

    复制报告到粘贴板

    点击图片查看大图

    创建 BootInfo 摘要

    点击图片查看大图

    引导修复成功!

    点击图片查看大图

重启操作系统,这样应该能正常进入 Ubuntu 桌面了!


总结

本文仔细按条地叙述了如何修复 Ubuntu 的 UEFI 启动引导。整篇分为多个具有不同意义和功能的大章节,并且花大量篇幅在 GRUB 命令行界面(这是启动引导失败后默认进入的界面)说明如何在此时临时进入图形用户界面的设置工作。
比如:应用 ls 命令来显示硬盘和分区信息,应用上述命令显示机器中的某个硬盘和分区下的所有文件以区分该分区是否是 EFI 或其他分区,等等。

事无具细地讲清楚,相信读者读得懂。

临时进入系统的图形界面之后,从 PPA 软件源安装 Boot Repair 工具,同时利用以上工具修复系统的 UEFI 引导。

最后,对广大开源社区的维护和开发者致谢!



程序知路

鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。

本文章可以转载,但是需要说明来源出处!

本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com