将 grub 引导加载程序动态安装到多个磁盘

将 grub 引导加载程序动态安装到多个磁盘

我正在尝试使用 Early_command 在两个磁盘上动态预置 grub 安装。我正在使用 IPXE。这是相关部分:

d-i partman/early_command string \
DISKA=$(realpath /dev/disk/by-id/ata-SuperMicro_SSD_* /dev/disk/by-id/ata-SATA_SSD_*|grep -o '/dev/sd[a-z]'|uniq|sort|head -n1); \
DISKB=$(realpath /dev/disk/by-id/ata-SuperMicro_SSD_* /dev/disk/by-id/ata-SATA_SSD_*|grep -o '/dev/sd[a-z]'|uniq|sort|head -n2|tail -1); \
if [ "${DISKA}" == "" ]; then DISKA="/dev/sda"; fi; \
if [ "${DISKB}" == "" ]; then DISKB="/dev/sdb"; fi; \
debconf-set partman-auto/disk "$DISKA $DISKB"; \
debconf-set partman-auto-raid/recipe "1 2 0 ext4 / ${DISKA}2#${DISKB}2 . 1 2 0 lvm - ${DISKA}4#${DISKB}4 ."; \
debconf-set grub-installer/bootdev "$DISKA $DISKB";

我尝试了上面的方法,并使用以下方法的多种变体(真,假),也没有使用它们:

d-i grub-installer/only_debian boolean false
d-i grub-installer/with_other_os boolean false

我什至在 Early_command 中尝试过:

debconf-set grub-installer/only_debian false; \
debconf-set grub-installer/with_other_os false;

不幸的是,Install the GRUB boot loader on a hard disk对话框仍然显示正确的磁盘,如下所示,因此我需要确认并继续。我可以自动预置这个吗?

将 GRUB 安装到磁盘

答案1

知道了。我必须从行中删除双引号:

debconf-set partman-auto/disk "$DISKA $DISKB"; \
debconf-set grub-installer/bootdev "$DISKA $DISKB";

成为:

debconf-set partman-auto/disk "$DISKA $DISKB"; \
debconf-set grub-installer/bootdev $DISKA $DISKB;

编辑

/dev/sda重新启动后,我发现 grub 仅通过以下命令安装dd bs=512 count=1 if=/dev/sda 2>/dev/null | strings,该命令返回:

ZRr=
`|f 
\|f1
GRUB 
Geom
Hard Disk
Read
 Error

运行相同的命令/dev/sdb不会返回任何内容,这意味着磁盘的前 512B 是空的,因此我必须手动安装 grub,如下/dev/sdb所示:

# grub-install /dev/sdb
# dd bs=512 count=1 if=/dev/sdb 2>/dev/null | strings
ZRr=
`|f 
\|f1
GRUB 
Geom
Hard Disk
Read
 Error

我仍然找不到将 grub 安装到两个磁盘的方法early_command

谢谢

答案2

看来现在唯一的解决方法是将以下两行添加到early_command

. /usr/share/debconf/confmodule;\
db_fset grub-installer/bootdev seen true

所以它变成:

.....
debconf-set grub-installer/bootdev "$DISKA $DISKB";\
. /usr/share/debconf/confmodule;\
db_fset grub-installer/bootdev seen true

我希望这个问题能尽快得到解决。

答案3

这个错误已经在 2013 年报告过。似乎在使用 LVM 和/或 RAID 时总是会出现该对话框。

https://wiki.debian.org/DebianInstaller/Bugs/GrubInstaller

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=712907

答案4

我找到了另一个(不太丑陋的)解决方法,即将这一行添加到预置中:

d-i grub-installer/bootdev string /dev/sda

然后使用 debconf-set 覆盖该配置,如您的问题中所述。 grub 安装程序会遵循您在 debconf-set 中设置的任何内容。

我不确定为什么这样做有效,但似乎在预置中包含该行,即使您稍后覆盖它,也意味着问题已被看到,因此您不需要:

db_fset grub-installer/bootdev seen true

相关内容