虽然我已经弄清楚了如何一次性执行此操作,问题又出现了。所以问题仍然存在 - 为什么每当我从 AAEON EMB-BT1 itx 板上的 SATA 端口拔下 SSD 时,它会拒绝启动并给出此错误?我的操作系统是 Debian Linux,每次更换 SSD 时都无法重新安装 grub-efi。
这些是我的分区,EFI 系统从 2048 而不是 0 开始可能与此有关吗?但这就是 Debian 分区管理器配置它的方式。
显然,Boot0001* 选项不起作用,当我从主板上拔下 SSD 时,Boot0000* debian 条目会被擦除。我只是不明白为什么或如何。
编辑:当我启动时,还有一个 ACPI 总线错误
答案1
显然,您的系统固件会自动删除任何引用不再可访问的磁盘的 UEFI NVRAM 引导条目。这有助于避免 UEFI NVRAM 变满的可能性,但如果您经常交换启动磁盘,这可能会很痛苦。不幸的是,您可能无法更改此固件行为。
相反,您可以将 UEFI GRUB 引导加载程序的第二个副本安装到可移动媒体/后备路径在 EFI 系统分区上。这应该有助于固件自动检测磁盘为可引导磁盘。
您可以通过以下方式执行此操作:
sudo grub-install --force-extra-removable /dev/sda
这将在 处生成引导加载程序的第二个副本/boot/efi/EFI/BOOT/BOOTx64.efi
,这是固件在可移动媒体(在 x64 硬件架构上)上引导时或在已安装操作系统的适用 UEFI NVRAM 引导条目丢失时查找的路径。
如果您对所有系统 SSD 都执行此操作,则应尽量减少更换 SSD 所需的工作量。Windows 10 和 11 默认会自动将其 UEFI 启动管理器的副本设置到此路径,因此如果您的某个启动 SSD 包含 Windows,则您无需为其执行任何特殊操作。
事实上,您的 EFI 系统分区从块 #2048 开始是正常的 - 与大小仅为 64 字节的旧 MBR 分区表不同,GPT 分区表将占用至少 33 512 字节扇区,现代标准是设置出于数据对齐原因,将分区限制提高到 1 MiB 的精确倍数 - 这可以避免 SSD 和一些内部使用更大磁盘块的 SAN 的性能下降。
答案2
拔出正在使用的磁盘设备很可能会损坏磁盘上的数据。为了获得最佳效果,请在拔下插头之前卸载磁盘。
此外,SATA 仅部分支持热拔插设备。如果设备位于带有物理导轨的热插拔插槽中,则可能是安全的。但如果它只是连接了一根电缆而没有任何导向,那么每次在通电时拔出或插入驱动器时,都有可能损坏驱动器电子设备。
此外,如果您在 BIOS 初始化后插入驱动器,它可能不会检测到该驱动器可启动,并且不会将其包含在启动列表中;重新启动或重新启动电源可能会解决此问题。另外,如果您使用的是 EFI 模式,则在安装引导加载程序时,会在 BIOS EFI 引导列表中添加一个条目,并且如果 BIOS 初始化时驱动器不在线,则可能会删除与该驱动器关联的引导条目。
如果驱动器未启动,则可能有以下选项可用:
- 某些 BIOS 允许手动添加 EFI 条目
- 某些 BIOS 允许您通过生成的引导菜单为不在列表中的驱动器手动选择检测到的 efi 条目
- 从操作系统中,efibootmgr 工具可以向 BIOS 添加条目
- 像 rEFInd 这样的工具可以扫描所有磁盘以查找可启动的 EFI 可执行文件