将映像克隆到新机器时 UEFI 启动失败

Jon*_*set 7 boot uefi

我有十台相同的机器,并且想在所有机器上部署相同的 Ubuntu 12.04 映像。我已经在其中一台机器上完成了完整安装,并使用dd. 问题是,如果我dd用来将此映像写入另一台机器的磁盘,它将不再启动。也就是说,除了我创建 iamge 的那台机器之外,机器在所有机器上都报告“未找到可启动设备”。

我怀疑这可能是由于 UEFI 启动设置方式的某些特定于设备或机器的原因,但我不能肯定地说。据我所知,我没有做任何不寻常的事情。

就其价值而言,在其中一个克隆上运行Boot-Repair确实可以解决问题并让机器启动,但我宁愿不必在我想要将映像克隆到的每台新机器上手动运行它。此外,这似乎将驱动器绑定到该机器上,因此将“固定”驱动器插入到运行引导修复的机器之外的机器中将再次产生“未找到可启动设备”消息。

显然,必须能够以 UEFI 引导条目可以在任何机器上运行的方式构建映像,因为这是 Ubuntu 安装映像所做的,但我不知道它是如何实现的?

如果有帮助,这里是 Boot-Repair 在新机器上修复磁盘时生成的引导信息文件。

Rod*_*ith 10

在 EFI 下,引导加载程序作为文件存储在 EFI 系统分区 (ESP) 中。通常,此类文件具有操作系统独有的名称,例如EFI/ubuntu/grubx64.efiUbuntu。因此,引导加载程序必须在固件的 NVRAM 中注册。Ubuntu的安装程序会在安装操作系统时,这个,但是当你移动磁盘到另一台计算机,它的NVRAM还没有被修改,所以电脑将无法启动。使用引导修复将安装 GRUB 的新副本并将其注册到固件中,从而解决问题。我的猜测是您的固件自己的引导管理器也会进行扫描并注册引导加载程序,但也可能是其他原因正在发生。

一个可能的解决此问题的是从复制GRUBEFI/ubuntu/grubx64.efiEFI/BOOT/bootx64.efi。后者是后备名称——如果计算机找不到任何已注册的引导加载程序,则从该名称引导。可移动媒体也使用相同的文件名,因为很明显,操作系统安装盘不能预先注册,除非它使用一些商定的通用名称。也有可能是 Ubuntu 和/或 Boot Repair 将 GRUB 复制到了这个名字,你的固件由于某种原因最初没有检测到它,并且使用固件的引导管理器导致它注意到这个文件的存在,从而解释了之后的可引导性你用过那个工具。事实上,这似乎比您的固件扫描 Ubuntu 的默认引导加载程序文件名更有可能。


Jon*_*set 5

奇怪的是,当我打开 UEFI 引导管理器(引导期间按 F2)并重置为出厂默认设置时,问题自行解决。

我的猜测是我在某个时候启用了“快速启动”或某些此类功能,这些功能禁用了对“未注册”UEFI 启动分区的搜索。运行grub-update(调用efibootmgr)本质上是使用 UEFI 引导管理器注册 GRUB,因此它不必搜索它,但由于此命令尚未在克隆的机器efibootmgr上运行,因此尚未运行,因此 GRUB 安装获胜不在引导管理器的列表中。