我正在尝试使用 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
对话框仍然显示正确的磁盘,如下所示,因此我需要确认并继续。我可以自动预置这个吗?
答案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 时总是会出现该对话框。
答案4
我找到了另一个(不太丑陋的)解决方法,即将这一行添加到预置中:
d-i grub-installer/bootdev string /dev/sda
然后使用 debconf-set 覆盖该配置,如您的问题中所述。 grub 安装程序会遵循您在 debconf-set 中设置的任何内容。
我不确定为什么这样做有效,但似乎在预置中包含该行,即使您稍后覆盖它,也意味着问题已被看到,因此您不需要:
db_fset grub-installer/bootdev seen true