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

136

Il mio primo problema è stato quando ho provato a 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 era 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 eseguire apt-get autoremove e mi dà lo stesso errore di apt-get upgrade .

Quando eseguo df , ottengo ciò per /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?

    
posta Strifey16 02.08.2012 - 17:17

11 risposte

113

Liberare spazio sul file system di root

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

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

sudo rm linux-headers-*

Non è male rimuovere qui tutti i file .deb se è necessario - questo è ciò che apt-get clean fa. Verranno automaticamente scaricati di nuovo da apt se saranno nuovamente necessari.

Liberare spazio sul file system / boot

Il Poster originale ha una partizione /boot separata, ovvero quella piena e impedisce il funzionamento del sistema apt . Sarà necessario per lui liberare spazio lì.

Se c'è abbastanza spazio, vai su /boot e rimuovi 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 po 'di spazio (circa 144K ciascuno).

Se hai bisogno di più spazio individualmente, rimuovi i vecchi file vmlinuz , initrd , abi e System.map finché non hai spazio sufficiente (circa 22M per una delle mie 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 procedi con i tuoi 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 è stato usato dal team del kernel per compilare il kernel con lo stesso nome. Dovrebbe essere innocuo da rimuovere a meno che tu non lo voglia per riferimento o per aiutarti a costruire i tuoi kernel.

Finalmente stai rimuovendo manualmente un vecchio pacchetto del kernel o due dalla partizione /boot per creare ancora più spazio per il nuovo.

    
risposta data John S Gruber 02.08.2012 - 17:54
60

Nel mio caso, i comandi apt e dpkg non potevano finire e non potevano essere rimossi. L'aggiornamento automatico non è riuscito a installare 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 alternate 2.6.32-43-server e ho fatto un 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

Ho quindi fatto un rm -rf di ciò che ho eseguito il backup:

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 per che cosa lavorerai per la tua situazione.

Ora che avevo uno spazio su /boot , ero in grado di eseguire

apt-get -f install 

Per ripulire l'installazione fallita di 2.6.32-56-server .

Ho quindi 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 eseguito il backup.

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

Per ripulire, posso quindi eseguire:

apt-get autoremove

Ho riavviato e ora utilizzo il 4% di /boot .

    
risposta data A.G. Russell 20.02.2014 - 17:48
19

Puoi utilizzare dpkg anziché apt-get per rimuovere i kernel meno recenti:

sudo dpkg -r linux-image-3.2.0-29-generic
    
risposta data psusi 08.04.2014 - 16:38
9

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 di 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 purge:

$ 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
    
risposta data mreiter 24.10.2012 - 15:56
2

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 vuoi rimuovere automaticamente i vecchi kernel e aggiornare GRUB vedi questo: Documentazione di Ubuntu

    
risposta data Samer 22.11.2015 - 18:33
2

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

    
risposta data hexafraction 02.08.2012 - 17:20
1

Utilizza 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 utilizzando il filtro "local / obsoleto".

    
risposta data Wegko 03.08.2012 - 04:39
1

Semplicemente l'esecuzione di sudo apt-get -f autoremove ha risolto il mio problema.

    
risposta data forzagreen 26.04.2018 - 10:26
1

Verifica l'utilizzo di /var/tmp con du -sh /var/tmp/ . Tutti i file in quella cartella possono essere cancellati per fare spazio.

È quindi possibile eseguire quanto segue per rimuovere i vecchi kernel:

sudo apt-get clean
sudo apt install byobu
sudo purge-old-kernels
sudo apt autoremove
sudo update-grub
    
risposta data Tertius 06.11.2017 - 10:29
1

Esegui:

sudo apt-get autoremove
sudo apt-get --purge remove && sudo apt-get autoclean
sudo apt-get -f install
sudo dpkg-reconfigure -a

Fonte: Ricevo questo errore dopo l'upgade. per favore aiuto

    
risposta data Ardi Nusawan 15.02.2017 - 19:41
0

Ho scoperto che l'unica cosa che funzionava per me era usare Aptitude.

sudo aptitude

Quindi quando si apre di solito dirà qualcosa sulle dipendenze non soddisfatte sul fondo. Puoi premere la lettera g per procedere con la rimozione suggerita. Ti porterà in una pagina in cui elenca ciò che accadrà.

Ci dovrebbe essere un meno - accanto ai kernel spezzati. Premi nuovamente g per rimuovere i kernel spezzati. Premi q per uscire. Quindi dovresti essere in grado di utilizzare sudo apt-get autoremove per sbarazzarti dei vecchi kernel e liberare spazio.

    
risposta data Matthew Swanson 04.04.2017 - 01:29

Leggi altre domande sui tag