如何按 ID 设置后备条目或在子菜单中选择条目?当前唯一有效的选项是使用编号条目(即set fallback=0
)。
背景
我的团队远程更新运行 Debian 的设备。这些单元是远程部署的,因此物理或 KVM 访问很少,因此不是可行的解决方案。我们将新的系统映像复制到相同的分区(在本例中为 /dev/sda2)。
root@widget:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 186.3G 0 disk
├─sda1 8:1 1 953M 0 part /boot
├─sda2 8:2 1 23.3G 0 part /
├─sda3 8:3 1 23.3G 0 part /alt
重新安装分区后/alt
,我们要验证映像是否未损坏。为了测试这一点,我们创建一个自定义条目(例如newimg
在 中/etc/grub.d/40_custom
)。以( )开头的 UUIDxxxxxxxx
为挂载的分区,以( )开头的 UUID为挂载的分区。/boot
dev/sda1
yyyyyyyy
/
/dev/sda3
menuentry 'Debian 10 (buster) newimg' --id newimg {
insmod part_msdos
insmod ext2
search --no-floppy --fs-uuid --set=root xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
linux /vmlinuz-4.2 root=UUID=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy ro nomodeset panic=5 quiet
initrd /initrd.img-4.2
}
set fallback='1>2'
接下来我们运行update-grub
并grub-reboot newimg
执行一次重新启动。如果图像损坏,我们需要一个后备图像,这样我们就不会失去对终端的访问。过去,我们会使用第一个 grub 菜单条目作为后备 ( set fallback=0
)。然而,新的/vmlinuz-4.2
将在最新的或条目中使用0
,因此将毫无意义地退回到自身。我一直在使用损坏的图像测试后备vmlinuz-4.2
。根据GRUB 文档,
条目可以通过编号(在层次结构的每个级别从 0 开始)、标题或 id 来标识。
然而,我见过的唯一有效的方法是使用数字(我也无法让子菜单条目工作)。对于所有其他选项,我都会收到此错误消息:Failed to boot both default and fallback entries
。
我尝试过的事情:
- 如果我将后备更改
40_custom
为set fallback='1>2'
(Advanced options for Debian GNU/Linux > Debian GNU/Linux, with Linux 4.1
) ,它会选择条目1
,但它会1>0
代替1>2
.并1>0
选择相同的损坏的 vmlinuz 映像。 - 我还尝试添加另一个使用旧内核 (
defaultimg
) 的自定义启动条目,并set fallback=defaultimg
在验证我可以成功手动启动到defaultimg
. - 我尝试更改前面的两个选项,不
set
带单引号和双引号。
GRUB版本:2.02+dfsg1-20