在 AWS 服务器上升级 Ubuntu 时出现“/boot/grub/menu.lst 有新版本可用”

在 AWS 服务器上升级 Ubuntu 时出现“/boot/grub/menu.lst 有新版本可用”

我刚刚尝试sudo do_release_upgrade在 AWS EC2 Ubuntu 13.10 服务器上升级到 14.04。一切顺利,直到我收到以下消息:

A new version of /boot/grub/menu.lst is available, but the version installed 
currently has been locally modified.

  What would you like to do about menu.lst?       

   * install the package maintainer's version
   * keep the local version currently installed
   * show the differences between the versions
   * show a side-by-side difference between the versions
   * show a 3-way difference between available versions
   * do a 3-way merge between available versions (experimental)
   * start a new shell to examine the situation

  <Ok>

当然没有修改过 menu.lst,所以我假设本地修改是亚马逊做的。我将点击“保留当前安装的本地版本”选项并希望一切顺利。

但是为什么我会收到此消息,这是处理它的正确方法吗?

答案1

此问题可能由一系列不同的问题引起,因此没有单一的解决方案。这些步骤应该适用于 EC2。

来源:

此问题是由本地和远程更改冲突引起的蛴螬旧版配置。Grub Legacy 和 Grub2 使用不同的配置位置:

  • Grub 遗产:/boot/grub/menu.lst
  • 格鲁布2:/boot/grub/grub.cfg

原因:

您可能正在使用 Amazon EBS 支持的 AMI。实例从预构建的基础映像(快照)构建其根文件系统。grub 配置写入快照中,但 UCF 注册表未正确清除。这意味着您有一个认为配置menu.lst已在本地修改的快照。更多信息可在此处找到:https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1485685

这里解释了为什么 ubuntu 使用 UCF 来管理 grub:https://askubuntu.com/a/147079

解决方案:

一个可行的通用解决方案是删除 menu.list 并重新配置它。这可确保 ucf 注册表项和配置文件解析为相同的哈希值。

#Remove the menu.lst config.

sudo rm /boot/grub/menu.lst
# Generate a new configuration file. 
sudo update-grub-legacy-ec2 -y

#Upgrade the configuration
sudo apt-get dist-upgrade -qq --force-yes

第二个解决方案是修改 UCF 配置以自动接受维护者的更改

unset UCF_FORCE_CONFFOLD
export UCF_FORCE_CONFFNEW=YES
ucf --purge /var/run/grub/menu.lst
sudo apt-get dist-upgrade -qq --force-yes

免责声明:

这个问题非常普遍,用例将影响所需的解决方案。如果可能,强烈建议升级到 grub2。无需修改系统文件即可配置 Grub2。

ubuntu tracker 中还提供了大量不同的解决方案和问题报告。我很想链接到所有这些解决方案,但没有代表。

祝你好运 :)

答案2

我对这个问题的回答是:“我在 ec2 上安装了自动内核更新,最近也安装了apt-get autoremove -y。即使在安装完内核后,sudo update-grub我也只看到了3.13.0-48列出,/boot/grub/menu.lst但没有看到。我到底有多倒霉?”

我的回答是:“可能没有问题。在其他 Ubuntu 系统上,它menu.lst甚至不存在,而是update-grub似乎在输入配置/boot/grub/grub.cfg。我猜这是menu.lst来自 EC2 的 Ubuntu AMI 的一些奇怪的产物,或者是与打包或本地配置管理的一些交互。”

答案3

就我个人而言,我会“展示版本之间的差异”,仔细记录变化,然后在“开发”AWS 实例中试验新的差异。如果我格外谨慎,我会简单地阅读相关更改的手册页(它们可能不是针对 menu.lst,而是针对其他一些软件,如内核,或者实际上任何东西),以确切了解正在发生的变化。

或者,您可以克隆此虚拟机,进行升级,看看会发生什么,如果失败,您可以删除新 VM,然后使用其他选项重新启动该过程。仅凭这一点,虚拟机就很棒。

答案4

我的 Ubuntu 18.04 EC2 实例上仍然出现该错误,并且似乎与内核从 4.x 升级到 5.x 有关。

对我有用的步骤与@menzo 类似:

  1. 当提示$sudo apt update; sudo apt upgrade解决时,我保留了原始版本。
  2. 备份:sudo mv -v /boot/grub/menu.lst.bkp
  3. 重新创建并按 y:sudo update-grub-legacy-ec2

正在搜索 GRUB 安装目录...找到:/boot/grub 正在搜索默认文件...找到:/boot/grub/default 测试现有的 GRUB menu.lst 文件...

找不到 /boot/grub/menu.lst 文件。您是否希望生成 /boot/grub/menu.lst?(y/N) y 正在搜索启动图像...未找到,跳过... 找到内核:/boot/vmlinuz-5.4.0-1054-aws 找到内核:/boot/vmlinuz-5.3.0-1032-aws 找到内核:/boot/vmlinuz-4.15.0-1065-aws 正在更新 /boot/grub/menu.lst...完成

  1. 查看:sudo cat /boot/grub/menu.lst
  2. sudo reboot

最初,在 AWS EC2 控制台中

0/2 检查已通过

但 5-10 分钟后就解决了。

祝你好运!这太烦人了,因为升级不是自动的,而且我有很多旧实例……

相关内容