두 디스크 모두에 EFI 파티션을 채우기 위해 Debian RAID 1 사전 시드를 얻는 방법은 무엇입니까?

두 디스크 모두에 EFI 파티션을 채우기 위해 Debian RAID 1 사전 시드를 얻는 방법은 무엇입니까?

내가 찾은 가장 비슷한 질문은 다음과 같습니다.efi에 대한 Ubuntu 소프트웨어 공격, 두 번째 드라이브를 부팅하는 방법은 무엇입니까?

제 상황은 NVMe 드라이브를 소프트웨어 RAID 1로 구성하는 Debian 설치용 사전 설정 파일이 있다는 것입니다. 두 디스크 모두 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

이것은 작동합니다. 그러나 이것이 설치 프로그램의 일부여야 하는 기본 핵심 기능처럼 보이기 때문에 더 좋고/쉬운 방법을 놓쳤을 수도 있습니다.

설치 중에 이를 직접 수행할 수 있는 방법이 있습니까? 예를 들어 제가 놓친 다른 미리 설정 명령이나 partman 옵션을 사용합니까?

사전 설정 관련 부분:

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 지금은 다른 긴급한 문제가 있어서 아직 테스트가 필요합니다.

관련 정보