有没有未使用的 `initrd.img` 可以删除?

看起来我在我的/boot目录下有一个不必要的initrd.img文件:
$ ls -1s /boot
total 82835
 1439 abi-4.11.0-10-generic
  204 config-4.11.0-10-generic
    1 extlinux
    1 grub
48186 initrd.img-4.11.0-10-generic
10626 initrd.img-4.8.0-34-generic
10626 initrd.img-4.8.0-39-generic
   12 lost+found
  180 memtest86+.bin
  182 memtest86+.elf
  182 memtest86+_multiboot.bin
 3695 System.map-4.11.0-10-generic
 7501 vmlinuz-4.11.0-10-generic

这些是 initrd.img-4.8.0-34-genericinitrd.img-4.8.0-39-generic,因为我找不到它们的任何痕迹。
$ sudo update-grub2
Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Found linux image: /boot/vmlinuz-4.11.0-10-generic
Found initrd image: /boot/initrd.img-4.11.0-10-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
done

$ dpkg -l *4.8.0*
dpkg-query: no packages found matching *4.8.0*

$ dpkg -l linux-*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                        Version            Architecture       Description
+++-===========================-==================-==================-===========================================================
ii  linux-base                  4.5ubuntu1         all                Linux image base package
un  linux-doc-4.11.0            <none>             <none>             (no description available)
ii  linux-firmware              1.167              all                Firmware for Linux kernel drivers
ii  linux-generic               4.11.0.10.10       amd64              Complete Generic Linux kernel and headers
un  linux-headers               <none>             <none>             (no description available)
un  linux-headers-3.0           <none>             <none>             (no description available)
ii  linux-headers-4.11.0-10     4.11.0-10.15       all                Header files related to Linux kernel version 4.11.0
ii  linux-headers-4.11.0-10-gen 4.11.0-10.15       amd64              Linux kernel headers for version 4.11.0 on 64 bit x86 SMP
ii  linux-headers-generic       4.11.0.10.10       amd64              Generic Linux kernel headers
un  linux-image                 <none>             <none>             (no description available)
ii  linux-image-4.11.0-10-gener 4.11.0-10.15       amd64              Linux kernel image for version 4.11.0 on 64 bit x86 SMP
ii  linux-image-extra-4.11.0-10 4.11.0-10.15       amd64              Linux kernel extra modules for version 4.11.0 on 64 bit x86
ii  linux-image-generic         4.11.0.10.10       amd64              Generic Linux kernel image
un  linux-initramfs-tool        <none>             <none>             (no description available)
un  linux-kernel-headers        <none>             <none>             (no description available)
un  linux-kernel-log-daemon     <none>             <none>             (no description available)
ii  linux-libc-dev:amd64        4.11.0-10.15       amd64              Linux Kernel Headers for development
ii  linux-libc-dev:i386         4.11.0-10.15       i386               Linux Kernel Headers for development
un  linux-restricted-common     <none>             <none>             (no description available)
ii  linux-sound-base            1.0.25+dfsg-0ubunt all                base package for ALSA and OSS sound systems
un  linux-source-4.11.0         <none>             <none>             (no description available)
un  linux-tools                 <none>             <none>             (no description available)

这两个东西真的都没用吗?如果它们无用,那么正确的移除方法是什么(我读到过,rm 对于 /boot 文件夹是不被严格推荐的)? 编辑1: sudo apt autoremove 也无法帮助。

1你试过用 sudo apt autoremove 吗? - George Udosen
需要将"purge"添加到"sudo apt autoremove"命令中。 - Jameel Grand
2个回答

每次一个软件包触发update-initramfs时,都会创建一个"initrd"镜像,因此很难找到与之对应的软件包。
使用方法:
dpkg -S /boot/initrd.img*

要查看图片是由哪个包裹放置的,你应该执行以下操作:
dpkg-query: no path found matching pattern /boot/initrd.img-4...

就像我之前说的那样,"which means "I can't find any related package to this file"."
所以这是我的建议,
删除所有的“initrd”镜像:
sudo rm /boot/initrd.img*

生成所有当前安装的内核的新“intird”图像:
sudo update-initramfs -c -k all

你完成了。

我删除了所有的initrd镜像,并为当前内核生成了一个新的镜像,但是dpkg -S仍然显示对于新安装的镜像找不到路径。 - sinclair
很遗憾,这个方法不起作用(我使用的是运行着内核3.13.0-149-generic的Ubuntu 14.04)。每次我运行最后一个命令时,update-initramfs都会再次生成不需要的initrd.img文件。 - Sonny
4有效的方法是从链接https://help.ubuntu.com/community/RemoveOldKernels中找到的,操作如下: $ sudo update-initramfs -d -k 4.8.0-34-generic。然后运行update-initramfs -c -k all。这样就可以了。 - Sonny
@sinclair 这个回答已经解释了。它说dpkg不会知道initrd镜像,因为它们不在下载的软件包中。initrd镜像是在安装软件包后本地生成的。 - Franklin Yu
请参考https://askubuntu.com/a/761305/132098了解哪些内核被视为update-initramfs的更新对象。 - Abdull

在你的情况下,我认为手动删除initrd.img是可以的,因为你明显没有安装linux-image-4.8.0-34-generic
对于其他遇到这个问题并且需要删除“额外”initrd.img的人来说,可能是因为安装了一个“额外”的linux-image,而update-initramfs使用它来生成这个“不需要的”initrd.img
所以在运行sudo rm /boot/initrd.img*之前,请考虑运行以下命令:
sudo apt-get remove linux-image-4.8.0-34-generic

现在运行:
sudo update-initramfs -c -k all
我知道你已经解决了你的问题,但是我想其他人可能需要快速指导,并且可能不理解你问题的独特性。
除非你非常确定自己在做什么,否则不要手动删除系统文件。
之后可能需要手动运行sudo update-grub。