我从中创建了一个 VMDK 虚拟磁盘Snappy Ubuntu Core 15.04图片来自这里:http://cdimage.ubuntu.com/ubuntu-snappy/vivid/stable/latest/,使用它在 VMware Workstation Pro 14 中启动新创建的 VM。
我本想用这个旧版本来模拟我们已有的一些旧设备。它启动正常。
但是,如果我做一个sudo update-grub
(见图1),下次启动时,它会因为以下原因而出现内核恐慌:VFS:无法打开根设备,“LABEL=system-a”或未知块(0,0):错误 -6(见图)2)。
快速研究表明,即使我根本没有修改,它也/boot/grub/grub.cfg
已经发生了变化。图片update-grub
/etc/default/grub
3显示原始图片(包含菜单项的部分,其中$label
是“system-a”);图片4显示新的。
更新 1 (6/28)
尝试过update-initramfs
,但失败了。之后仍然出现内核崩溃update-grub
。
此外,它会抱怨“没有这样的文件或目录” /boot/config-3.19.0-47-generic
,不确定是否相关(如果我为该命令打开详细模式,仍然会有很多输出)。
更新 2(6/28)
我在 中设置GRUB_HIDDEN_TIMEOUT=10
并注释掉。现在我能够看到隐藏的超时并显示 grub 菜单。GRUB_HIDDEN_TIMEOUT_QUIET=true
/etc/default/grub
Esc
“system-a”和“system-b”都不起作用。“Ubuntu”第一次起作用;但下次重启时隐藏的超时不再存在,并且在“LABEL=system-a”上再次出现内核恐慌。
看来在新的中grub.cfg
,“Ubuntu”使用“root=UUID=...”,而“system-a”使用“root=LAEBL=system-a”。
注意,在我运行之前update-grub
,grub菜单中只有一个“system-a”选项。
答案1
在查看了过去和的帖子后grub.cfg
,发现在运行时update-grub
,有一个/etc/grub.d/09-snappy
名为get_kernels(...)
的函数列出了所有已安装的内核/boot
并选择最新的内核来创建启动菜单项。
原始代码grub.cfg
使用/vmlinuz
和,分别/initrd.img
指向/boot/vmlinuz-3.19.0-47-generic
和/boot/initrd.img-3.19.0-47-generic
。然而,运行 之后update-grub
,它选择了/boot/vmlinuz-3.19.0-47-generic.efi.signed
,而 并没有对应的initrd.img
。然后09-snappy
脚本完全忽略未找到此文件且未initrd
在生成的文件中添加命令grub.cfg
,则菜单项无法启动。
手动删除后/boot/vmlinuz-3.19.0-47-generic.efi.signed
,update-grub
不再造成启动问题。
总结
已签名的内核映像/boot/vmlinuz-3.19.0-47-generic.efi.signed
没有对应的initrd.img
。请删除它。
新问题:一次成功启动后,生成grub.cfg
的update-grub
将被原始替换。不确定为什么会发生这种情况,但这似乎是另一个问题,因此这里不讨论它。