为什么卸载的内核的旧initrd文件会填满/ boot分区?


12

在几台Ubuntu计算机上,尽管我总是删除所有旧内核,但我一直面临完整引导分区的问题。initrd尽管实际上并未安装相关的内核,但由于引导分区上有许多文件,因此似乎出现了问题。举个例子:

root@Jacobi:/boot# ls -lah
insgesamt 202M
drwxr-xr-x  3 root root 3,0K Jan 30 10:03 .
drwxr-xr-x 25 root root 4,0K Jan 30 10:03 ..
-rw-r--r--  1 root root 1,2M Dez 11 15:36 abi-4.4.0-104-generic
-rw-r--r--  1 root root 1,2M Jan  9 22:28 abi-4.4.0-109-generic
-rw-r--r--  1 root root 1,2M Jan 19 14:06 abi-4.4.0-112-generic
-rw-r--r--  1 root root 187K Dez 11 15:36 config-4.4.0-104-generic
-rw-r--r--  1 root root 187K Jan  9 22:28 config-4.4.0-109-generic
-rw-r--r--  1 root root 187K Jan 19 14:06 config-4.4.0-112-generic
drwxr-xr-x  5 root root 1,0K Jan 30 10:03 grub
-rw-r--r--  1 root root  10M Jan 30 10:03 initrd.img-3.13.0-39-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-101-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-103-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-104-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-109-generic
-rw-r--r--  1 root root  10M Jan 30 10:03 initrd.img-4.4.0-38-generic
-rw-r--r--  1 root root  10M Jan 30 10:03 initrd.img-4.4.0-45-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-59-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-77-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-78-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-81-generic
-rw-r--r--  1 root root 179K Jan 28  2016 memtest86+.bin
-rw-r--r--  1 root root 181K Jan 28  2016 memtest86+.elf
-rw-r--r--  1 root root 181K Jan 28  2016 memtest86+_multiboot.bin
-rw-------  1 root root 3,8M Dez 11 15:36 System.map-4.4.0-104-generic
-rw-------  1 root root 3,8M Jan  9 22:28 System.map-4.4.0-109-generic
-rw-------  1 root root 3,8M Jan 19 14:06 System.map-4.4.0-112-generic
-rw-------  1 root root 6,8M Dez 11 15:36 vmlinuz-4.4.0-104-generic
-rw-------  1 root root 6,8M Jan  9 22:28 vmlinuz-4.4.0-109-generic
-rw-------  1 root root 6,8M Jan 19 14:06 vmlinuz-4.4.0-112-generic

但是仅安装了linux-image-4.4.0-104-generic和linux-image-4.4.0-109-generic:

root@Jacobi:/boot# dpkg -l linux-image-\* | grep ^ii
ii  linux-image-4.4.0-104-generic       4.4.0-104.127 amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-4.4.0-109-generic       4.4.0-109.132 amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-104-generic 4.4.0-104.127 amd64        Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-109-generic 4.4.0-109.132 amd64        Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP

如果我手动删除了不必要的initrd文件,则当我尝试进行升级时,它们会再次生成。

造成此问题的原因可能是什么?如何永久清除这些文件?


1
您如何删除与这些版本相对应的软件包?
大师

1
@muru除了用清除它们之外,我不记得以其他任何方式完成它apt-get autoremove
user5950

Answers:


12

您应该使用以下命令检查部分删除的内核

dpkg -l linux-image-\* | grep ^rc

并用例如删除它们sudo apt-get purge linux-image-4.4.0-101-generic

清除将从中删除initramfs生成规则/var/lib/initramfs-tools/

如果没有帮助,则可以从initramfs列表中手动将其删除:

sudo rm /var/lib/initramfs-tools/3.13.0-39-generic
sudo rm /var/lib/initramfs-tools/4.4.0-101-generic
sudo rm /var/lib/initramfs-tools/4.4.0-103-generic
sudo rm /var/lib/initramfs-tools/4.4.0-38-generic
sudo rm /var/lib/initramfs-tools/4.4.0-45-generic
sudo rm /var/lib/initramfs-tools/4.4.0-59-generic
sudo rm /var/lib/initramfs-tools/4.4.0-77-generic
sudo rm /var/lib/initramfs-tools/4.4.0-78-generic
sudo rm /var/lib/initramfs-tools/4.4.0-81-generic

通常我先运行,purge-old-kernels然后sudo apt-get autoremove再运行2个最新内核。

您可以使用其initramfses重新安装已安装的内核:

sudo apt-get install --reinstall \
$(dpkg -l linux-image-\* | grep ^ii | awk '{print $2}')

1
这似乎工作得很好。综上所述:一些仅部分删除的内核。我如上所述发现并移除了它们。然后,我不得不initrd再次手动从引导程序中删除不必要的文件,以释放那里的一些空间,解决了问题!谢谢!
user5950

如我所读,rm用于任何与initrd内核或标头有关的东西都是不好的形式。有一些命令可以为您处理部分删除的kernels / headers / initrd.img文件的删除。请参阅update-initramfs。请参阅下面的我的答案以获取更多详细信息。
丹尼尔(Daniel)

1

如果您已经使用dpkg清除内核/头,如果你已经检查dpkg -l,仍然没有看到内核/安装头在那里,但你仍然可以看到这些旧内核的引用/boot的形式initrd-img的文件,那么有道使用update-initramfs命令清除这些引用和文件。

例如,如果您仅4.4.0-109安装了,但仍在中看到以下内容/boot

-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-103-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-104-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-109-generic

您可以安全地删除4.4.0-104,并4.4.0-103/boot用下面的命令:

$ sudo update-initramfs -d -k 4.4.0-103-generic
$ sudo update-initramfs -d -k 4.4.0-104-generic
$ sudo update-initramfs -c -k all

前两个命令删除initramfs生成规则中对这些内核的引用以及中的文件/boot。最后一条命令告诉initramfs initrd.img根据更新的规则重新生成文件。

理论上您也可以使用

$ sudo update-initramfs -d -k 4.4.0-{103,104}-generic

一次删除多个内核,但是由于某种原因,这对我不起作用。


+1-这是孤立的initrd的正确方法(和答案)。
bshea
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.