vic*_*vic 22 linux software-raid grub2 xfs
在我的设置中,我有两个磁盘,每个磁盘都按以下方式格式化:
(GPT)
1) 1MB BIOS_BOOT
2) 300MB LINUX_RAID
3) * LINUX_RAID
Run Code Online (Sandbox Code Playgroud)
引导分区映射在 /dev/md0 中,rootfs 映射在 /dev/md1 中。md0 用 ext2 格式化,md1 用 XFS 格式化。(我知道必须在 md 设备上而不是在 sd 上进行格式化 - 请告诉我这是否有误)。
如何正确设置 GRUB,以便在一个驱动器出现故障时,另一个仍能启动?并且通过扩展,替换驱动器也将自动包含 GRUB?当然,如果这甚至可能的话。
Gil*_*il' 16
如果两个磁盘是/dev/sda
and /dev/sdb
,则同时运行grub-install /dev/sda
and grub-install /dev/sdb
。然后两个驱动器将能够单独启动。
确保您的 Grub 配置不会对磁盘进行硬编码(hd0)
,而是搜索引导和根文件系统的 UUID。
我不知道 Grub 支持将两个磁盘声明为 RAID-1 阵列,以便grub-install
自动写入两个磁盘。这意味着grub-install
如果您更换一张磁盘,您将需要再次运行;除了向 RAID 阵列添加新成员之外,还有一件事要做。
其他答案(建议使用grub-install /dev/sda
和grub-install /dev/sdb
)在使用 Legacy BIOS 启动时有效,但在使用 UEFI 时无效。1
(要检查是否使用 UEFI 启动,请检查是否/sys/firmware/efi
存在。)
如果您使用 UEFI,则 ESP(EFI 系统分区)不能成为软件 RAID 的一部分,因为它将在软件 RAID 初始化之前用于启动。
您需要在两个磁盘上拥有相同的内容,但它们将是两个独立的 (FAT32) 分区,而不是 RAID 的一部分。
假设您的第一个 ESP 是/dev/sda1
(包含目录的 FAT32 分区EFI
),您的第二个磁盘(例如/dev/sdb
)将需要在同一位置有一个分区和内容以实现冗余。
通常,默认情况下,/dev/sda1
将安装在 上/boot/efi
,而另一个不会安装(或者甚至可能存在,如果您刚刚设置了 RAID)。确保您有一个与 FAT32 分区/dev/sdb1
匹配的分区/dev/sda1
,并将内容复制到其中。
UEFI 上的 Debian Wiki 条目建议安装第二个/boot/efi2
并使用update-grub
钩子自动复制。
您需要创建第二个安装点 ( mkdir /boot/efi2
) 并相应地添加第二个 ESP /etc/fstab
(Debian Wiki 上的一个很好的建议是添加nofail
)。例如:
# You can find the partitions UUIDs using blkid
UUID=7F49-3985 /boot/efi vfat umask=0077,errors=remount-ro,nofail 0 0
UUID=8D57-95E5 /boot/efi2 vfat umask=0077,errors=remount-ro,nofail 0 0
Run Code Online (Sandbox Code Playgroud)
然后添加一个钩子/etc/grub.d/90_copy_to_boot_efi2
(并使其可执行)。这将在您下次跑步时运行update-grub
。这是 Debian Wiki 脚本的稍微修改版本:
# You can find the partitions UUIDs using blkid
UUID=7F49-3985 /boot/efi vfat umask=0077,errors=remount-ro,nofail 0 0
UUID=8D57-95E5 /boot/efi2 vfat umask=0077,errors=remount-ro,nofail 0 0
Run Code Online (Sandbox Code Playgroud)
注意(如果sda
失败):假设sda
失败并且您需要更换磁盘,请记住删除该钩子,并将 的内容复制/boot/efi2
到新的中/boot/efi
。/boot/efi
否则,您可能会遇到(在新磁盘上)为空的情况,并且您的工作 /boot/efi2
将被擦除(rsync --recursive --delete
可能是不可原谅的)。
1:这似乎没有被广泛记录(仅在Arch Linux wiki上找到参考),但是当您使用 EFI Grub 安装时,INSTALL_DEVICE
参数(例如/dev/sda
)将被忽略。事实上,grub-install /dev/non_existent_device
甚至不会失败:
# grub-install /dev/non_existent_device
Installing for x86_64-efi platform.
Installation finished. No error reported.
Run Code Online (Sandbox Code Playgroud)