引导分区不断被旧的initrd.img文件填满。

这是/boot的内容:
drwxr-xr-x  5 root root     3072 Apr 18 09:10 .
drwxr-xr-x 26 root root     4096 Mar 22 15:43 ..
-rw-r--r--  1 root root   217495 Jan 17 05:59 config-4.15.0-76-generic
-rw-r--r--  1 root root   217457 Feb 28 02:45 config-4.15.0-91-generic
drwxr-xr-x  3 root root     4096 Dec 31  1969 efi
drwxr-xr-x  5 root root     1024 Mar 22 15:50 grub
-rw-r--r--  1 root root 60196828 Apr 18 09:05 initrd.img-4.15.0-76-generic
-rw-r--r--  1 root root 60206115 Apr 18 09:05 initrd.img-4.15.0-91-generic
drwx------  2 root root    12288 Feb 13  2016 lost+found
-rw-r--r--  1 root root   182704 Jan 28  2016 memtest86+.bin
-rw-r--r--  1 root root   184380 Jan 28  2016 memtest86+.elf
-rw-r--r--  1 root root   184840 Jan 28  2016 memtest86+_multiboot.bin
-rw-------  1 root root  4068355 Jan 17 05:59 System.map-4.15.0-76-generic
-rw-------  1 root root  8367768 Jan 17 06:27 vmlinuz-4.15.0-76-generic
-rw-------  1 root root  8375960 Feb 28 02:51 vmlinuz-4.15.0-91-generic

我的内核版本是4.15.0-91-generic(基于uname -r)。 dpkg --list | grep linux-image的输出为:
c  linux-image-4.15.0-74-generic                               4.15.0-74.84                                     amd64        Signed kernel image generic
ii  linux-image-4.15.0-76-generic                               4.15.0-76.86                                     amd64        Signed kernel image generic
ii  linux-image-4.15.0-91-generic                               4.15.0-91.92                                     amd64        Signed kernel image generic
ic  linux-image-4.4.0-171-generic                               4.4.0-171.200                                    amd64        Signed kernel image generic

这是当我运行sudo apt-get upgrade时发生的情况:
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following package was automatically installed and is no longer required:
  thermald
Use 'sudo apt autoremove' to remove it.
The following packages have been kept back:
  linux-headers-generic
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Setting up linux-firmware (1.173.17) ...
update-initramfs: Generating /boot/initrd.img-4.15.0-91-generic
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirclientplatform.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirplatformgraphics.conf: No such file or directory
update-initramfs: Generating /boot/initrd.img-4.15.0-76-generic
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirclientplatform.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirplatformgraphics.conf: No such file or directory
update-initramfs: Generating /boot/initrd.img-3.19.0-69-generic
WARNING: missing /lib/modules/3.19.0-69-generic
Ensure all necessary drivers are built into the linux image!
depmod: ERROR: could not open directory /lib/modules/3.19.0-69-generic: No such file or directory
depmod: FATAL: could not search modules: No such file or directory
depmod: WARNING: could not open /var/tmp/mkinitramfs_BapeFK/lib/modules/3.19.0-69-generic/modules.order: No such file or directory
depmod: WARNING: could not open /var/tmp/mkinitramfs_BapeFK/lib/modules/3.19.0-69-generic/modules.builtin: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirclientplatform.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirplatformgraphics.conf: No such file or directory
update-initramfs: Generating /boot/initrd.img-3.19.0-66-generic
WARNING: missing /lib/modules/3.19.0-66-generic
Ensure all necessary drivers are built into the linux image!
depmod: ERROR: could not open directory /lib/modules/3.19.0-66-generic: No such file or directory
depmod: FATAL: could not search modules: No such file or directory
depmod: WARNING: could not open /var/tmp/mkinitramfs_oFrhwW/lib/modules/3.19.0-66-generic/modules.order: No such file or directory
depmod: WARNING: could not open /var/tmp/mkinitramfs_oFrhwW/lib/modules/3.19.0-66-generic/modules.builtin: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirclientplatform.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirplatformgraphics.conf: No such file or directory
update-initramfs: Generating /boot/initrd.img-3.19.0-65-generic
WARNING: missing /lib/modules/3.19.0-65-generic
Ensure all necessary drivers are built into the linux image!
depmod: ERROR: could not open directory /lib/modules/3.19.0-65-generic: No such file or directory
depmod: FATAL: could not search modules: No such file or directory
depmod: WARNING: could not open /var/tmp/mkinitramfs_cmnh3Q/lib/modules/3.19.0-65-generic/modules.order: No such file or directory
depmod: WARNING: could not open /var/tmp/mkinitramfs_cmnh3Q/lib/modules/3.19.0-65-generic/modules.builtin: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirclientplatform.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirplatformgraphics.conf: No such file or directory
update-initramfs: Generating /boot/initrd.img-3.19.0-59-generic
WARNING: missing /lib/modules/3.19.0-59-generic
Ensure all necessary drivers are built into the linux image!
depmod: ERROR: could not open directory /lib/modules/3.19.0-59-generic: No such file or directory
depmod: FATAL: could not search modules: No such file or directory
depmod: WARNING: could not open /var/tmp/mkinitramfs_kimz35/lib/modules/3.19.0-59-generic/modules.order: No such file or directory
depmod: WARNING: could not open /var/tmp/mkinitramfs_kimz35/lib/modules/3.19.0-59-generic/modules.builtin: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirclientplatform.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirplatformgraphics.conf: No such file or directory
update-initramfs: Generating /boot/initrd.img-3.19.0-58-generic
WARNING: missing /lib/modules/3.19.0-58-generic
Ensure all necessary drivers are built into the linux image!
depmod: ERROR: could not open directory /lib/modules/3.19.0-58-generic: No such file or directory
depmod: FATAL: could not search modules: No such file or directory
depmod: WARNING: could not open /var/tmp/mkinitramfs_yH46Fl/lib/modules/3.19.0-58-generic/modules.order: No such file or directory
depmod: WARNING: could not open /var/tmp/mkinitramfs_yH46Fl/lib/modules/3.19.0-58-generic/modules.builtin: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirclientplatform.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirplatformgraphics.conf: No such file or directory
update-initramfs: Generating /boot/initrd.img-3.19.0-25-generic
WARNING: missing /lib/modules/3.19.0-25-generic
Ensure all necessary drivers are built into the linux image!
depmod: ERROR: could not open directory /lib/modules/3.19.0-25-generic: No such file or directory
depmod: FATAL: could not search modules: No such file or directory
depmod: WARNING: could not open /var/tmp/mkinitramfs_gmb7aZ/lib/modules/3.19.0-25-generic/modules.order: No such file or directory
depmod: WARNING: could not open /var/tmp/mkinitramfs_gmb7aZ/lib/modules/3.19.0-25-generic/modules.builtin: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirclientplatform.conf: No such file or directory
/sbin/ldconfig.real: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf.d/x86_64-linux-gnu_mirplatformgraphics.conf: No such file or directory

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.19.0-25-generic with 1.
dpkg: error processing package linux-firmware (--configure):
 installed linux-firmware package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 linux-firmware
E: Sub-process /usr/bin/dpkg returned an error code (1)

现在,/boot 的内容为:
drwxr-xr-x  5 root root     3072 Apr 18 09:14 .
drwxr-xr-x 26 root root     4096 Mar 22 15:43 ..
-rw-r--r--  1 root root   217495 Jan 17 05:59 config-4.15.0-76-generic
-rw-r--r--  1 root root   217457 Feb 28 02:45 config-4.15.0-91-generic
drwxr-xr-x  3 root root     4096 Dec 31  1969 efi
drwxr-xr-x  5 root root     1024 Mar 22 15:50 grub
-rw-r--r--  1 root root 16975438 Apr 18 09:14 initrd.img-3.19.0-58-generic
-rw-r--r--  1 root root 16975489 Apr 18 09:14 initrd.img-3.19.0-59-generic
-rw-r--r--  1 root root 16975434 Apr 18 09:14 initrd.img-3.19.0-65-generic
-rw-r--r--  1 root root 16975144 Apr 18 09:14 initrd.img-3.19.0-66-generic
-rw-r--r--  1 root root 16975428 Apr 18 09:14 initrd.img-3.19.0-69-generic
-rw-r--r--  1 root root 60195966 Apr 18 09:14 initrd.img-4.15.0-76-generic
-rw-r--r--  1 root root 60204841 Apr 18 09:14 initrd.img-4.15.0-91-generic
drwx------  2 root root    12288 Feb 13  2016 lost+found
-rw-r--r--  1 root root   182704 Jan 28  2016 memtest86+.bin
-rw-r--r--  1 root root   184380 Jan 28  2016 memtest86+.elf
-rw-r--r--  1 root root   184840 Jan 28  2016 memtest86+_multiboot.bin
-rw-------  1 root root  4068355 Jan 17 05:59 System.map-4.15.0-76-generic
-rw-------  1 root root  8367768 Jan 17 06:27 vmlinuz-4.15.0-76-generic
-rw-------  1 root root  8375960 Feb 28 02:51 vmlinuz-4.15.0-91-generic

看起来系统正在尝试在/boot目录下建立旧的initrd文件,然后/boot目录占满了空间,导致dpkg失败。我该如何解决这个问题?

1你是不是手动删除了包管理器安装的文件? - user535733
我从/boot目录中删除了旧的图像,参考链接:https://askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-boot - Joe Mornin
在那个帖子中,没有一个高评分的答案涉及手动删除文件,而这通常是你所展示症状的原因。我猜你真正的问题是你的/boot目录已满?而这是试图解决该问题的结果?你究竟是按照哪个答案进行操作的?(每个答案都有自己的“分享”链接)。你是否仔细遵循了每一步?还是跳过了某些步骤?是否有你忽略的错误信息? - user535733
自从多年前开始使用Ubuntu以来,管理旧内核和/boot空间一直是一个长期存在的问题。我通常会小心地使用apt-get purge linux-image-x.x.x.x-generic来删除未使用的内核。但最近,这个方法已经失效了,因为每当我运行apt-get upgrade时,/boot目录都会被过时的initrd.img文件填满,即使这些内核在dpkg --list | grep linux-image中并没有显示出来。我尝试手动从/boot目录中删除这些initrd.img文件,但问题并没有得到解决。 - Joe Mornin
如果您添加了此PPA(https://launchpad.net/~gerardpuig/+archive/ubuntu/ppa)并使用apt安装ubuntu-cleaner,会发生什么? - Sam Pan
Ubuntu版本是什么?对我来说,原因非常明确。但你做了很多错误的事情。 - Pilot6
4个回答

  1. 删除残留文件,这些文件告诉update-initramfs安装了哪个内核
    sudo rm /var/lib/initramfs-tools/3.19*
    
  2. 确认(不会处理任何3.19*的镜像)
    sudo update-initramfs -u -k all
    
  3. 修复apt安装问题
    sudo apt install -f
    

然后您可以永久删除那些3.19*图像。

注意:第2步是可选的,因为在安装linux-firmware软件包时会在第3步中重复。我包含它只是为了清楚明白。


1sudo rm /var/lib/initramfs-tools/3.19* 是关键。谢谢。 - Joe Mornin

仔细阅读此链接:https://help.ubuntu.com/community/RemoveOldKernels 根据此帖子,您可以在终端中使用autoremove命令轻松删除旧的未使用的内核。
sudo apt-get autoremove --purge  

注意:`apt-get autoremove` 不会删除所有自动安装的旧内核提供的软件包,因为备用版本会被保留;保留的内核列表会在文件 `/etc/apt/apt.conf.d/01autoremove-kernels` 中维护和自动更新,作为匹配正则表达式的列表。因此,请仔细阅读上面的帖子。
列出所有内核,包括当前正在使用的内核:
dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+'

如果你想清除一个特定的内核提供的软件包,你可以在终端中使用以下命令来实现:
sudo apt-get purge linux-image-4.**.*-**-generic
sudo dpkg --purge linux-headers-4.**.*-* linux-headers-4.**.*-**-generic

上述页面还提供了如何“安全删除旧内核”的方法,包括initrd.img。最好按照这个步骤一步一步来。

@楼主,这是最好的方法。相信我,我说的是有经验的。其他方法也不错,但只要有一个小错误,整个工作就会泡汤。 - kesarling He-Him
同时,如果可能的话,请保留图像文件至多三个更新前。这对于某些应用程序在特定更新中出现问题时很有帮助 :) - kesarling He-Him
这对于OP来说似乎不太可能奏效,因为通过手动删除文件,他们已经阻止了apt完成移除的能力。在移除过程中出现文件未找到的错误会导致dpkg报错...这正是OP的输出所显示的情况。 - user535733

你的清理只删除了与内核关联的六个包中的一个,剩下的部分导致了问题。对于/boot目录下的3.19 initrd文件,请提取版本号,例如3.19.0-58,并通过dpkg --list | fgrep 3.19.0-58来运行。在这个3.19包列表上运行apt-get purge命令。然后进行下一个,直到所有问题都得到解决。
下次你想要清理完整的内核时,可以使用dpkg --list | fgrep x.y.z-w获取相关的包,然后如果只有你想要删除的包被列出来,将该列表输入到purge命令中(回忆一下前一行中的命令以生成列表)。
dpkg --list |fgrep x.y.z-w
apt-get purge `!!`

对于大多数未来的读者来说,有一个相对安全的解决方案:

对于每个不存在的文件或目录,创建一个虚拟文件供apt删除。Apt并不关心文件内容,它只需要删除文件。所以给它一个要删除的文件。

这种方法可能会很繁琐(如果你有很多缺失的文件),但比下面的替代方案更安全。


示例

这里是一个错误: /sbin/ldconfig.real: 警告:忽略无法打开的配置文件:/etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf:没有那个文件或目录

/etc目录中的文件属于root用户,所以使用sudo touch /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf创建一个虚拟文件。

现在apt/dpkg有一个要删除的文件,这样就可以解决不存在文件或目录的错误了。


一种不太安全的解决方案是使用dpkg的--force-remove-reinstreq标志。我们称之为核选项-它会从dpkg数据库中删除软件包条目,而不尝试删除任何文件

这似乎对您来说是一个有效的解决方案(仅限您)。所有未来的读者应该忘记他们看到过它。

警告在重新安装之前,将--force-remove-reinstreq用作最后的手段。如果滥用此选项,可能会破坏软件包管理器并需要重新安装。此选项仅适用于有经验的用户。这是强力药物-滥用可能会危及患者生命。