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


30

我只是尝试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,所以我认为本地修改是Amazon所做的。我要点击“保留当前安装的本地版本”选项,并希望取得最好的效果。

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


Answers:


8

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

资源:

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

  • rub遗留: /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为什么将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跟踪器中还提供了许多不同的解决方案并打开了问题报告。我希望链接到所有这些人,但没有代表。

祝好运 :)


ubuntu 18.04看到W:--force-yes已过时,请使用以--allow开头的选项之一。
Scott Stensland '18

现在是2019年,此解决方案不再起作用了。似乎该错误已再次消失
DarkNeuron

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产生的怪异产物,或者是与打包或本地配置管理进行交互。 ”


0

就个人而言,我将在您的位置“显示版本之间的差异”,仔细记录一下所做的更改,然后在“开发” AWS实例中尝试新的差异。如果我格外谨慎,我会简单地阅读手册页以查找有问题的更改(它们可能不是针对menu.lst,而是针对其他软件,例如内核,甚至是真正的东西),以找出确切的变化。

或者,您可以克隆此虚拟机,进行升级,查看会发生什么,如果失败,则核对新的VM,然后使用其他选择重新启动该过程。仅出于这个原因,虚拟机就很棒。


0

我刚刚遇到了OVH的VPS遇到的“问题”。
就我而言(以及在Google搜索时发现的许多其他情况),唯一的变化是空格。
他们来自哪里,我不知道,但是如果您选择show the differences between the versions了答案,那么答案就是No non whitespace changes detected采用维护者版本。


-1

你的选择

  • 显示版本之间的差异

然后

  • 安装软件包维护者的版本

要么

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

无论如何,现在您可以运行

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

1
-1; 这根本不能回答问题(实际上,它只是重复我已经引用的消息的一部分),也不能解释为什么我要运行提供的代码或它将执行什么操作。
Mark Amery

文件哈希不匹配的原因消息与选项,您必须找到它们之间的差异以选择正确的选项。“ whatis ls diff”打印命令的描述。
Imya

“文件哈希不匹配导致带有选项的消息” -是的,我可以阅读。我的问题是,为什么这些差异存在于EC2实例上,保留或丢弃它们会带来什么后果。您的答案根本没有解决这个问题,只是重复了邮件中显示的内容。您的答案甚至没有提到Amazon或EC2;与提出的问题无关。
Mark Amery

哦,Boi,甚至没有提供文件内容,而是等待其他人知道他的系统上正在发生什么。
2015年

1
不是“我的系统”。我在关于EC2的问题上询问标准EC2安装行为,并用EC2标签进行了标记。当然,我决定不将文件的完整内容转储到问题中,因为不必理解和回答问题。如果要调查此问题,则在EC2上使用Ubuntu的任何人都可以检查其内容。我不明白为什么我不希望在这里提供文件源,而只是在询问之前将流行的库的源代码转储到Stack Overflow问题中。
Mark Amery
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.