我发现的最相似的问题: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 我仍然需要测试这一点,因为我目前还有其他紧急事项。