问题描述
我的启动分区在SSD上,因此它没有超过8个安装的内核版本的空间,并且最终一些内核更新将无法安装,因为我的启动分区充满了旧版本。关于如何删除旧版本(甚至如何自动化该过程)有很多问题,但我的问题很简单:为什么apt-get autoremove
没有自动检测并删除它们,有没有办法让它能够做到这一点?我的意思是,apt-get
无论如何安装它们,所以它知道它们,所以它为什么选择留下所有旧版本?
最佳解决办法
至于回答原因,请参阅文件/etc/apt/apt.conf.d/01autoremove-kernels
正如您所看到的,apt被告知永远不会自动移动内核,正如另一个(脚本)文件/etc/kernel/postinst.d/apt-auto-removal
所说的那样。这是:
如果您的script-fu足够好,您可以编辑它以仅保存几个内核,但我无法帮助您,因为我的脚本fu不是那么好
更新:
在/etc/kernel/postinst.d/apt-auto-removal
中有这一部分:
if [ "$latest_version" != "$installed_version" ] \
|| [ "$latest_version" != "$running_version" ] \
|| [ "$installed_version" != "$running_version" ]
then
# We have at least two kernels that we have reason to think the
# user wants, so don't save the second-newest version.
previous_version=
fi
因此,如果您比较01autoremove-kernels
文件和uname -r
的输出,您将意识到当前正在运行的内核及其之前的最新内核将永远不会被该脚本删除。原来是另一个文件/etc/apt/apt.conf.d/01autoremove
,其中有行:
APT
{
NeverAutoRemove
{
"^firmware-linux.*";
"^linux-firmware$";
};
VersionedKernelPackages
{
# linux kernels
"linux-image";
"linux-headers";
"linux-image-extra";
"linux-signed-image";
# kfreebsd kernels
"kfreebsd-image";
"kfreebsd-headers";
# hurd kernels
"gnumach-image";
# (out-of-tree) modules
".*-modules";
".*-kernel";
"linux-backports-modules-.*";
# tools
"linux-tools";
};
所以你可以对这些进行评论,并且它会允许你使用apt-autoremove
将auto-remove作为内核,但请记住 – 这样做需要您自担风险
次佳解决办法
对我来说,它有助于安装最新的(X)ubuntu(15.10)。在早期版本中,如果使用Software Updater进行安装,内核软件包可能会被标记为手动安装,因此sudo apt-get autoremove --purge
无法删除它们。有关于该问题的错误报告:Bug #1175637,Bug #1439769
在早期版本中,您可以尝试标记由sudo apt-mark auto $(apt-mark showmanual | grep -E "^linux-([[:alpha:]]+-)+[[:digit:].]+-[^-]+(|-.+)$")
自动安装的内核包,然后运行sudo apt-get autoremove --purge
以查看是否有所不同。该命令仍然不应该删除/etc/apt/apt.conf.d/01autoremove-kernels中显示的内核包,但最安全的是首先使用--dry-run
选项运行apt-get autoremove
。