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

Mar*_*ery 36 ubuntu upgrade amazon-ec2

我只是尝试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>
Run Code Online (Sandbox Code Playgroud)

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

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

Men*_*nga 9

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

来源:

该问题是由Grub旧配置中的本地和远程更改冲突引起的。Grub legacy 和 Grub2 使用不同的配置位置:

  • Grub遗产: /boot/grub/menu.lst
  • Grub2: /boot/grub/grub.cfg

原因:

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

为什么 ubuntu 对 grub 使用 UCF 解释如下: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
Run Code Online (Sandbox Code Playgroud)

第二种解决方案是修改 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
Run Code Online (Sandbox Code Playgroud)

免责声明:

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

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

祝你好运 :)


dan*_*man 0

我对这个问题的版本是:“我在 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 的一些奇怪的工件,或者是一些与打包或本地配置管理交互的东西。 ”