UEFI 未看到可启动驱动器

UEFI 未看到可启动驱动器

最近将我的服务器从 Ubuntu 14.04 升级到 18.04。在经历了通常的 UEFI 导致 grub 安装错误之后,我终于安装了操作系统。但是 UEFI 不会将安装了操作系统的驱动器视为启动选项。如果我手动选择驱动器,它就会正常启动。考虑到它之前可以正常工作,我假设驱动器本身的某些配置不正确。

信息

尽管 UEFI 是该系统上的一个选项,但操作系统似乎看不到它:

# efibootmgr
EFI variables are not supported on this system.

操作系统安装在 /dev/sdg

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            7.8G     0  7.8G   0% /dev
tmpfs           1.6G  1.5M  1.6G   1% /run
/dev/sdg4        45G  9.3G   34G  22% /
tmpfs           7.8G  8.0K  7.8G   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/sdg2        33G   58M   31G   1% /home
/dev/sdg3        33G  2.4G   29G   8% /srv
/dev/loop0       91M   91M     0 100% /snap/core/6350
/dev/loop1       98M   98M     0 100% /snap/docker/384
/dev/loop2       90M   90M     0 100% /snap/core/7917
/dev/md127       26T   15T   11T  59% /mnt/storage
tmpfs           1.6G     0  1.6G   0% /run/user/1000

我切换到 MBR,认为它可能与 GPT 有问题。

# fdisk /dev/sdg

Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/sdg: 111.8 GiB, 120034123776 bytes, 234441648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device     Boot     Start       End  Sectors  Size Id Type
/dev/sdg1            2048      4095     2048    1M ef EFI (FAT-12/16/32)
/dev/sdg2            4096  69210111 69206016   33G 83 Linux
/dev/sdg3        69210112 138416127 69206016   33G 83 Linux
/dev/sdg4  *    138416128 234438655 96022528 45.8G 83 Linux

我不能 100% 确定第一个分区的类型是否正确,但当我手动选择驱动器时,一切都能正常启动。您觉得如何?


借助 grawity,可以进行更多调试。lsblk 和 blkid 似乎不知道第一个分区是什么。但是,gparted 将其显示为:

grub2 核心镜像

您认为那应该是 /boot 吗?

答案1

如果我手动选择潜水,它就能正常启动

在 UEFI 启动菜单中,全磁盘条目几乎总是代表“传统模式”或 BIOS 样式的启动。您不是从 EFI 系统分区启动;而是从 MBR 启动代码启动。

这就是为什么操作系统无法访问 EFI 变量的原因——当操作系统以传统/BIOS/CSM 模式启动时,无法调用 EFI 运行时服务。

我不能 100% 确定第一个分区的类型是否正确

分区表条目是正确的(EF对于 MBR 表,尽管你也可以使用 GPT – 毕竟,GPT最初是 EFI 的东西)。

但是,分区内容不清楚:您的df输出没有显示它已安装在任何地方,因此不知道它是否使用正确的文件系统进行格式化,也不知道它里面是否有正确的文件。

为 UEFI 安装 GRUB

lsblk -f通过运行或确保 EFI 分区实际上已格式化为 FAT32 sudo blkid -c /dev/null。(忽略 fdisk 显示的内容。)

将其挂载到/boot/efi,然后安装 EFI 版本的 GRUB:

grub-install --target=x86_64-efi --removable --efi-directory=/boot/efi

由于您目前无法访问 EFI 启动变量,因此该--removable模式将改为在“后备”位置 (EFI/Boot/Bootx64.efi) 设置 GRUB。这应该允许磁盘显示为UEFI 模式固件启动菜单中的条目。

重启后,根据主板的不同,您可能会看到两个条目,例如:

Disk 0: Samsung 1234567
UEFI: Disk 0: Samsung 1234567

这里第一个条目用于 BIOS 启动,第二个条目用于使用“fallback”Bootx64.efi 加载程序的 UEFI 启动。如果出现第二个条目,请选择它。

如果有疑问,请仔细研究 UEFI 设置并禁用所有“CSM”或“传统启动”选项,或将启动模式设置为“仅 UEFI”(选项名称有所不同)。

一旦您能够使用访问 EFI 变量efibootmgr,请重新安装 GRUB没有选项--removable,以便设置正确的启动项。

更新

但是,gparted 将其显示为“grub2 core.img”

您认为那应该是 /boot 吗?

不。这看起来非常像将 GRUB 的 BIOS 版本安装到 GPT 分区时使用的“BIOS 启动分区”。在 GPT 磁盘上,它的分区类型与“EFI 系统分区”不同,而在 MBR 磁盘上,它根本不使用。

(不,“BIOS 启动分区”不是 /boot;它根本没有文件系统,只有 GRUB 启动代码的原始块,引导它进入实际的启动 /boot。

另外,再次查看您之前的fdisk输出,它的大小只有 1 MB - 适合 GRUB 的“BIOS 启动分区”,但对于“EFI 系统分区”来说太小了(应该在 100-500 MB 范围内)。

简而言之,您的分区布局仅适用于 BIOS 模式安装,不适用于 UEFI 模式,仅设置新分区类型无法解决这个问题。您最初提到的“UEFI 看不到操作系统”完全正常,因为曾是磁盘上没有兼容 UEFI 的操作系统。(由于是 Ubuntu,我猜你遇到这个问题是因为当时的 Ubuntu 14.04 安装程序还不支持 UEFI 安装。)

您可以保持系统原样,因为它在 BIOS 模式下正常启动。但如果您确实想将其转换为 UEFI 模式,则需要:

  1. 将当前分区 1 的类型更改为其他类型。(GRUB 的 BIOS 启动分区没有 MBR 分区类型 ID,因此随便选一个 - 或者直接删除该分区,因为 GRUB 无论如何都不使用它。)
  2. 创建一个新的~200 MB 分区作为 EFI 系统分区。(它可以位于磁盘上的任何位置,因此只需通过 GParted 缩小现有分区即可腾出空间。)
  3. 确保新的EFI 系统分区具有正确的类型 ID。将其格式化为 FAT32,配置 fstab 以将其挂载在 /boot/efi 上。
  4. 按照之前发布的“安装 GRUB”说明进行操作。

答案2

终于有时间回过头来解决这个问题了。当然,最初的问题并没有得到解决,我没有修复遗留的启动问题,而是倾向于通过 EFI 来解决问题。我尝试了下面给出的方法,并将其与其他问题进行了交叉引用。我发现其他一些资源很有帮助:

最后卡在了“错误:没有这样的设备” grub 错误上。这可能是由于我在 MBR 和 GPT 之间来回切换时 fstab 文件没有更新。但我能够使用 Boot-Repair 让一切正常运行(并在将文件系统挂载为只读时修复 fstab 文件):

https://help.ubuntu.com/community/Boot-Repair

看来 UEFI/grub 不会随着时间的推移而变得更好。我的结论是:

  1. 在计算机上安装操作系统之前,务必禁用安全启动。
  2. 安装操作系统之前,请禁用 BIOS 中的向后兼容性。
  3. 所有优秀的 Grub 文档似乎都包含相同的“只需运行此命令”建议。您不太可能了解实际错误所在。这引出了我们的问题...
  4. 当安装程序失败时(因为它总是失败)请首先使用启动修复工具。

相关内容