安装的内核太多,/boot 上没有剩余空间,无法清除旧内核

安装的内核太多,/boot 上没有剩余空间,无法清除旧内核

当我尝试在 Linux Mint 18 系统上安装更新时,收到空间不足错误。/boot 显示已满 100%。

我注意到我有许多旧内核需要删除。我安装byobu并发布purge-old-kernels后,再次出现空间不足错误,并且没有删除任何内核。

apt-get purge如果我尝试手动操作任何旧内核,也会发生同样的情况。

Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.
2 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up initramfs-tools (0.122ubuntu8.16) ...
update-initramfs: deferring update (trigger activated)
Setting up linux-image-4.4.0-169-generic (4.4.0-169.198) ...
Processing triggers for initramfs-tools (0.122ubuntu8.16) ...
update-initramfs: Generating /boot/initrd.img-4.15.0-70-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-4.15.0-70-generic with 1.
dpkg: error processing package initramfs-tools (--configure):
 subprocess installed post-installation script returned error exit status 1
Processing triggers for linux-image-4.4.0-169-generic (4.4.0-169.198) ...
/etc/kernel/postinst.d/dkms:
 * dkms: running auto installation service for kernel 4.4.0-169-generic
Error! echo
Your kernel headers for kernel 4.4.0-169-generic cannot be found at
/lib/modules/4.4.0-169-generic/build or /lib/modules/4.4.0-169-generic/source.
Error! echo
Your kernel headers for kernel 4.4.0-169-generic cannot be found at
/lib/modules/4.4.0-169-generic/build or /lib/modules/4.4.0-169-generic/source.
Error! echo
Your kernel headers for kernel 4.4.0-169-generic cannot be found at
/lib/modules/4.4.0-169-generic/build or /lib/modules/4.4.0-169-generic/source.
Error! echo
Your kernel headers for kernel 4.4.0-169-generic cannot be found at
/lib/modules/4.4.0-169-generic/build or /lib/modules/4.4.0-169-generic/source.
   ...done.
/etc/kernel/postinst.d/initramfs-tools:
update-initramfs: Generating /boot/initrd.img-4.4.0-169-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-4.4.0-169-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
dpkg: error processing package linux-image-4.4.0-169-generic (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 initramfs-tools
 linux-image-4.4.0-169-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)

有没有安全的方法可以使用 rm 删除启动映像而不破坏我的系统?

内核头文件/图像列表: https://pastebin.com/TYFMv6x7

答案1

删除未使用的内核包的最安全的方法是使用 purge-old-kernels由 Ubuntu 的开发人员之一 Dustin Kirkland 创建的实用程序,可用于桌面和服务器系统、Ubuntu 以及 Linux Mint。

要安装并使用该包,请执行以下操作:

sudo apt-get install -y bikeshed byobu
sudo purge-old-kernels

如果该实用程序无法检测到旧内核,它将显示以下消息:

No kernels are eligible for removal

如果您的内核是自动安装的,则可以使用以下命令删除此类内核:

sudo apt-get autoremove
sudo apt-get autoclean

/boot然而,当100% 满时这些命令也可能会失败。

在这种情况下,请手动删除一个或两个旧initrd.img*文件。首先使用命令验证uname -a您不是在尝试删除自己的内核。

一旦您重新获得一些空间以成功运行apt-get,您就可以运行上述两个命令。

开始之前请注意备份。

答案2

有两三个地方存放着旧玉米粒和相关杂物。以下是我用来清除旧杂物的步骤。当remove-old-kernels杂物四处散落时,我会使用这些步骤。

首先,识别旧内核。它们存在于/boot

$ cd /boot/
$ ls -1
config-5.0.0-36-generic
config-5.0.0-37-generic
efi
grub
initrd.img-5.0.0-36-generic
initrd.img-5.0.0-37-generic
memtest86+.bin
memtest86+.elf
memtest86+_multiboot.bin
System.map-5.0.0-36-generic
System.map-5.0.0-37-generic
vmlinuz-5.0.0-36-generic
vmlinuz-5.0.0-37-generic

其次,执行apt-get removeapt-get purge从磁盘中删除包文件和包:

sudo apt get -y remove '*5.0.0-36*
...
sudo apt-get -y purge
...

DKMS 中可能有一些垃圾/lib/modules。由于 Nvidia 和 VirtualBox,我经常有未删除的垃圾。我不知道为什么4.15.0-nn内核设备不断被重新安装。我不断删除它,它不断回来。

第三,查看 DKMS 问题是否仍然存在。

# dkms status
nvidia, 430.50, 4.15.0-72-generic, x86_64: installed
nvidia, 430.50, 5.0.0-36-generic, x86_64: installed
nvidia, 430.50, 5.0.0-37-generic, x86_64: installed
virtualbox, 5.2.34, 4.15.0-72-generic, x86_64: installed
virtualbox, 5.2.34, 5.0.0-36-generic, x86_64: installed
virtualbox, 5.2.34, 5.0.0-37-generic, x86_64: installed

第四,删除多余的内容:

# dkms remove nvidia/430.50 -k 4.15.0-72-generic
# dkms remove nvidia/430.50 -k 5.0.0-36-generic
# dkms remove virtualbox/5.2.34 -k 4.15.0-72-generic
# dkms remove virtualbox/5.2.34 -k 5.0.0-36-generic

进而:

# find /var/lib -name '*4.15.0-72*'
/var/lib/dpkg/info/linux-headers-4.15.0-72.md5sums
/var/lib/dpkg/info/linux-headers-4.15.0-72.list
/var/lib/dpkg/info/linux-headers-4.15.0-72-generic.list
/var/lib/dpkg/info/linux-headers-4.15.0-72-generic.md5sums
/var/lib/dpkg/info/linux-headers-4.15.0-72-generic.postinst
/var/lib/dkms/nvidia/kernel-4.15.0-72-generic-x86_64
/var/lib/dkms/nvidia/430.26/4.15.0-72-generic
/var/lib/dkms/virtualbox/kernel-4.15.0-72-generic-x86_64
/var/lib/dkms/virtualbox/5.2.34/4.15.0-72-generic

第五,手动移除旧工件:

# find /var/lib -name '*4.15.0-72*' -exec rm -rf {} \;

第六,确保没有多余的内容/lib/modules

$ ls /lib/modules/
4.15.0-72-generic    5.0.0-36-generic    5.0.0-37-generic

并删除旧的垃圾:

$ sudo rm -rf /lib/modules/4.15.0-72-generic/
$ sudo rm -rf /lib/modules/5.0.0-36-generic/

七、更新initramfs,重新生成grub菜单:

# /sbin/depmod -a
# /usr/sbin/update-initramfs -u
# /usr/sbin/update-grub2

最后,检查旧内核是否真的消失了:

$ ls -1 /boot/
config-5.0.0-37-generic
efi
grub
initrd.img-5.0.0-37-generic
memtest86+.bin
memtest86+.elf
memtest86+_multiboot.bin
System.map-5.0.0-37-generic
vmlinuz-5.0.0-37-generic

相关内容