清理旧内核无法删除旧的initrd文件。

无法解释为什么...我猜手动删除它们可能不安全,所以希望能得到一些指导。这是我的/boot目录的ls列表(显然,我正在运行3.13.0-51内核):
-rw-r--r-- 1 root root  1164671 Apr 15 09:03 abi-3.13.0-51-generic
-rw-r--r-- 1 root root   165762 Apr 15 09:03 config-3.13.0-51-generic
drwxr-xr-x 5 root root     1024 Apr 30 14:33 grub
-rw-r--r-- 1 root root 22431280 Nov 26 14:16 initrd.img-3.13.0-36-generic.old-dkms
-rw-r--r-- 1 root root 22427261 Nov 26 14:16 initrd.img-3.13.0-37-generic.old-dkms
-rw-r--r-- 1 root root  9098067 Nov 26 18:00 initrd.img-3.13.0-39-generic.old-dkms
-rw-r--r-- 1 root root  9109727 Feb  5 15:22 initrd.img-3.13.0-40-generic.old-dkms
-rw-r--r-- 1 root root  9110419 Jan 18 02:29 initrd.img-3.13.0-43-generic.old-dkms
-rw-r--r-- 1 root root  9109659 Apr  5 23:11 initrd.img-3.13.0-44-generic.old-dkms
-rw-r--r-- 1 root root  9109097 Apr  5 23:01 initrd.img-3.13.0-46-generic.old-dkms
-rw-r--r-- 1 root root  5814104 Apr 30 14:13 initrd.img-3.13.0-48-generic
-rw-r--r-- 1 root root 22483793 Apr 30 13:52 initrd.img-3.13.0-48-generic.old-dkms
-rw-r--r-- 1 root root  9124331 Apr 30 14:28 initrd.img-3.13.0-49-generic.old-dkms
-rw-r--r-- 1 root root 22496134 Apr 30 13:59 initrd.img-3.13.0-51-generic
-rw-r--r-- 1 root root  4112384 Apr 30 12:16 initrd.img-3.13.0-51-generic.old-dkms
drwx------ 2 root root    12288 Aug  4  2014 lost+found
-rw-r--r-- 1 root root   176500 Mar 12  2014 memtest86+.bin
-rw-r--r-- 1 root root   178176 Mar 12  2014 memtest86+.elf
-rw-r--r-- 1 root root   178680 Mar 12  2014 memtest86+_multiboot.bin
-rw------- 1 root root  3389875 Apr 15 09:03 System.map-3.13.0-51-generic
-rw------- 1 root root  5818368 Apr 15 09:03 vmlinuz-3.13.0-51-generic

很抱歉,格式搞得有点乱... - Christopher Scott
您可以随时编辑并格式化您的帖子,方法是将文本高亮显示,并单击文本框上方的图标。或者等待其他人替您完成。 - user68186
我从来没有*.old-dkms文件。你是如何拥有它们的? - jarno
@jarno 这些由戴尔的DKMS(动态内核管理系统)创建,用于主线内核中未包含的模块。例如,编译时nvidiabbsswitch源代码可能会替换/boot/initrd.img,因此请备份副本,以便在使用dkms卸载更改时可以恢复。我今天正在努力更新我的rm-kernels bash脚本,以删除这些过时的.old-dkms文件。 - WinEunuuchs2Unix
@jarno 根据我下面的回答,不再需要修改bash脚本。人们只需要进行一次手动操作,删除属于已删除内核的/boot/*.old-dkms文件。 - WinEunuuchs2Unix
@WinEunuuchs2Unix 是的,这个功能已经包含在我的linux-purge软件中了。 - jarno
3个回答

手动删除它们是安全的。还有一个错误报告已经提交:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=717584

我也可以报告同样的情况发生在这里,使用3.13.0-54内核和3.13.0-55内核。

-rw-r--r-- 1 root root 1.2M Jun 17 20:03 abi-3.13.0-55-generic
-rw-r--r-- 1 root root 1.2M Jun 19 05:04 abi-3.13.0-57-generic
-rw-r--r-- 1 root root 162K Jun 17 20:03 config-3.13.0-55-generic
-rw-r--r-- 1 root root 162K Jun 19 05:04 config-3.13.0-57-generic
drwxr-xr-x 5 root root  12K Jul 11 15:54 grub
-rw-r--r-- 1 root root  11M Jul  7 21:37 initrd.img-3.13.0-54-generic.old-dkms
-rw-r--r-- 1 root root  27M Jul  4 13:37 initrd.img-3.13.0-55-generic
-rw-r--r-- 1 root root  27M Jul  4 13:37 initrd.img-3.13.0-55-generic.old-dkms
-rw-r--r-- 1 root root  27M Jul  6 18:28 initrd.img-3.13.0-57-generic
-rw-r--r-- 1 root root 173K Mar 12  2014 memtest86+.bin
-rw-r--r-- 1 root root 174K Mar 12  2014 memtest86+.elf
-rw-r--r-- 1 root root 175K Mar 12  2014 memtest86+_multiboot.bin
-rw------- 1 root root 3.3M Jun 17 20:03 System.map-3.13.0-55-generic
-rw------- 1 root root 3.3M Jun 19 05:04 System.map-3.13.0-57-generic
-rw------- 1 root root 5.6M Jun 17 20:03 vmlinuz-3.13.0-55-generic
-rw------- 1 root root 5.6M Jun 19 05:04 vmlinuz-3.13.0-57-generic

非常感谢您提供的错误链接。在仔细审查后,我发现在2017年4月已经进行了修复。这让我省去了修改bash脚本的麻烦,正如我在下面的回答中所述。 - WinEunuuchs2Unix
是的!我今天早上碰巧注意到那些旧的dkms文件现在成功被删除了。真是个好巧合。 - Nicomachus
@WinEunuuchs2Unix哦,看起来我的修复已经加入了某个Ubuntu版本。相应的Launchpad错误报告在这里。你正在使用哪个版本的dkms? - jarno
@jarno 目前我正在运行的是 2.2.0.3 版本,但我不知道当过时的 initrd.img*.old-dkms 文件被遗留下来时运行的是哪个版本。 - WinEunuuchs2Unix
@WinEunuuchs2Unix 在Ubuntu 14.04中,dkms版本2.2.0.3-1.1ubuntu5.14.04.9似乎没有修复。即使16.10也使用了2.2.0.3版本。所以我不知道是什么删除了您系统中的.old-dkms文件。 - jarno
@jarno 我在阅读这个错误修复的过程中得出的印象是,他们正在修补 update-initramfs 来删除不再需要的备份文件。 - WinEunuuchs2Unix
@WinEunuuchs2Unix 你是指我提供的Launchpad bug吗?你使用的是哪个版本的initramfs-tools?还有,你使用的是哪个Ubuntu发行版? - jarno
@jarno 我所指的是上面回答中的链接,我们当前正在进行评论。我的 dkms 只设置了一半,并且自动安装已关闭了好几个月。我的平台不适合进行测试。上面的回帖提到他的 .old-dkms 现在被自动清除了。对于混淆之处,我感到抱歉。 - WinEunuuchs2Unix
@Portugalthephilosoph 你使用一些开发版本的dkms和/或initramfs-tools吗?使用的是哪个Ubuntu版本?如果修复程序已在Ubuntu中发布,我会感到惊讶。 - jarno
@jarno 不,只是普通的16.04.3版本,目前使用的是4.4.0-89内核。 - Nicomachus
@Portugalthephilosoph /var/log/dpkg*ж–Ү件дјҡе‘ҠиҜүдҪ жңҖиҝ‘жҳҜеҗҰеҚҮзә§дәҶdkmsжҲ–initramfs-toolsгҖӮдҝ®еӨҚеҸҜиғҪеңЁиҝҷдәӣиҪҜ件еҢ…дёӯгҖӮ - jarno
我在xenial-updates软件源的dkmsinitramfs-tools包中没有看到修复,所以对于你的电脑是如何自动删除旧的dkms文件,这对我来说是个谜。如果你没有手动删除这些文件,那就更加神秘了。 - jarno
@jarno 忽略一切。刚刚意识到我甚至没有安装 dkms。我不知道它是什么时候从(所有!)我的机器上被移除的,也不知道是如何或为什么被移除的,但我现在正在重新安装它。 - Nicomachus

你可以使用Root权限运行命令rm /boot/*.old-dkms。但是,请确保被删除的*.old-dkms文件不是你可能安装的旧内核所需要的。你可以通过执行命令dpkg-query -l "linux-image-[0-9]*" | grep -e "^ii"来查看当前已安装的内核列表。

我原打算修改我的 rm-kernels bash 脚本,以便在使用 sudo apt purge *<kernel_version>* 移除内核后删除这些旧备份。然而,在研究错误报告时,我发现这个问题已经在2017年4月由上游修复

如果您不介意以 root 身份运行图形界面应用程序,您还可以使用 pkexec nautilus 查找要删除的过时备份:

boot-initrd.img.old-dkms

在我的系统上,Nautilus显示已安装并可以使用.old-dkms备份的内核版本4.4.8、4.9.21和4.10.10。突出显示的副本是我删除的过时备份。
注意:pkexec需要配置策略工具包。它旨在取代您在历史帖子中多次看到的gksu和gksudo。