Warum füllen alte initrd-Dateien deinstallierter Kernel die Partition / booten sie?

12

Auf mehreren Ubuntu-Computern stehe ich ständig vor dem Problem einer vollständigen Boot-Partition, obwohl ich immer alle alten Kernel entferne. Das Problem scheint aufzutreten, da sich viele initrdDateien auf der Boot-Partition befinden, obwohl die zugehörigen Kernel nicht tatsächlich installiert sind. Um im Beispiel zu geben:

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

Es werden jedoch nur Linux-Image-4.4.0-104-generic und Linux-Image-4.4.0-109-generic installiert:

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

Wenn ich die unnötigen initrd-Dateien manuell lösche, werden sie erneut generiert, sobald ich versuche, ein Upgrade durchzuführen.

Was könnte die Ursache für dieses Problem sein und wie kann ich diese Dateien dauerhaft entfernen?

user5950
quelle
1
Wie haben Sie die diesen Versionen entsprechenden Pakete entfernt?
Muru
1
@muru Ich kann mich nicht erinnern, es auf andere Weise getan zu haben, als sie damit zu reinigen apt-get autoremove.
user5950

Antworten:

12

Sie sollten teilweise entfernte Kernel mit überprüfen

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

und entfernen Sie sie zum Beispiel mit sudo apt-get purge linux-image-4.4.0-101-generic.

Durch das Löschen werden die Generierungsregeln für initramfs entfernt /var/lib/initramfs-tools/.

Wenn dies nicht hilft, können Sie sie manuell aus der initramfs-Liste entfernen:

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

Normalerweise laufe ich purge-old-kernelsgefolgt von sudo apt-get autoremovenur 2 aktuellen Kerneln.

Sie können installierte Kernel mit ihren initramfses neu installieren:

sudo apt-get install --reinstall \
$(dpkg -l linux-image-\* | grep ^ii | awk '{print $2}')
N0rbert
quelle
1
Das scheint ziemlich gut zu funktionieren. Zusammenfassend lässt sich sagen, dass es einige nur teilweise entfernte Kernel gab. Ich habe sie wie oben beschrieben entdeckt und entfernt. Dann musste ich die unnötigen initrdDateien aus dem Boot noch einmal manuell entfernen, um dort Speicherplatz freizugeben, und das Voilà-Problem wurde gelöst! Vielen Dank!
user5950
Wie ich gelesen habe, ist es eine schlechte Form, sie rmfür alles zu verwenden, was an initrdKernel oder Header weitergeleitet wird. Es stehen einige Befehle zur Verfügung, mit denen Sie teilweise entfernte Kernel- / Header- / initrd.img-Dateien entfernen können. Siehe update-initramfs. Siehe meine Antwort unten für weitere Details.
Daniel
0

Wenn Sie dpkgdie Kernel / Header bereits gelöscht haben dpkg -lund die dort installierten Kernel / Header bereits überprüft haben und immer noch nicht sehen, aber weiterhin Verweise auf diese alten Kernel in /bootForm von initrd-imgDateien sehen, dann ist dies der richtige Weg Das Löschen dieser Referenzen und Dateien erfolgt mit dem update-initramfsBefehl.

Zum Beispiel, wenn Sie nur 4.4.0-109installiert haben, aber dennoch Folgendes sehen /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

Sie können sicher entfernen 4.4.0-104und 4.4.0-103aus /bootmit den folgenden Befehlen:

$ 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

Die ersten beiden Befehle löschen die Verweise auf diese Kernel in den initramfsGenerierungsregeln sowie die Dateien in /boot. Der letzte Befehl weist initramfs an, die initrd.imgDateien basierend auf den aktualisierten Regeln neu zu generieren.

Theoretisch könnte man auch verwenden

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

mehrere Kernel gleichzeitig zu löschen, aber aus irgendeinem Grund hat dies bei mir nicht funktioniert.

Daniel
quelle