我想知道为什么 Ubuntu 不会自动删除旧内核。
当然,没有什么是完美的,事情可能会出错,所以如果更新不起作用,备份内核可能很好。但只需保留最新内核和最新内核之前的内核并删除所有旧内核就足够了。
为什么 Ubuntu 不能自动执行此操作?有什么原因吗?
答案1
为什么 Ubuntu 不能自动执行此操作?有什么原因吗?
我只看到一个原因:它不能完美地工作;目前没有清晰的方法来决定“旧内核”的定义。“旧”并不意味着“未使用”,也不意味着“不需要”。任何错误都会导致用户机器崩溃。
因此到目前为止,手动方法是首选,因为这将删除的权力交到了用户手中。
此结论的资源:
Ubuntu 维基百科:删除旧内核的建议
Last-good-boot 在 Intrepid/8.10 final 中已完全实现,但由于不够稳定,因此已被禁用。该设置在文件 /etc/default/kernel-helper-rc 中占一行。
发射台:aptitude 是否应该提供一种删除旧内核版本的方法?
apt-get
具有自动删除功能,可卸载所有不需要作为依赖项且未手动安装的软件包。从 Ubuntu 14.04 开始,所有过时的内核和标头都应自动标记为不再需要,因此可以使用 apt-get autoremove 命令清除。(有报道称该功能尚未完全发挥作用)。我不知道 aptitude 中是否有与 apt-get 的 autoremove 类似的功能。
Ubuntu 开发:发行版提供的清理旧内核的机制
虽然同意自动清理会很有帮助,而且似乎很合适,但还是存在一个(或两个)小陷阱。内核有多种风格,人们可能会故意同时安装这些风格,也可能无意。此外,不同版本有时会有一组不断变化的依赖包。有一段时间,这应该只是 linux-backports-modules(曾经有 linux-ubuntu-modules 和 linux-restricted-modules)。虽然这不是什么大问题。从模式匹配的角度来看,generic-pae 内核有点麻烦,因为它们往往会破坏“使用以“-”分隔的最后一部分来表示风格”的原则。但无论如何,我认为主要问题是各种风格,因此自动清理应该保留每种风格的最后三个,即使这可能会留下更多内核。
答案2
这里发生了两件事:
新内核是全新的软件包,而不是具有新版本号的更新软件包,因此安装新内核映像不会替换任何旧内核。它们共存。
Ubuntu 使用一系列 apt magic 来保护最近两个内核版本免受“apt-get autoremove”(最新版本和上次启动的版本)的影响。有关详细信息,请参阅 /etc/apt/apt.conf.d/01autoremove-kernels。
这一切意味着,一旦您重新启动到最新的内核,“apt-get autoremove”将删除除当前和最后启动的内核包之外的所有包。
旧内核仍然在 /boot 中积累,因为 Ubuntu 默认未启用自动删除 - 您必须时不时手动运行它,或者必须启用它。
这可能会在 16.04 中发生变化 -无人值守升级包的错误修复将默认启用自动删除旧内核。
答案3
此脚本将完成这项工作。它将删除所有未使用的内核。
sudo dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge
除此之外,不删除内核肯定是一件相当新奇的事情。我有一个又一个 Ubuntu 14 系统,由于旧内核垃圾而遇到了启动分区已满的问题。
它会让缺乏经验的用户的生活变得极其复杂。这实际上是一个新手陷阱。Canonical 应该解决这个问题。
答案4
Ubuntu 只会自动删除不再需要或存在安全风险的项目...因此我认为这样做是出于安全考虑。假设由于某种奇怪的原因,新内核变得不安全...那么在修复新内核期间,您将暂时被重新路由回旧内核。此外,新内核可能会有所变化,因此有些内核是可选的,例如,将 14.04.1 更新到 14.04.2 时,您可以选择使用新内核,但今年 4 月,当新的 LTS 版本 15.04 发布时,您将自动获得内核更新。因此我认为这是出于安全考虑。
但如果你想删除它,请尝试运行此命令行
sudo apt-get autoremove
这应该会删除任何不需要的软件,比如你的旧内核,如果没有尝试
sudo apt-get remove (kernels-name)