我是否遗漏了什么,或者为什么 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 中的选择。