当我尝试在 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 remove
并apt-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