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

我只是尝试在AWS EC2 Ubuntu 13.10服务器上执行sudo do_release_upgrade升级到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,所以我假设本地修改是亚马逊的做法。 我将打“保持当前版本安装”选项,并希望最好的。

但是,为什么我收到这个信息,这是正确的处理方法?

这个问题可能是由一系列不同的问题引起的,所以没有一个解决scheme。 这些步骤应该在EC2上工作。

资源:

这个问题是由Grub传统configuration中的本地和远程更改冲突造成的。 Grub传统和Grub2使用不同的configuration位置:

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

原因:

您可能正在使用Amazon EBS支持的AMI。 实例从预先构build的基础映像(快照)构build其根文件系统。 grubconfiguration写入快照,但是UCFregistry没有正确清除。 这意味着你有一个快照,认为menu.lstconfiguration是本地修改的。 更多信息可以在这里find: https : //bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1485685

为什么Ubuntu使用UCF for grub在这里解释: https : //askubuntu.com/a/147079

解决scheme(S):

一个通用的解决scheme是删除menu.list并重新configuration它。 这确保了ucfregistry项和configuration文件parsing为相同的散列。

 #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 

第二种解决scheme是修改UCFconfiguration以自动接受维护人员更改

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

免责声明:

这个问题非常广泛,用例会影响所需的解决scheme。 如果可能,强烈build议升级到grub2。 可以在不修改系统文件的情况下configurationGrub2。

还有很多不同的解决scheme提供和ubuntu跟踪器中打开的问题报告。 我很想链接到所有的人,但没有代表。

祝你好运 :)

我的这个问题的版本是这样的:“我在ec2上自动创build内核,最近做了apt-get autoremove -y ,即使在sudo update-grub我只能在/boot/grub/menu.lst看到3.13.0-48但不是安装好的内核,我是怎么搞的?

我的答案是:“可能没有搞砸,在其他的Ubuntu系统上, menu.lst甚至不存在, update-grub似乎把configuration放在/boot/grub/grub.cfg我的猜测是menu.lst是一些来自EC2的Ubuntu AMI的奇怪的神器,或者一些与包装或本地configurationpipe理交互的东西。“

就我个人而言,我将“展示版本之间的差异”,仔细logging所做的更改,然后在“开发”AWS实例中尝试新的差异。 如果我要格外谨慎,那么我只是简单地阅读手册页来了解有关的变化(它们可能不是menu.lst,但是其他一些软件,比如内核,或者其他任何软件)来确切地发现什么是变化的。

或者,您可以克隆此虚拟机,执行升级,查看会发生什么情况,如果失败,则可以使用新的虚拟机并使用不同的选项重新启动该过程。 虚拟机非常适合这个原因。

你的select

  • 显示版本之间的差异

然后

  • 安装包维护者的版本

要么

  • 保持当前安装的本地版本

无论如何,现在你可以跑步了

 ls -hl /boot/grub/menu.lst* diff --suppress-common-lines /boot/grub/menu.lst*