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.