设置:
- 多台配备热插拔单个 SSD 的离线计算机(单个 SSD 包含操作系统和数据)
- 以 UEFI 模式安装 Ubuntu 20.04.1(单一操作系统,整个磁盘)
问题:在迁移到 Ubuntu 20.04 LTS 后,经常发生这样的情况:在完全关闭 PC 后,取出 SSD(包含操作系统)并将其移动到另一台(完全相同的硬件)PC 上,我遇到了 grub 救援问题。这种情况在 16.04 LTS(非 UEFI)中没有发生,我可以正常更换 SSD。
症状:
- 移动 SSD 后(100%确定正确关闭),我在原始 PC 和新 PC 中都遇到了 grub 窗口(处于救援模式)(即操作系统已损坏)
- 即使在手动模式下设置 grub(set root=(hd0,gpt2); linux /boot/vm...)并调用“boot”,也会将我带入一个命令行环境,行首带有(initramfs),它建议在根分区上运行 fsck,因为校验和是错误的!
- fsck 几乎使所有扇区无效,并且该分区变得无法使用。
建议:
- 我唯一能想到的(虽然不一定正确)是在 Ubuntu 20.04 中使用 LZ4 作为 initramfs。或者可能是 UEFI 模式下的 grub 问题。由于大多数人通常不会在不同的 PC 之间移动他们的操作系统磁盘,所以这可能是一个罕见的问题。
笔记:
- 我没有对这些磁盘做任何奇怪的事情。因为我的所有 Windows 设置(以及之前的 Ubuntu 16.04 LTS 设置)在这些替换过程中都运行正常。
答案1
外部驱动器启动应从外部驱动器上的 ESP - efi 系统分区作为驱动器入口启动。Ubuntu 的 Ubiquity 安装程序也在内部驱动器的 ESP 上为外部驱动器创建标准启动入口“ubuntu”,然后如果外部驱动器丢失,则无法启动默认入口。
如果驱动器被移除,UEFI 会忘记特定的内部 UEFI 启动项或将其重置。查看移除驱动器之前和之后的 ubuntu 条目。
sudo efibootmgr -v
UEFI 具有使用 /EFI/Boot/bootx64.efi 的后备或硬盘驱动器条目,这应该允许您启动。通常,bootx64.efi 只是 /EFI/ubuntu/shimx64.efi 的副本。一些 UEFI 似乎会自动找到 Windows 条目并重新创建它,但其他系统则不会。外部驱动器都从与内部驱动器上的后备相同类型的条目启动(与您用于 Ubuntu 或 Windows 闪存驱动器安装程序的条目相同)。
如果您在 BIOS 模式下启动,只需在 UEFI/BIOS 中选择驱动器即可启动。您应该能够对 UEFI 执行相同操作,但选择驱动器,而不是现在不正确的“ubuntu”条目。
UEFI 模式下的驱动器启动将使用 /EFI/Boot/bootx64.efi 处的后备启动项。Windows 将 bootx64.efi 设为 Windows .efi 启动文件的副本,Ubuntu 安装将使其成为 shimx64.efi 的副本。因此您应该能够直接启动驱动器。
您需要将内部驱动器的 ESP 条目设为默认启动。然后必须从 UEFI 中手动选择每个外部驱动器的条目。
您还可以在 grub 中执行配置文件类型条目,以将其他驱动器的 ESP 作为启动条目。或特定的启动条目。