如何在错误更新后降级内核(16.04)

如何在错误更新后降级内核(16.04)

最近升级到 Ubuntu 16.04 内核(4.4.0-89 和 -91)在我的笔记本电脑上失败了。幸运的是,我仍安装了以前的工作版本(4.4.0-57)。目前,我已将 Grub 配置为显示菜单,并在启动时手动选择 -57,但这似乎很脆弱,将来可能会出现问题sudo apt upgrade

我想我想要:

  • 删除 -89 和 -91,因为它们对我没有任何好处。
  • 将 -57 设为 Grub 的默认值,以便在升级后依然有效。
  • 确保 -57 保持安装,即使我稍后安装内核升级
  • 能够轻松尝试后续的内核更新,但如果失败则恢复到 -57。我主要担心的是 -57 会被自动删除。
  • 如果我发现以后的更新可以正常运行,则可以轻松返回以撤消所有这些操作并返回到以下内核更新。

尝试删除 -91sudo apt remove linux-image-4.4.0-91-generic需要删除 linux-generic 和 linux-headers-generic。这似乎很糟糕,所以我没有尝试过。

我可以找到有关一般问题的各种问题,但似乎没有一个能够解决我的所有目标,并且大多数问题已经过时,我认为它们不再适用。

做到这一点的最好方法是什么?

附录:这被标记为重复如何阻止特定包的更新?。这个答案可能解答了我的部分问题,但没有解决整体问题。

总的来说,问题在于内核的处理方式不同寻常。内核是通过 linux-generic 安装的,而 linux-generic 只是对 linux-image-generic 和 linux-image-headers 的依赖。反过来,它们又只是对 linux-linux-image-VERSION-generic 和 headers-VERSION-generic 的依赖,这两个软件包之所以引人注目,是因为将版本号嵌入到软件包名称中(大概是为了便于并行安装多个软件包)。

该答案中没有特别提到的是:

  • 没有解决如何删除 -89 和 -91。
  • 即使我安装了更高版本的更新,也没有解决如何使 -57 成为 Grub 的默认值的问题。
  • 没有说明如何确保 -57 保持安装状态,即使我安装了后续更新。即使答案是保留一个或多个软件包,考虑到涉及的几个软件包,我会保留哪些?如果是保留 linux-generic,我该如何先将其降级?

答案1

通过以下方式删除最新内核

sudo apt remove linux-image-4.4.0-91-generic linux-headers-4.4.0-91-generic

这将卸载元包和linux-generic。内核将永远不会升级。linux-image-genericlinux-headers-generic

要恢复它,你可以运行

sudo apt install linux-generic

这将安装最新的内核并且内核将得到升级。

linux-generic是一个元包。它是空的,但依赖于其他两个元包:linux-image-genericlinux-headers-generic

最后两个指向最新的内核映像和头文件。

如果您删除元软件包,Linux 中不会删除任何内容,但内核映像和标头不会获得更新。您可以随时稍后安装它们。它们将提取最新的“真实”内核软件包。

所以解决方案是手动删除您不需要的内核包和元包。

答案2

尽管 Pilot6 的解决方案可能是最好的解决方案,但您可以采取不那么激烈的措施。

我个人会从软件中心删除你不想要的内核,然后将这些软件包搁置 - 请参阅如何阻止特定包的更新?

这是一个微不足道的变化,您可以轻松地覆盖或恢复该变化。

相关内容