Perché i vecchi file initrd dei kernel disinstallati riempiono / partizionano la partizione?


12

Su diverse macchine Ubuntu mi trovo costantemente di fronte al problema di una partizione di avvio completa anche se rimuovo sempre tutti i vecchi kernel. Il problema sembra verificarsi, poiché molti initrdfile si trovano nella partizione di avvio anche se i kernel correlati non sono effettivamente installati. Per fare un esempio:

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

Ma sono installati solo linux-image-4.4.0-104-generic e 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

Se elimino manualmente i file initrd non necessari, questi verranno nuovamente generati non appena provo a eseguire un aggiornamento.

Quale potrebbe essere la causa di questo problema e come posso eliminare definitivamente quei file?


1
Come hai rimosso i pacchetti corrispondenti a queste versioni?
Muru,

1
@muru Non ricordo di averlo fatto in nessun altro modo, se non per eliminarli apt-get autoremove.
user5950

Risposte:


12

Dovresti controllare i kernel parzialmente rimossi con

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

e rimuoverli con ad esempio sudo apt-get purge linux-image-4.4.0-101-generic.

L'eliminazione rimuoverà le regole di generazione di initramfs da /var/lib/initramfs-tools/.

Se non aiuta, puoi rimuoverli manualmente dall'elenco 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

Di solito corro purge-old-kernelsseguito da sudo apt-get autoremoveavere solo 2 kernel recenti.

Puoi reinstallare i kernel installati con i loro initramfs:

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

1
Questo sembra funzionare abbastanza bene. Per riassumere: alcuni di come c'erano molti kernel rimossi solo parzialmente. Li ho individuati e rimossi come descritto sopra. Quindi ho dovuto rimuovere i initrdfile non necessari dal boot manualmente ancora una volta per liberare un po 'di spazio lì, e voilà problema risolto! Grazie!
user5950

Come ho letto, è una cattiva forma da usare rmper qualsiasi cosa rielaborata, initrdkernel o intestazioni. Ci sono alcuni comandi disponibili che gestiranno la rimozione di file kernel / headers / initrd.img parzialmente rimossi per te. Vedere update-initramfs. Vedi la mia risposta di seguito per maggiori dettagli.
Daniel,

1

Se hai già usato dpkgper eliminare i kernel / le intestazioni e se hai già controllato dpkg -le ancora non vedi i kernel / le intestazioni installati lì, ma vedi ancora riferimenti a questi vecchi kernel sotto /bootforma di initrd-imgfile, allora il modo corretto per eliminare questi riferimenti e file è con il update-initramfscomando.

Ad esempio, se hai solo 4.4.0-109installato, ma vedi ancora quanto segue in /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

È possibile rimuovere in sicurezza 4.4.0-104e 4.4.0-103da /bootcon i seguenti comandi:

$ 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

I primi due comandi eliminano i riferimenti a quei kernel nelle initramfsregole di generazione così come i file in /boot. L'ultimo comando dice a initramfs di rigenerare i initrd.imgfile in base alle regole aggiornate.

Teoricamente potresti anche usare

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

per eliminare più kernel contemporaneamente, ma per qualche motivo questo non ha funzionato per me.


+1 - Questo è il metodo corretto (e la risposta) per gli initrd orfani.
bshea,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.