Nei*_*dge 5 linux redundancy uefi
在不使用硬件 RAID 的情况下使 EFI 系统分区冗余的 BCP 是什么?
如果我在不同设备上创建 3x EFI 系统分区,然后将对主设备(安装在/boot/efi
)所做的任何更改备份到备份设备(安装在/boot/efi-[bc]
):
是否有更好的方法,使系统在主设备出现故障时仍能启动?
我推测可能是因为它很大程度上受到微软人员的影响,他们无法在 Windows 中创建可靠的软件 RAID 阵列,并且他们不知道可以使用简单的超级块从分区中创建阵列,而无需特殊的内部结构(Windows 只能使用转换为“动态”逻辑磁盘管理器或存储空间格式的磁盘构建阵列)。
例如,如果您在 ZFS“软件 RAID”上安装 Proxmox VE,它将创建多个 ESP,并安装特殊的“钩子”,该钩子在内核、引导加载程序和其他与引导相关的内容更新后运行,并且该钩子确保所有 ESP 都已启动。保持同步。
您还可以添加 Grub 挂钩以将其安装在两个 ESP 上,如本答案所述:
创建包含以下内容的文件/etc/grub.d/90_copy_to_boot_efi2
并使其可执行:
#!/bin/sh
set -e
if mountpoint -q /boot/efi && mountpoint -q /boot/efi2 ; then
rsync -t --recursive --delete /boot/efi/ /boot/efi2/
fi
exit 0
Run Code Online (Sandbox Code Playgroud)
然后,每当您或系统运行时,update-grub
它都会运行此脚本。另请注意,当灾难发生时,此脚本有些危险;如果主设备发生/boot/efi
故障并被更换,此脚本将从/boot/efi2 中删除有效内容。因此,在这种情况下,您需要禁用它(删除可执行位),或者在运行 rsync 之前检查挂钩中的源条件。
efibootmgr -c -d /dev/sdb -l \\EFI\\DEBIAN\\GRUBX64.EFI -L debian-sdb
efibootmgr -c -d /dev/sdc -l \\EFI\\DEBIAN\\GRUBX64.EFI -L debian-sdc
efibootmgr -c -d /dev/sdd -l \\EFI\\DEBIAN\\GRUBX64.EFI -L debian-sdd
efibootmgr -c -d /dev/sda -l \\EFI\\DEBIAN\\GRUBX64.EFI -L debian-sda
Run Code Online (Sandbox Code Playgroud)
这是我的托管系统之一的真实示例。它假设 ESP 是每个磁盘的第一个分区。这应该在同步 ESP 的内容后完成。efibootmgr -v
将确认您像这样创建的所有引导条目都使用不同的设备。
另请参阅:https ://askubuntu.com/questions/66637/can-the-efi-system-partition-be-raided