为什么Ubuntu不会自动删除旧内核?

我想知道为什么Ubuntu不会自动删除旧内核。

当然没有什么是完美的,事情可能会出错,所以如果更新不起作用,拥有备份内核可能会很棒。 但是,只保留最新的内核和最新的内核并删除所有较旧的内核也就足够了。

有没有理由为什么Ubuntu不会自动执行此操作?

有没有理由为什么Ubuntu不会自动执行此操作?

我只能看到一个原因:它无法完美地工作; 目前没有干净的方法来决定“旧内核”的定义是什么。 “旧”并不意味着“未使用”,也不意味着“不需要”。 任何错误都会杀死用户的机器。

因此,到目前为止,手动方法是首选,因为这将移除function放入用户手中。


这个结论的资源:

Ubuntu WIKI: 删除旧内核的提案

最后良好启动在Intrepid / 8.10 final中完全实现,但它已被禁用,因为它被认为不够稳定。 该设置是文件/ etc / default / kernel-helper-rc中的单行。


Launchpad: aptitude是否应该提供一种删除旧内核版本的方法?

apt-get具有autoremovefunction,可以卸载作为依赖项不需要的所有软件包,并且尚未手动安装。 由于Ubuntu 14.04所有过时的内核和头文件都应自动标记为不再需要,因此可以使用apt-get autoremove命令进行清除。 (有报道说这还没有完全奏效) 。 我不知道aptitude中的一个function类似于apt-get的autoremove。


Ubuntu-devel: Distro提供的清理旧内核的机制

虽然同意自动清理会非常有用并且似乎合适,但是存在轻微的潜在缺陷(或两个)。 有各种各样的内核,人们可能会或可能不会故意并行安装这些内核。 此外,各种版本有时会有一组不断变化的依赖包。 有一段时间这应该只是linux-backports-modules(有linux-ubuntu-modules和linux-restricted-modules)。 虽然这不是一个问题。 从模式匹配的角度来看,generics内核有点痛苦,因为它们倾向于破坏“使用分裂的最后部分” – “为了味道”。 但无论如何,我认为主要的问题是各种风格,所以自动清理应该保留每个的最后三个,即使这可能会留下更多的内核。

这里有两件事:

  1. 新内核是完全新的包,而不是具有更新版本号的更新包,因此安装新的内核映像不会替换任何旧的内核映像。 他们共存。

  2. Ubuntu使用一堆apt魔法来保护最后两个内核版本的’apt-get autoremove’(最新版本,以及最后一次启动的版本)。 有关详细信息,请参阅/etc/apt/apt.conf.d/01autoremove-kernels。

这一切都意味着,一旦你重新启动到最新的内核,’apt-get autoremove’应该除去当前和最后一次启动的内核包之外的所有内容。

旧内核仍会在/ boot中累积,因为默认情况下Ubuntu中未启用autoremove – 您必须每隔一段时间手动运行它,或者必须启用它。

这可能会在16.04更改 – 无人值守升级程序包的错误修复将默认启用旧内核的自动删除。

这个脚本可以完成这项工作。 它将删除所有未使用的内核。

 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应该解决这个问题。

删除旧内核的简单方法是使用ubuntu-tweak。 选择Janitor标签并勾选Old Kernel框。 这给了你一个它认为你不再需要的内核列表。 您可以全部选择它们,然后单击“清理”,过一会儿,作业就完成了。 作为一个紧张的性格我检查了我使用uname -a运行的内核,但它没有列在清单上。 这适用于我妻子的笔记本电脑(它有一个相当小的启动分区并显示警告)和我的(工作正常)。 大家都同意这是安全的吗?

Ubuntu只会自动删除不再需要的项目或存在安全风险……所以我认为其原因是出于安全考虑。 让我们说,由于一些奇怪的原因,一个新的内核变得不安全……然后你会在新的内核被修复时暂时重新路由到旧内核。 此外,新内核可能会随附更改,因此某些内核会选择加入,例如更新14.04.1到14.04.2,您可以选择加入新内核,但今年4月新LTS版本15.04出现时您将自动拥有你的内核更新。 所以我认为它是出于安全目的。

但是如果要删除它,请尝试运行此命令行

 sudo apt-get autoremove 

如果不尝试,这应该删除任何不需要的软件,如旧内核

 sudo apt-get remove (kernels-name) 

我建议使用Ubuntu Tweak删除旧内核。 看这里:

如何删除旧内核版本以清理启动菜单?

我认为最新版本的Ubuntu 15.10可以自动删除旧内核,如果你编辑/etc/apt/apt.conf.d/50unattended-upgrades文件:更改行

//无人值守升级::删除 – 未使用 – 依赖关系“false”;

无人值守升级::删除 – 未使用 – 依赖关系“真”;

不过,我没有测试过这个。

我遇到了无法安装软件的问题。 Apt-get无法安装linux-headers,报告磁盘已满。 $ df -i报告IUse%为100%:磁盘有可用空间但是用完了inode。 $ sudo dpkg --configure -a失败,以及$ sudo apt-get -f install$ sudo apt-get autoremove

当我从/ usr / src手动删除几个较旧的内核文件夹时,问题就解决了 – 只需$ rm或shift-delete文件夹。 这释放了足够的inode空间以允许$ apt-get -f install完成。

之后我只有10个linux内核。 我运行了$ sudo apt-get autoremove ,删除了1.4 GB的文件。 这引出了一个问题:真的吗? 真?? 但老实说,这是运行用户友好系统的正确方法吗?