Dlaczego stare pliki initrd odinstalowanych jąder zapełniają partycję / boot?

13

Na kilku maszynach Ubuntu ciągle mam problem z pełną partycją rozruchową, chociaż zawsze usuwam wszystkie stare jądra. Wydaje się, że problem występuje, ponieważ wiele initrdplików znajduje się na partycji rozruchowej, mimo że powiązane jądra nie są w rzeczywistości zainstalowane. Na przykład:

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

Ale zainstalowane są tylko Linux-image-4.4.0-104-generic i 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

Jeśli ręcznie usunę niepotrzebne pliki initrd, zostaną one ponownie wygenerowane, gdy tylko spróbuję wykonać aktualizację.

Co może być przyczyną tego problemu i jak mogę na stałe pozbyć się tych plików?

user5950
źródło
1
Jak usunąłeś pakiety odpowiadające tym wersjom?
muru
1
@muru Nie pamiętam, że zrobiłem to w jakikolwiek inny sposób, niż ich oczyszczenie apt-get autoremove.
user5950,

Odpowiedzi:

12

Powinieneś sprawdzić częściowo usunięte jądra za pomocą

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

i usuń je na przykład za pomocą sudo apt-get purge linux-image-4.4.0-101-generic.

Czyszczenie spowoduje usunięcie reguł generowania initramfs /var/lib/initramfs-tools/.

Jeśli to nie pomoże, możesz usunąć je ręcznie z listy 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

Zwykle biegam purge-old-kernelsza nim, sudo apt-get autoremoveżeby mieć tylko 2 ostatnie jądra.

Możesz ponownie zainstalować zainstalowane jądra z ich inicjalizacjami:

sudo apt-get install --reinstall \
$(dpkg -l linux-image-\* | grep ^ii | awk '{print $2}')
N0rbert
źródło
1
To wydaje się działać całkiem dobrze. Podsumowując: niektóre z tego, jak wiele tylko częściowo usuniętych jąder. Zauważyłem je i usunąłem, jak opisano powyżej. Następnie musiałem initrdręcznie usunąć niepotrzebne pliki z rozruchu, aby zwolnić trochę miejsca, i voilà problem rozwiązany! Dzięki!
user5950 30.01.2018
Jak czytałem, jest to zły sposób używania rmdo wszystkiego, co jest powiązane z initrdjądrem lub nagłówkami. Dostępnych jest kilka poleceń, które zajmą się usunięciem częściowo usuniętych plików jądra / nagłówków / initrd.img. Zobaczyć update-initramfs. Zobacz moją odpowiedź poniżej, aby uzyskać więcej informacji.
Daniel
2

Jeśli już dpkgużywałeś do czyszczenia jąder / nagłówków i jeśli już sprawdziłeś dpkg -li nadal nie widzisz zainstalowanych tam jąder / nagłówków, ale nadal widzisz odniesienia do tych starych jąder w /bootpostaci initrd-imgplików, to właściwy sposób czyszczenie tych referencji i plików odbywa się za pomocą update-initramfspolecenia.

Na przykład, jeśli masz tylko 4.4.0-109zainstalowany, ale nadal widzisz następujące elementy w /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

Można bezpiecznie usunąć 4.4.0-104i 4.4.0-103od /bootz następującymi poleceniami:

$ 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

Pierwsze dwa polecenia usuwają odniesienia do tych jąder w initramfsregułach generowania, a także do plików w /boot. Ostatnie polecenie informuje initramfs, aby ponownie wygenerował initrd.imgpliki na podstawie zaktualizowanych reguł.

Teoretycznie możesz także użyć

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

aby usunąć wiele jąder jednocześnie, ale z jakiegoś powodu to nie działało dla mnie.

Daniel
źródło
+1 - To jest poprawna metoda (i odpowiedź) dla osieroconych initrd.
bshea
Dziękuję Ci. Usunięto nadmiarowe pliki initrd.img. Mam nadzieję, że nie wróci
zero