Come posso rimuovere vecchi kernel / installarne di nuovi quando / boot è pieno?


31

So che questa domanda è stata posta molte volte prima, tuttavia credo che con me sia solo un po 'diverso.

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       224G  5.2G  208G   3% /
udev            1.9G  4.0K  1.9G   1% /dev
tmpfs           777M  260K  777M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            1.9G     0  1.9G   0% /run/shm
/dev/sda2        90M   88M     0 100% /boot
/dev/sda6       1.9G  514M  1.3G  29% /tmp

La mia partizione di avvio è piena.

Kernel corrente:

# uname -r
3.2.0-35-generic

Tutti i kernel:

# dpkg --list | grep linux-image
ii  linux-image-3.2.0-32-generic    3.2.0-32.51                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-34-generic    3.2.0-34.53                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-35-generic    3.2.0-35.55                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-37-generic    3.2.0-37.58                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-38-generic    3.2.0-38.60                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iU  linux-image-generic             3.2.0.37.45                         Generic Linux kernel image

Quindi ho pensato di rimuovere il kernel 3.2.0.32-generico con:

# sudo apt-get purge linux-image-3.2.0-32-generic
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 linux-generic : Depends: linux-headers-generic (= 3.2.0.37.45) but 3.2.0.38.46 is to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Nessun successo.

Quando provo apt-get -f installanche non riesce:

# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  linux-headers-3.2.0-34 linux-headers-3.2.0-35 linux-headers-3.2.0-34-generic linux-headers-3.2.0-35-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  linux-generic linux-image-generic
The following packages will be upgraded:
  linux-generic linux-image-generic
2 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
5 not fully installed or removed.
Need to get 0 B/4,334 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
Setting up initramfs-tools (0.99ubuntu13.1) ...
update-initramfs: deferring update (trigger activated)
Setting up linux-image-3.2.0-37-generic (3.2.0-37.58) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-38-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-37-generic /boot/vmlinuz-3.2.0-37-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-37-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-37-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-37-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-37-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
Setting up linux-image-3.2.0-38-generic (3.2.0-38.60) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-37-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-38-generic /boot/vmlinuz-3.2.0-38-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-38-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-38-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-38-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-38-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
dpkg: dependency problems prevent configuration of linux-image-generic:
 linux-image-generic depends on linux-image-3.2.0-37-generic; however:
  Package linux-image-3.2.0-37-generic is not configured yet.
dpkg: error processing linux-image-generic (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Package linux-image-generic is not configured yet.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
Processing triggers for initramfs-tools ...
No apport report written because the error message indicates its a followup error from a previous failure.
No apport report written because MaxReports is reached already
  update-initramfs: Generating /boot/initrd.img-3.2.0-35-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-35-generic with 1.
dpkg: error processing initramfs-tools (--configure):
 subprocess installed post-installation script returned error exit status 1
No apport report written because MaxReports is reached already
Errors were encountered while processing:
 linux-image-3.2.0-37-generic
 linux-image-3.2.0-38-generic
 linux-image-generic
 linux-generic
 initramfs-tools
E: Sub-process /usr/bin/dpkg returned an error code (1)

Qualsiasi aiuto sarebbe molto apprezzato.

Aggiornamento: ho fatto:

sudo rm /boot/*-3.2.0-32-generic /boot/*-3.2.0-34-generic

Successivamente il seguente problema con apt-get -f install:

root@localhost:/# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following extra packages will be installed:
  linux-generic
The following packages will be upgraded:
  linux-generic
1 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
1 not fully installed or removed.
Need to get 0 B/1,722 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Version of linux-image-generic on system is 3.2.0.38.46.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error     from a previous failure.
                      Errors were encountered while processing:
 linux-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)


Vedi la mia risposta per quando autoremove non funziona a causa della mancanza di spazio.
— nslntmnx

Risposte:


22

Non puoi usare apt-get quando il tuo kernel è obsoleto.

cd /boot
sudo rm *-2.6.35-6.9-generic
sudo rm *-3.16.0-23-generic

usare lsper vedere cosa c'è nella cartella rimuovere il più vecchio uno o due quindi

sudo apt-get -f install

Quindi cen o apt-get purge come in

sudo apt-get purge linux-image-3.2.0-32-generic linux-image-3.2.0-34-generic

o continua semplicemente con rm.

dovresti anche sudo update-grubquando sei finito


Il comando install ha reinstallato molti kernel vecchi, risultando in un disco di avvio completo. Il comando di eliminazione ha risolto questo problema per me.
— SPRBRN,

Ho seguito questa risposta fino a sudo apt-get -f install, quindi ho riavviato per assicurarmi che tutto andasse bene e ho rimosso il resto con apt autoremovecome suggerito nell'output dei comandi precedenti.
— Bart C,

10

Apparentemente, funziona:

sudo apt-get autoremove 

Secondo la apt-getpagina man:

autoremove viene utilizzato per rimuovere i pacchetti che sono stati installati automaticamente per soddisfare le dipendenze per altri pacchetti e che ora non sono più necessari.

3.16.0-39 è quello che ho provato a installare, ma non è riuscito perché / boot era pieno. 3.16.0-38 è la mia versione attuale. Puoi vedere che -38 è stato saltato.

server:~$ uname -r
3.16.0-38-generic
server:~$ sudo apt-get autoremove 
[sudo] password for mikeb: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  linux-headers-3.16.0-30 linux-headers-3.16.0-30-generic
  linux-headers-3.16.0-31 linux-headers-3.16.0-31-generic
  linux-headers-3.16.0-33 linux-headers-3.16.0-33-generic
  linux-headers-3.16.0-34 linux-headers-3.16.0-34-generic
  linux-headers-3.16.0-36 linux-headers-3.16.0-36-generic
  linux-headers-3.16.0-39 linux-headers-3.16.0-39-generic
  linux-image-3.16.0-30-generic linux-image-3.16.0-31-generic
  linux-image-3.16.0-33-generic linux-image-3.16.0-34-generic
  linux-image-3.16.0-36-generic linux-image-3.16.0-39-generic
  linux-image-extra-3.16.0-30-generic linux-image-extra-3.16.0-31-generic
  linux-image-extra-3.16.0-33-generic linux-image-extra-3.16.0-34-generic
  linux-image-extra-3.16.0-36-generic linux-image-extra-3.16.0-39-generic
0 upgraded, 0 newly installed, 24 to remove and 0 not upgraded.

Mi piace questa risposta ma manca un manuale per sapere esattamente a cosa serve autoremove.
— s3m3n,

1
autoremove funziona solo se le azioni apt precedentemente accodate vengono completate correttamente. Autoremove non funzionerà se si sta già ottenendo un errore "spazio vuoto sul dispositivo": le azioni precedentemente accodate non riusciranno e autoremove non funzionerà. In altre parole, autoremove funziona ... fino a quando non lo fa.
— user535733

@ user535733 hai ragione. Vedi la mia risposta per quando autoremove non funziona a causa della mancanza di spazio.
— nslntmnx

7

In un terminale, eseguire il comando seguente:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get purge

Questo comando elenca tutti i kernel Linux attualmente installati, quindi seleziona tutti quelli attualmente non utilizzati e li rimuove.


2
Forse ti piacerebbe spiegare cosa fa esattamente questo comando. Sembra piuttosto complicato: in generale, le persone dovrebbero essere avvisate di eseguire comandi come questo che non capiscono, specialmente con qualcosa di vitale per il loro sistema.
— mtdevans,

@mtdevans: ho aggiunto che il comando sopra elenca tutti i kernel Linux attualmente installati, quindi seleziona tutti quelli attualmente non utilizzati, quindi rimuove tutti i kernel attualmente non utilizzati.
— Kristian,

4
Il comando è utile, esegui prima la parte prima di "| xargs" per verificare cosa vuoi eliminare. Inoltre, | grep -v potrebbe essere necessario per preservare l'ultimo kernel, che potrebbe non essere ancora in uso, ma voluto.
— Roman Susi,

4
questo è pericoloso poiché corrisponde anche a linux-libc-dev: amd64
— Frederick Nord

2
dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

Se l'esecuzione del comando precedente senza "sudo apt-get -y purge" corrisponde a linux-libc-dev: amd64 è possibile aggiungere un punto e virgola al regex per non includerlo:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ :]*\).*/\1/;/[0-9]/!d' | xargs

Ora assicurati che abbia un bell'aspetto e aggiungi il "sudo apt-get -y purge"


1

Per Ubuntu 12.04 prova questo sudo apt-get purge linux-image-[kernel version]

Questo eliminerà qualsiasi versione del kernel. Se la tua cartella di avvio ha molti kernel, non dimenticare di aggiornare grub e riavviare il sistema

ex. sudo apt-get purge linux-image-3.11.6 *


2
Il problema è che questo non funziona più quando si ha un punto in cui ci sono problemi di dipendenza, come quello che ci aspetta.
— Paŭlo Ebermann,

Questo funziona per me!
— Daniel,

0

Molte risposte dicono di usare "apt autoremove" ma potrebbe non funzionare quando / boot è pieno perché apt tenta di aggiungere kernel prima di rimuoverlo.

Il prossimo apt autoremove non rimuoverà alcun kernel menzionato in /etc/apt/apt.conf.d/01autoremove-kernels, quindi dobbiamo risolverlo.

Ecco il processo che ha funzionato per me.

Rimuovere i file di configurazione del kernel indesiderati.

sudo dpkg --purge $ (COLONNE = 200 dpkg -l | grep "linux-image-extra" | grep "^ rc" | tr -s '' | cut -d '' -f 2)

Aggiorna /etc/apt/apt.conf.d/01autoremove-kernels eseguendo ...

sudo /etc/kernel/postinst.d/apt-auto-removal

Spero che apt autoreveve funzioni.

sudo apt autoremove --purge

Altrimenti dovresti essere in grado di rimuovere manualmente kernel molto vecchi e inutilizzati da / boot.

Per prima cosa scopri quale kernel stai eseguendo.

uname -r

Non rimuovere il kernel corrente o il kernel precedente.

sudo rm /boot/initrd.img-V.XX.Y-ZZ-generic

Ora dovresti avere abbastanza spazio per provare di nuovo l'autoremove apt. In caso contrario, rimuovere un altro kernel molto vecchio. Naturalmente, mantieniti aggiornato e il prossimo più vecchio.


-2

Spero che questo possa aiutare:

di solito elimino i vecchi kernel usando Ubuntu-Tweak bidello, una bella interfaccia grafica e facile :)

fai clic su "sistema" e ci sarà un elenco di vecchi kernel, basta fare clic e pulire


1
è un server Ubuntu e io sono collegato tramite stucco. (Ma ho anche la disponibilità di Webmin sul server)
— Marcel

Come posso installare questo bidello ubuntu-tweak, per favore?
— Jenny O'Reilly,
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.