背景/目标:
我的笔记本电脑是双启动的,每台机器(Windows 和 Arch Linux)都有一个 M.2 SSD,一切正常。我为我的 Windows 机器购买了一个新的更大容量的驱动器,但是每个 M.2 插槽的尺寸都不同,所以我移除了 Arch 驱动器并用新驱动器替换它,然后将较小(大小和容量)的 Windows 驱动器克隆到它上面。我单独测试了这个克隆的驱动器,它可以很好地加载 Windows。接下来,我用 Arch 驱动器替换了新的 Windows 驱动器,以便将 Arch 克隆到旧的 Windows 驱动器上。旧的 Windows 驱动器仍然可以正常启动,并且 UEFI/BIOS 识别到旧的 Arch 驱动器已安装,但无法识别其启动/EFI 分区,并且没有提供启动到它的选项。
我尝试过的:
- 将 Arch 驱动器作为计算机中的唯一驱动器,仍然显示没有启动选项
- 启动 Windows 并查看分区,它们看起来完好无损,Windows 表示它们很健康
笔记:
- 此无法启动的 Arch 驱动器与之前位于同一个 M.2 插槽中
- 我有一个 Arch 的实时启动 USB,如果这可以使这个问题更容易解决
- 我使用 GRUB 作为我的 Arch 引导程序
总结: Arch 驱动器已被移除、替换并重新安装在同一插槽中,但其启动分区不再被识别。
答案1
您之前的安装不是被识别为一般分区,而是被识别为特定文件 – 该grub-install
工具创建了一个 NVRAM 条目,指向该分区上 grubx64.efi 的确切路径。删除磁盘可能会导致固件将 NVRAM 条目删除为“过时”。
EFI 启动分区并不总是具有可在 NVRAM 条目缺失时检测到的“默认”启动加载程序。Windows 始终会安装一个,但 GRUB 通常不会。
像最初安装 Arch 时一样从 chroot重新运行
grub-install
,允许它重新创建 NVRAM 启动项。重新运行 grub-install,但使用该
--force-extra-removable
选项另外将默认引导加载程序安装到 EFI 分区。用于
efibootmgr
手动创建 NVRAM 条目。efibootmgr -c -L "Gentoo" -d /dev/sda -p 1 -l '\EFI\Arch\grubx64.efi'
使用 Windows
bcdedit
手动创建 EFI 启动项(而不是 Windows 启动管理器项)。:: Make sure the Arch EFI partition has a drive letter assigned :: (temporarily, for bcdedit only), e.g. Z: in this example. bcdedit /create /d "Linux Boot Manager" /application firmware :: Copy the GUID of the new entry that the /create command gives :: and substitute it in the following commands. bcdedit /set %GUID% device partition=Z: bcdedit /set %GUID% path \EFI\systemd\systemd-bootx64.efi