我通过 do-release-upgrade 将 2 台几乎相同的服务器从 14.04.2 升级到 16.04.3。一台运行正常,但另一台仍然从旧内核启动。我尝试了类似情况下提到的所有建议,再次进行内核升级,更新 grub 等,但都没有成功。在问题服务器上,我注意到 /boot 中有另一个启动目录,其中包含另一个 grub.cfg 和旧内核,并且 grub 来自那里。有人见过这种情况吗?/etc/default/grub 指向正常的 /boot/grub/grub.cfg,它是新内核,但不知何故没有被拾取。
谢谢
答案1
几天前我终于弄清楚了这个问题,并认为在这里发布可能有用,以防其他人遇到类似的情况。我会尽可能地总结,因为我在解决这个问题的过程中经历了很多次反复。
据我了解,机器从旧内核启动的原因是之前配置的 /boot 磁盘不再挂载(但我意识到引导加载程序实际上不需要挂载磁盘)。过去某个时候,管理员曾尝试在不同的磁盘上设置新的 /boot,并将其添加到 fstab 并删除旧的 /boot,但我猜事情没有正确完成,因此问题浮出水面。所有 apt-get update/upgrades 都正确地尝试修改新的 /boot 并创建/安装新内核等。但这在系统启动时并不重要,因为它仍然从旧的 /boot 启动。我手动挂载了旧的 /boot 并验证它确实具有系统正在使用的所有启动、grub 配置。
fdisk 命令在旧的 /boot (/dev/sda1) 上显示“*”,因此我首先关闭了启动标志,并在新的 /boot (/dev/sdb1) 上启用了它,但这没有帮助。然后,当我运行“grub-install /dev/sdb”(注意是整个磁盘,而不是 sdb1)时,一切都奇迹般地正常工作了。由于它是虚拟机,我可以进行一次更改并测试,然后恢复到快照并重新开始。