当我使用预置文件安装 debian 时,我有一个安装为 的实时 USB 记忆棒,并将sda1
ssd 驱动器安装为sdb1
。因此,我将 MBR 安装到sdb1
。但是当移除 USB 记忆棒时,SSD 驱动器变为sda1
。并且/boot/grub/grub.cfg
不再起作用。我添加了一个后期命令以根据文档修复该问题。它很简单,如果我在机器上手动运行它,它可以工作,但在预置时会失败(重新启动后,grub 配置文件仍然有 的路径sdb1
)。
d-i preseed/late_command string \
in-target sed -i 's/root\=\/dev\/sdb1/root\=\/dev\/sda1/g' /boot/grub/grub.cfg; \
in-target update-grub;
那么从 preseed 的角度来看,这里有什么问题?
PS:我也尝试过在目标 shell 中强制生成 grub 配置并运行配置,但也失败了:
d-i preseed/late_command string \
in-target grub-mkconfig -o /boot/grub/grub.cfg ; \
sed -i 's/root\=\/dev\/sdb1/root\=\/dev\/sda1/g' /target/boot/grub/grub.cfg; \
in-target bash -c 'update-grub';
答案1
解决方案实际上是不使用最后的更新 grub,因为它会将配置恢复为安装期间当前正在使用的配置。
所以我的预先设置步骤是:
d-i preseed/late_command string \
in-target sed -i 's#^\(GRUB_CMDLINE_LINUX_DEFAULT="quiet\)"$#\1 root=/dev/sda1"#' /etc/default/grub \
in-target grub-mkconfig -o /boot/grub/grub.cfg ; \
in-target sed -i 's/root\=\/dev\/sdb1/root\=\/dev\/sda1/g' /boot/grub/grub.cfg ;