如何让 Debian RAID 1 预先填充两个磁盘上的 EFI 分区?

如何让 Debian RAID 1 预先填充两个磁盘上的 EFI 分区?

我发现的最相似的问题:Ubuntu 软件突袭 efi,如何从第二个驱动器启动?

我的情况是,我有一个用于 Debian 安装的预置文件,它将配置我的 NVMe 驱动器为软件 RAID 1。两个磁盘甚至都会获得一个 efi 分区(/dev/nvme0n1p1 和 /dev/nvme1n1p1)。但是,第二个磁盘的分区不会被填充,因此如果第一个磁盘发生故障,它实际上无法启动。

RAID 1 的作用是应对磁盘故障的情况。如果我无法从第二个磁盘启动,那么它对我来说就没什么用了。

我已经找到了一种解决方法,可以在安装完成脚本中运行:

if [ -d /sys/firmware/efi ] && [ -d /boot/efi/EFI ] && [ -e /dev/nvme1n1p1 ]; then
    mkdir /mnt/efi-disk2
    mount /dev/nvme1n1p1 /mnt/efi-disk2 && cp -narv /boot/efi/EFI /mnt/efi-disk2/
    umount /mnt/efi-disk2
    rmdir /mnt/efi-disk2
fi

这有效;但是,可能我错过了更好/更简单的方法,因为这看起来像是应该作为安装程序一部分的基本核心功能。

有没有办法直接在安装过程中实现这一点,例如使用我错过的另一个 preseed 命令或 partman 选项?

preseed 的相关部分:

d-i mdadm/boot_degraded boolean false

d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-md/confirm boolean true
d-i partman-md/confirm_nooverwrite  boolean true

d-i partman-lvm/device_remove_lvm boolean true
d-i partman-lvm/confirm boolean true

d-i partman-auto/disk string /dev/nvme0n1 /dev/nvme1n1
d-i partman-auto/method string raid
d-i partman-auto/choose_recipe select myrecipe

d-i partman-auto-lvm/guided_size string 100%
d-i partman-auto-lvm/new_vg_name string vg00

d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true

d-i partman/choose_partition select Finish partitioning and write changes to disk

d-i partman-partitioning/confirm_write_new_label boolean true

d-i partman-basicfilesystems/choose_label string gpt
d-i partman-basicfilesystems/default_label string gpt
d-i partman-partitioning/choose_label string gpt
d-i partman-partitioning/default_label string gpt
d-i partman/choose_label string gpt
d-i partman/default_label string gpt

d-i partman-auto/expert_recipe string \
myrecipe :: \
    1024 1 1024 free \
            $iflabel{ gpt } \
            method{ efi } \
            format{ } \
        . \
    1024 0 -1 raid \
            $lvmignore{ } \
            $primary{ } \
            method{ raid } \
            format{ } \
        . \
    20480 0 20480 ext4 \
            $defaultignore{ } \
            $lvmok{ } \
            lv_name{ lv_root } \
            method{ format } \
            format{ } \
            use_filesystem{ } \
            filesystem{ ext4 } \
            mountpoint{ / } \
        . \
    20480 0 20480 ext4 \
            $defaultignore{ } \
            $lvmok{ } \
            lv_name{ lv_var } \
            method{ format } \
            format{ } \
            use_filesystem{ } \
            filesystem{ ext4 } \
            mountpoint{ /var } \
        . \
    1024 0 1024 swap \
            $defaultignore{ } \
            $lvmok{ } \
            lv_name{ lv_swap } \
            method{ swap } \
            format{ } \
        . \
    1024 0 1024 ext4 \
            $defaultignore{ } \
            $lvmok{ } \
            lv_name{ lv_tmp } \
            method{ format } \
            format{ } \
            use_filesystem{ } \
            filesystem{ ext4 } \
            mountpoint{ /tmp } \
        .

d-i partman-auto-raid/recipe string \
    1 2 0 lvm - /dev/nvme0n1p2#/dev/nvme1n1p2 \
        .

d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
d-i finish-install/reboot_in_progress note

答案1

首先,我要感谢你的 Preseed。这救了我一命!要找到 Raid + LVM 的有效示例真的很难。

所以回答你的问题:EFI 标准不包括 raid。你复制这些东西到第二个 EFI 分区的方式是我所知道的并且也是使用的唯一方式。

但是您可以使用 grub 中的脚本来自动执行此操作,因此,每当 grub 最后更新时,您都可以将其复制过去。例如:/etc/grub.d/99_copy_efi 我仍然需要测试这一点,因为我目前还有其他紧急事项。

相关内容