Domanda La mia partizione / boot ha raggiunto il 100% e ora non posso eseguire l'aggiornamento. Impossibile rimuovere i vecchi kernel per creare spazio


Il mio primo problema è stato quando ho provato a farlo apt-get update o apt-get upgrade. Durante l'aggiornamento ottengo il seguente errore:

You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
linux-image-server : Depends: linux-image-3.2.0-27-generic but it is not installed
E: Unmet dependencies. Try using -f.

Ho provato a eseguire apt-get install -f e questo è stato l'output (dopo aver detto sì al prompt)

(Reading database ... 186183 files and directories currently installed.)
Unpacking linux-image-3.2.0-27-generic (from .../linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb) ...
Done.
dpkg: error processing /var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb (--unpack):
 failed in write on buffer copy for backend dpkg-deb during `./boot/System.map-3.2.0-27-generic': No space left on device
 No apport report written because the error message indicates a disk full error
                                                                          dpkg-deb:    error: subprocess paste was killed by signal (Broken pipe)
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-27-generic   /boot/vmlinuz-3.2.0-27-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-27-generic /boot/vmlinuz-3.2.0-27-generic
Errors were encountered while processing:
/var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Ho provato a correre apt-get autoremove e mi dà lo stesso errore di apt-get upgrade.

Quando corro df, Ho capito /boot:

/dev/sda1                    233191     230297         0 100% /boot

Quindi, ho letto altrove che dovrei provare a eliminare i vecchi kernel. Ho controllato per quali kernel ho avuto:

$ dpkg -l linux-image-\* | grep ^ii
ii  linux-image-2.6.38-13-server  2.6.38-13.52  Linux kernel image for version 2.6.38 on x86_64
ii  linux-image-3.0.0-13-server   3.0.0-13.22   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-14-server   3.0.0-14.23   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-15-server   3.0.0-15.26   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-16-server   3.0.0-16.29   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-17-server   3.0.0-17.30   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.2.0-24-generic  3.2.0-24.39   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-25-generic  3.2.0-25.40   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-26-generic  3.2.0-26.41   Linux kernel image for version 3.2.0  on 64 bit x86 SMP

Quando provo a rimuovere il più vecchio con questo:

$ sudo apt-get purge linux-image-2.6.38-13-server
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-image-server : Depends: linux-image-3.2.0-27-generic but it is not going to be     installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Come posso liberare o estendere l'avvio senza rovinare la mia installazione?


138
2017-08-02 15:17


origine


Penso che la risposta di @mreiter potrebbe essere la migliore: usa il gestore di pacchetti e ha funzionato quando altri comandi di gestione pacchetti hanno avuto esito negativo, almeno per me: askubuntu.com/a/205776/247661 - Aaron Hall
Ho realizzato una sceneggiatura che fa il lavoro. Lo pubblicherò dopo che il mio obiettivo di bontà è stato raggiunto: bountysource.com/issues/... - jarno
help.ubuntu.com/community/RemoveOldKernels - dskrvk
@dskrvk Sì! Perché è Remove-Unused-Dependencies non il predefinito? - Steven R. Loomis


risposte:


Liberare spazio sul file system principale

Per liberare spazio sul file system di root, provare a eseguire apt-get clean.

Se non funziona, puoi andare a /var/cache/apt/archives e rimuovere manualmente alcuni file dalla cache per recuperare spazio, ad esempio:

sudo rm linux-headers-*

Non farà male rimuovere tutto il .deb file qui se ne hai bisogno - ecco cosa apt-get clean lo fa. Saranno automaticamente scaricati di nuovo da apt se sono necessari di nuovo.

Liberare spazio sul file system / boot

Il poster originale ha un separato /boot partizione, e questo è ciò che è pieno e prevenire il apt sistema dal lavoro. Sarà necessario per lui liberare spazio lì.

Se c'è abbastanza spazio, vai a /boot e rimuovere un file di configurazione o due:

sudo rm config-3.2.0-19-generic-pae

per esempio, ma usando il nome di una delle versioni del kernel che intendi rimuovere comunque. Ciò libererà un piccolo spazio (circa 144K ciascuno).

Se hai bisogno di più spazio individualmente rimuovi vecchio vmlinuz, initrd, abi e System.map file finché non si dispone di spazio sufficiente (circa 22 milioni per una delle versioni del kernel i386).

Qualunque cosa tu faccia, non rimuoverli tutti. Dovresti almeno conservare le ultime due versioni corrispondenti di ogni tipo di file, per ogni tipo di kernel che usi.

Quindi procedere con i comandi apt-get install. Come menzionato sopra, potrebbe essere necessario scaricare nuovamente alcuni dei messaggi di debito che hai eliminato, ma in tal caso ciò avverrà automaticamente. Quando hai di nuovo funzionante, ripulisci utilizzando apt-get per rimuovere i pacchetti corrispondenti ai file che hai rimosso, quindi tutto corrisponde.


Il file di configurazione in /boot è la configurazione del kernel che era usato dal team del kernel a costruire il kernel con lo stesso nome Dovrebbe essere innocuo da rimuovere a meno che tu non lo desideri per riferimento o per aiutarti a costruire i tuoi kernel.

Finalmente stai rimuovendo manualmente un vecchio pacchetto del kernel o due dal /boot partizione per rendere ancora più spazio a quello nuovo.


116
2017-08-02 15:54



Ho provato a rimuovere quasi tutte le configurazioni. Ancora non sembra avere abbastanza spazio. Quali altri file in là sarebbero sicuri da rimuovere? Il mio file system di root non è affatto pieno, quindi non sono preoccupato. - Strifey16
Ho aggiornato la mia risposta con gli ulteriori file da rimuovere a mano. Mi sembra che rimuovere i set 3.0.0.13 e 3.0.0.14 (cinque file sul set incluso il file abi) sia sufficiente. - John S Gruber
Questo l'ha risolto. Mi sono reso conto che probabilmente si sarebbe trattato di rimuovere i file manualmente, ma sono sempre riluttante a farlo con qualsiasi cosa installata da apt, quindi ho pensato di chiederlo prima. - Strifey16
Non usare sudo rm rimuovere da / boot. Invece, usa sudo dpkg --purge rimuovere alcuni vecchi pacchetti linux-image. Successivamente utilizzare sudo apt-get -f install per riparare la dipendenza interrotta. - jarno
Anche se qualche volta il sistema potrebbe essere così pieno che nemmeno dpkg non può funzionare. Ma rm può essere usato allora. - jarno


Nel mio caso, il apt comandi e dpkg comando non poteva finire, e non poteva rimuovere. L'aggiornamento automatico non è riuscito nell'installazione 2.6.32-56-server.

Il mio primo passo è stato identificare lo spazio da utilizzare,

cd /boot
du -sk *|sort -n

Avevo circa 30 kernel e file di supporto.

Ho fatto un uname -a per ottenere il kernel in esecuzione, Ho identificato che ero su Linux alternativo 2.6.32-43-servere ha fatto a tar di 6 delle versioni che non erano in esecuzione, ed erano vecchie.

tar -cvf ~username/boot.tar *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

Allora ho fatto un rm -rf di ciò che ho sostenuto:

rm -rf *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

Sto mostrando questi comandi come esempi, dovrai decidere con che cosa lavorerai per la tua situazione.

Ora che avevo un po 'di spazio /boot, Sono stato in grado di correre

apt-get -f install 

Per pulire l'installazione non riuscita di 2.6.32-56-server.

Allora ho fatto un

apt-get remove linux-headers-2.6.32-38 linux-headers-2.6.32-38-server linux-image-2.6.32-38-server
apt-get remove linux-headers-2.6.32-39 linux-headers-2.6.32-39-server linux-image-2.6.32-39-server

Questo mi ha dato lo spazio per rimettere a posto ciò che avevo sostenuto.

tar -xf ~username/boot.tar
rm  ~username/boot.tar    

Per ripulire, ho quindi potuto eseguire:

apt-get autoremove

Ho riavviato e ora sto giù per utilizzare il 4% di /boot.


60
2018-02-20 16:48



Questo è stato il più utile per me tra tutti i suggerimenti. Grazie mille! - Joshua F. Rountree
rimuovere i file da / boot interrompe orribilmente apt e dpkg dato che gli script di installazione e rimozione falliscono HARD quando mancano i file. Non vedo come hai funzionato. - FizxMike


Puoi usare dpkg invece di apt-get rimuovere i kernel più vecchi:

sudo dpkg -r linux-image-3.2.0-29-generic

19
2018-04-08 14:38



Forse ci sono dei lati positivi per l'utilizzo di questo, ma il suggerimento di @ mreiter ha funzionato per me quando questo non lo ha fatto (questo è stato suggerito sul canale di supporto IRC di ubuntu). - Aaron Hall
@AaronHall Questa risposta contiene semplicemente la parte fondamentale di risposta di mreiter (l'ultima riga) ed è molto più breve in quanto non copre la pulizia delle intestazioni (che non aiuta nel caso di /boot partizione). - Melebius


Ho notato che c'erano ancora alcuni file delle vecchie versioni nella directory di avvio:

$ ls /boot
vmcoreinfo-2.6.31-17-server

E il gestore dei pacchetti avrebbe elencato le vecchie versioni:

dpkg -l | grep linux-image

Ho quindi usato questo comando (autoremove rimuoverò anche le immagini più recenti che non voglio rimuovere)

sudo apt-get purge linux-image-2.6.31-17-server

Avevo ancora alcune intestazioni a sinistra:

dpkg -l | grep linux-headers

Così ho fatto questo:

sudo apt-get purge linux-headers-2.6.32-34

Finalmente c'era un pacchetto che non potevo rimuovere con apt-get purga:

$ dpkg -l | grep linux-image
rc  linux-image-2.6.28-11-server

Fonte: Rimuovi un pacchetto contrassegnato come rc da dpkg

sudo dpkg --purge linux-image-2.6.28-11-server

9
2017-10-24 13:56





Questo è quello che ho usato:

sudo apt-get autoremove linux-image-xxxx

Fallo per tutti i vecchi kernel e mantieni solo i due più recenti.

Se si desidera rimuovere automaticamente i vecchi kernel e aggiornare GRUB guarda questo: Documentazione di Ubuntu


2
2017-11-22 17:33



Questa dovrebbe essere la risposta accettata. Se non ti dispiace ripulire tutto, non hai nemmeno bisogno di specificare l'immagine di Linux. - CyberEd


Non puoi agire sui pacchetti, ma tu può agire su altri file. Per prima cosa, passa attraverso la tua cartella Home e vedi se c'è nulla puoi cancellare. In caso contrario, provare a spostare una buona quantità di file in un'altra partizione (o un'unità flash) e quindi provare sudo apt-get install -f per pulire i problemi di dipendenza del pacchetto (molto probabilmente hai installato un file .deb attraverso dpkg), quindi eliminare eventuali vecchi kernel. Una volta che hai almeno 10 MB di sicurezza, prova a eliminare il software o i file non necessari.


2
2017-08-02 15:20



La cartella principale non è in / boot - Thorbjørn Ravn Andersen


Utilizzare Synaptic Package Manager. Scegli il pacchetto che desideri rimuovere e ti chiederà di rimuovere anche i pacchetti che dipendono da esso. Nella mia esperienza, i pacchetti del kernel arrivano sempre in gruppi di due (o più, a seconda di come contate) che sono interdipendenti. Di solito puoi trovare rapidamente quelli vecchi usando il filtro "locale / obsoleto".


1
2017-08-03 02:39



Per esempio. su un server (solo testo), non c'è Synaptic. Quindi non è davvero una soluzione valida per i server. - nerdoc