ubiquity 安装程序无法将 grub 安装到正确路径

ubiquity 安装程序无法将 grub 安装到正确路径

我是否遗漏了什么,或者为什么 grub 总是不能安装在通过手动分区 + 预置所指向的位置?

我为 xubuntu 20.04.2 桌面使用了一个预置文件,该文件没有分区指令。当启动“automatic-ubiquity”时,在手动分区 sda 后,选择 /dev/sda1 会被忽略,并且 grub 会安装到 /dev/sda 中。

添加d-i grub-installer/only_debian boolean false和/或d-i grub-installer/with_other_os boolean false预先植入。手动分区 sda 后,选择 /dev/sda1 将被忽略,并且 grub 将安装到 /dev/sda 中。

我找到了一种动态设置的方法d-i grub-installer/bootdev string default,但这需要先启动到实时环境,对磁盘进行分区并设置活动分区,然后启动“ubiquity -automatic”或使用“automatic-ubiquity”重新启动。

d-i grub-installer/only_debian boolean false
d-i grub-installer/with_other_os boolean false
d-i grub-installer/bootdev string default
d-i partman/early_command string                                               \
 BOOTFLAG=$(lsblk -rpo PARTFLAGS,PKNAME,PATH | grep "0x80" | cut -f 3 -d ' '); \
 if [ $BOOTFLAG ]; then debconf-set grub-installer/bootdev $BOOTFLAG; fi;

测试这个功能可以在具有单个磁盘的虚拟机上工作,但是可能无法在具有多个磁盘或从 USB 安装的硬件上按预期工作。

d-i grub-installer/skip boolean true似乎总是被忽略。我再次找到了一种方法来使其工作,我将d-i grub-installer/bootdev string其设置为空。但是在 ubiquity/success_command 中手动安装 grub 不起作用。检查 /dev/sda1 的前几个扇区,全部为 00。另一个命令成功完成。

d-i grub-installer/only_debian boolean false
d-i grub-installer/with_other_os boolean false
d-i grub-installer/bootdev string 
ubiquity ubiquity/success_command string                                       \
 in-target grub-install -‑force /dev/sda1;                                     \
 echo "tmpfs /tmp tmpfs nosuid,nodev 0 0" >> /target/etc/fstab;

答案1

最终我放弃了这种partman/early_command方法。目前我将其设置grub-installer/bootdev为空,然后使用ubiquity/success_command强制安装 grub 到/target分区并将其标记为活动。

有点丑,但它有效。仅针对 sata/nvme/mbr 分区表进行了测试,并使用 ext2/3/4 分离 boot/home/root 分区。

d-i grub-installer/only_debian boolean false
d-i grub-installer/with_other_os boolean false
d-i grub-installer/bootdev string 
ubiquity ubiquity/success_command string                                   \
 echo 'tmpfs /tmp tmpfs nosuid,nodev 0 0' >> /target/etc/fstab            ;\
 worker() { grub-install --force --root-directory=/target $2             &&\
 parted -s $3 -- set ${4##*-} boot on; }                                  ;\
 worker $(lsblk -lpo MOUNTPOINT,KNAME,PKNAME,PARTUUID | grep '/target ');

最终,我认为 Ubiquity 需要更新以反映 GUI 中的选择。

相关内容