Domanda Come posso liberare più spazio in / boot?


Mio /boot la partizione è quasi piena e ricevo un avviso ogni volta che riavvio il sistema. Ho già cancellato i vecchi pacchetti del kernel (linux-headers ...), in realtà l'ho fatto per installare una nuova versione del kernel fornita con gli aggiornamenti automatici.

Dopo aver installato la nuova versione, la partizione è quasi piena di nuovo. Quindi cos'altro posso cancellare? Ci sono altri file associati alle vecchie immagini del kernel?

Ecco una lista di file che sono sul mio /boot partizione:

:~$ ls /boot/
abi-2.6.31-21-generic         lost+found
abi-2.6.32-25-generic         memtest86+.bin
abi-2.6.38-10-generic         memtest86+_multiboot.bin
abi-2.6.38-11-generic         System.map-2.6.31-21-generic
abi-2.6.38-12-generic         System.map-2.6.32-25-generic
abi-2.6.38-8-generic          System.map-2.6.38-10-generic
abi-3.0.0-12-generic          System.map-2.6.38-11-generic
abi-3.0.0-13-generic          System.map-2.6.38-12-generic
abi-3.0.0-14-generic          System.map-2.6.38-8-generic
boot                          System.map-3.0.0-12-generic
config-2.6.31-21-generic      System.map-3.0.0-13-generic
config-2.6.32-25-generic      System.map-3.0.0-14-generic
config-2.6.38-10-generic      vmcoreinfo-2.6.31-21-generic
config-2.6.38-11-generic      vmcoreinfo-2.6.32-25-generic
config-2.6.38-12-generic      vmcoreinfo-2.6.38-10-generic
config-2.6.38-8-generic       vmcoreinfo-2.6.38-11-generic
config-3.0.0-12-generic       vmcoreinfo-2.6.38-12-generic
config-3.0.0-13-generic       vmcoreinfo-2.6.38-8-generic
config-3.0.0-14-generic       vmcoreinfo-3.0.0-12-generic
extlinux                      vmcoreinfo-3.0.0-13-generic
grub                          vmcoreinfo-3.0.0-14-generic
initrd.img-2.6.31-21-generic  vmlinuz-2.6.31-21-generic
initrd.img-2.6.32-25-generic  vmlinuz-2.6.32-25-generic
initrd.img-2.6.38-10-generic  vmlinuz-2.6.38-10-generic
initrd.img-2.6.38-11-generic  vmlinuz-2.6.38-11-generic
initrd.img-2.6.38-12-generic  vmlinuz-2.6.38-12-generic
initrd.img-2.6.38-8-generic   vmlinuz-2.6.38-8-generic
initrd.img-3.0.0-12-generic   vmlinuz-3.0.0-12-generic
initrd.img-3.0.0-13-generic   vmlinuz-3.0.0-13-generic
initrd.img-3.0.0-14-generic   vmlinuz-3.0.0-14-generic

Attualmente sto usando il 3.0.0-14-generic kernel.


524
2017-12-22 10:06


origine


Vale la pena ricordare che non tutte le installazioni di Ubuntu avranno una partizione separata / di avvio - spesso sarà tutta una sola grande partizione. Questa risposta si applica a coloro che dispongono di una partizione separata / di avvio. Coloro che utilizzano la crittografia LVM o "full disk" necessitano di un / boot separato, altrimenti potrebbe essere opzionale. - thomasrutter
Se qualcun altro ha lo stesso problema di me: dopo / boot non ha più spazio "apt-get upgrade" fallirà quando si rigenerano i file initrd per i kernel che sono installati o che lo script update-initramfs crede siano installati esaminando il contenuto di / var / lib / initramfs-tools. In questa situazione non è possibile rimuovere i vecchi kernel usando apt-get perché la partizione fscking / boot non ha spazio sul dispositivo. Si può fare ciò usando "dpkg -P" seguito da ripulire la voce corrispondente in / boot (su spazio libero) e / var / lib / initramfs-tools (l'immagine initrd non verrà generata). - wojci
Un punto chiave per le risposte corrette è che ti dicono di rimuovere il Pacchetti contenente le versioni precedenti del kernel. Molte pagine Web che risolvono questo problema consigliano di rimuovere direttamente il file File nella partizione / boot; potrebbe funzionare per un po ', ma alla fine si può aggiornare un pacchetto che ricrea i file mancanti per le versioni del kernel che contengono pacchetti, quindi si esegue lo spazio. - kgrittn
help.ubuntu.com/community/RemoveOldKernels - jarno


risposte:


Hai molto kernel inutilizzati. Rimuovi tutti gli ultimi kernel tranne:

sudo apt-get purge linux-image-{3.0.0-12,2.6.3{1-21,2-25,8-{1[012],8}}}

Questa è una scorciatoia per:

sudo apt-get purge linux-image-3.0.0-12 linux-image-2.6.31-21 linux-image-2.6.32-25 linux-image-2.6.38-10 linux-image-2.6.38-11 linux-image-2.6.38-12 linux-image-2.6.38-8

Rimozione del linux-image-x.x.x-x anche il pacchetto verrà rimosso linux-image-x.x.x-x-generic.

Le intestazioni sono installate in /usr/src e sono usati quando si costruiscono moduli del kernel out-tree (come il driver nvidia proprietario e la virtualbox). La maggior parte degli utenti dovrebbe rimuovere questi pacchetti di intestazione se il pacchetto del kernel corrispondente (linux-image-*) non è installato.

Per elencare tutti i kernel installati, eseguire:

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

Un comando per mostrare tutti i kernel e le intestazioni che possono essere rimossi, escluso il attuale kernel in esecuzione:

kernelver=$(uname -r | sed -r 's/-[a-z]+//')
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve $kernelver

Seleziona tutti i pacchetti che iniziano con linux-headers-<some number> o linux-image-<some number>, stampa i nomi dei pacchetti per i pacchetti installati e quindi esclude il kernel caricato / in esecuzione corrente (non necessariamente il più recente kernel!). Ciò si adatta alla raccomandazione di testare un kernel più recente prima di rimuovere i kernel più vecchi e conosciuti.

Quindi, dopo aver aggiornato i kernel e riavviato il sistema per testarlo, puoi rimuovere tutti gli altri kernel con:

sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")

600
2017-12-24 14:34



Risposta fantastica Un'ulteriore informazione potrebbe aiutare: come puoi dire (di sicuro) quale dei kernel stai usando? Presumibilmente non puoi semplicemente supporre che sia l'ultimo ... modificare: Ed esso sembra come la risposta è uname -a. Probabilmente è meglio assicurarsi che non sia in sospeso (come ho fatto io) un nuovo riavvio per installare il nuovo kernel, ma ho notato la discrepanza tra uname -a e il "più recente" kernel). - T.J. Crowder
@freddyb Fatto. Si noti che i comandi stampano / rimuovono kernel diversi da quelli caricati / avviati. - Lekensteyn
Se apt-get purge fallisce a causa di dipendenze non soddisfatte, puoi seguire il consiglio a askubuntu.com/questions/171209/... - svandragt
Risposta molto approfondita e funziona ancora ... e ancora necessaria nel 2014. È ridicolo che non sia ancora eseguito automaticamente dagli strumenti della GUI. - allprog
@ byf-ferdy Il kernel è una parte essenziale del sistema operativo, se la versione più recente in qualche modo non funziona completamente con il tuo hardware, puoi comunque selezionarne uno diverso da cui partire. Una bella funzionalità potrebbe probabilmente essere qualcosa che rimuove tutti i kernel installati automaticamente più vecchi di un mese (tranne che per gli ultimi due). - Lekensteyn


La partizione di avvio è piena. Poiché si tratta di un aggiornamento del kernel, questi file verranno copiati nella partizione di avvio, quindi è necessario eseguire la pulizia. Ecco un post sul blog che ti mostrerà come cancellare le vecchie immagini del kernel con un comando. Darò una sinossi di base del metodo. Usa questo comando per stampare la versione corrente del tuo kernel:

uname -r

Quindi usa questo comando per stampare tutti i kernel che hai installato che non sono il tuo nuovo kernel:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Assicurati che il tuo kernel attuale non sia in quella lista. Nota come questa è la maggioranza del comando finale (in basso). Per disinstallare ed eliminare questi vecchi kernel, sarà necessario reindirizzare questi argomenti a:

sudo apt-get -y purge

Ora possiamo fare tutto ciò che vogliamo combinando questi ultimi due comandi in questo pasticcio disonesto:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

E quell'unico comando si prenderà cura di tutto per te. Confermerò che funziona perfettamente, ma non mi fido mai di nessuno su internet. :) Per maggiori informazioni, il post sul blog fornisce una spiegazione molto buona di ciò che ciascuna parte del comando fa, quindi la leggete in modo da essere sicuri che faccia ciò che volete che faccia.


200
2018-02-21 03:38



Questo ha funzionato alla grande, grazie. - Michael Durrant
questo corrisponde anche a linux-libc-dev: amd64 - Frederick Nord
quale sarà la causa della rimozione involontaria di "linux-libc-dev: amd64"? - ConfusedStack
@FrederickNord grazie per l'heads up. Risolto questo. Avrebbe creato delle difficoltà nella compilazione dei programmi c. - dward
Il comando suona bene, ma quando lo eseguo ottengo lo stesso errore che ottengo quando voglio installare qualcosa e non può farlo perché boot è pieno: --------------- ----------- I seguenti pacchetti hanno dipendenze non soddisfatte: linux-image-extra-4.2.0-27-generic: dipende: linux-image-4.2.0-27-generic ma non sta andando da installare linux-image-extra-4.2.0-30-generic: dipende: linux-image-4.2.0-30-generic ma non verrà installato - Alex


sudo apt-get autoremove

Questo comando sta eseguendo il lavoro automaticamente.


94
2017-11-05 05:58



Come suggerisce il nome, apt-get AUTOremove è un'operazione automatizzata in cui il sistema prende la sua "ipotesi migliore" su ciò che stai cercando di ottenere. Non dovrebbe essere usato come sostituto per l'amministrazione del sistema di senso comune. Il problema con questo approccio: se tu (o un aggiornamento) rimuovi un pacchetto che fa parte di questo elenco di dipendenze, la funzione di rimozione automatica vuole rimuovere tutti gli altri pacchetti nell'elenco delle dipendenze, lasciandoti con un sistema senza desktop funzionante (e talvolta anche con un sistema completamente rotto). - Rinzwind
Riferimento: 1 di molte fonti per questo commento sopra: linuxquestions.org/questions/debian-26/... - Rinzwind
se linux-image-generic è installato e i nuovi kernel non sono stati installati esplicitamente, questo rimuoverà i vecchi kernel. Il buon senso è di non accettare alcuna modifica al sistema senza prima leggerli. Se è stato usato il buon senso prima di usare questo comando, non ci saranno problemi. - mchid
@Rinzwind - Questo comando ha svuotato 250 mb del mio spazio su disco rimuovendo le vecchie "intestazioni di linux" - Chinmaya B
autoremove funziona se usato prima esiste una condizione di spazio esaurito. Tuttavia, una volta che apt esaurisce lo spazio e si interrompe (e l'utente finalmente nota il problema), è troppo tardi per eseguire autremove o qualsiasi altra soluzione basata su apt. Se è il tuo caso, prova una delle soluzioni basate su dpkg. - user535733


Synaptic Package Manager può essere utilizzato per selezionare e rimuovere facilmente le vecchie immagini del kernel. Screenshot of Synaptic Package Manager

Se non hai già installato Synaptic:

sudo apt-get install synaptic

Avvia l'applicazione e seleziona le opzioni mostrate.

Dovresti essere in grado di evidenziare tutti i pacchetti "linux-" con la versione "2.6.x" dove x è tra 31 e 38 secondo i file nella tua cartella / boot.

Fai clic con il tasto destro su ciascuno di questi pacchetti linux e scegli l'opzione "Segna per rimozione completa". Infine fai clic sul pulsante Applica. Questo rimuoverà tutti i file e tutti i file associati. Il tuo /boot la cartella dovrebbe essere un po 'più ordinata.


38
2017-12-24 14:34



Sono il 14.04. Ho gestito questa situazione in passato tramite la riga di comando, ma ho deciso di provare questo metodo oggi ... per me, le mie immagini linux si trovavano sotto installato (manuale), non installato (locale o obsoleto) - Ryan
Oh no Non riesco a installare Synaptic perché non c'è spazio /boot! - John McGehee
@JohnMcGehee fsck e parted dovrebbero risolvere il problema per te. - FlipMcF


Grazie per il tuo post dettagliato del tuo problema, questo mi ha fatto andare nella giusta direzione. Sebbene sia utile mantenere i precedenti file del kernel, puoi rimuoverli tutti in una volta sola, controlla questo post:
Come rimuovere tutte le intestazioni, immagini e moduli del kernel Linux inutilizzati

Fatto via linea di comando. Se stai facendo questo tramite l'uso remoto qualcosa come WINSCP per aprire una sessione terminale e semplicemente incollarlo, funziona molto bene.

Qui è copiato dal link dell'articolo, suggerisco di leggere l'intero articolo:

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

24
2018-06-01 12:53





Questa è una nuova risposta a una vecchia domanda, ma un modo semplice per pulire questa cosa (e altro) è installare Ubuntu Tweak. A installalo:

sudo add-apt-repository ppa:tualatrix/ppa
sudo apt-get update
sudo apt-get install ubuntu-tweak

quindi puoi eseguire Ubuntu Tweak, andando alla scheda "bidello", e da qui è questione di tre clic:

Ubuntu tweak janitor for old kernels

Tuttavia, è meglio lasciare l'ultimo kernel (non si sa mai) o un kernel funzionante noto per sicurezza; ma questo è facilmente personalizzabile.

Puoi utilizzare lo stesso strumento per pulire un sacco di cose --- ricorda che se pulisci la cache delle miniature o della TB, il sistema dovrà ricostruirle se necessario.


22
2017-11-25 13:11



Ho provato ad installare Ubuntu tweak e anche a visitare il sito web del repository. Dice che è solo per 13.10 e prima. Hai una versione aggiornata per 15.04? - JayCouture.com
@ JayCouture.com La versione nel sito è per 14.04 (il "per 13.10 e prima" è un collegamento alle versioni precedenti). Ignoro se esiste una versione per 14.10 o 15.04. - Rmano


Sono stato in grado di risolvere il problema utilizzando dpkg rimuovere i pacchetti direttamente. Sebbene i pacchetti siano ancora elencati in dpkg -l, i file vengono rimossi da /boot, liberando spazio.

phrogz@planar:/boot$ sudo dpkg --remove linux-image-2.6.32-30-server
(Reading database ... 145199 files and directories currently installed.)
Removing linux-image-2.6.32-30-server ...
Running postrm hook script /usr/sbin/update-grub.
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-35-server
Found linux image: /boot/vmlinuz-2.6.32-34-server
Found initrd image: /boot/initrd.img-2.6.32-34-server
Found linux image: /boot/vmlinuz-2.6.32-33-server
Found initrd image: /boot/initrd.img-2.6.32-33-server
Found linux image: /boot/vmlinuz-2.6.32-32-server
Found initrd image: /boot/initrd.img-2.6.32-32-server
Found linux image: /boot/vmlinuz-2.6.32-31-server
Found initrd image: /boot/initrd.img-2.6.32-31-server
Found memtest86+ image: /memtest86+.bin
done

# Repeat for kernels -31 and -32 and -33, up to (but not including)
# the version listed by `uname -a`

Dopodichè, apt-get -f install risolto i miei problemi di dipendenza, e tutto andava bene con il mondo.

Non accetterò questa mia risposta, tuttavia, poiché ho ancora bisogno di sapere se dovrei aumentare il mio /boot dimensione o facendo qualcos'altro.


17
2017-12-03 18:47



In primo luogo, non dovresti avere una partizione / boot separata, oppure dovresti aumentare le sue dimensioni perché 100mb è troppo piccolo. - psusi
Grazie, cancello tramite: sudo dpkg --remove linux-headers-3.5.0-28* - TiloBunt
e sudo dpkg --remove linux-image-3.5.0-28* per l'immagine, controllato tramite df -h - TiloBunt


Puoi smettere di usare una partizione / boot separata, quindi non avrai uno spazio così limitato lì. Per fare ciò, smontare la partizione, quindi montarla da qualche altra parte e copiare tutti i file nella directory / boot nella partizione di root, quindi rimuovere la voce da / etc / fstab e reinstallare grub. Ad esempio (sarà necessario utilizzare la partizione corretta):

sudo -s
umount /boot
mount /dev/sda2 /mnt
cp -a /mnt/* /boot/
umount /mnt
gedit /etc/fstab
grub-install /dev/sda

È quindi possibile utilizzare gparted per eliminare la partizione precedente / di avvio ed eventualmente estendere la partizione di root per utilizzare quello spazio. Per estendere la partizione di root è necessario eseguire l'avvio da livecd e lo spazio libero deve essere immediatamente a destra. Se la partizione / boot si trova attualmente a sinistra della partizione di root, sarà necessario spostare prima la partizione di root a sinistra, quindi estenderla, ma questo può richiedere molto, molto tempo, quindi potrebbe non valere la pena guaio.


11
2017-12-22 16:38



Spostare / avviare la mia partizione principale non è una soluzione per me dato che tutto tranne / boot è crittografato. Non potresti saperlo dalla mia domanda, mi dispiace. - user6722
Questa è una buona soluzione se le soluzioni di cui sopra non funzionano a causa della mancanza di spazio sul volume di avvio o se si verifica ripetutamente il problema di "spazio insufficiente". Si prega di leggere prima perché talvolta è necessario avere una partizione / boot: (help.ubuntu.com/community/DiskSpace) - svandragt
@svandragt, non c'è praticamente nessuna ragione per cui abbia bisogno di una partizione / boot in questi giorni. L'unica cosa rimasta è se il tuo bios è rotto e non riesci a vedere l'intero disco, e qualsiasi macchina fatta nell'ultimo decennio non ha una tale limitazione. Altri casi legacy come l'uso di raid o LVM ora vengono gestiti correttamente da grub2. - psusi
Ci sono alcuni motivi per avere una partizione di avvio separata. Ma non sono sicuro che i benefici valgano l'aumento della complessità. 1. Il sistema operativo può trarre vantaggio da un avvio più veloce tramite ext2. 2. La sicurezza può essere aumentata montando / boot come RO. (rootkit, ecc.), o anche rimanere non montati su os runtime. 3. grub (1) ha (avuto) alcuni problemi con ext4 ancora. 4. Richiesto per eseguire lvm (grubv1). Anche se questo non si applica alla configurazione di Ubuntu predefinita. - David Cahill
lsblk può essere usato per determinare quale partizione è cosa - Mr Purple


Per me entrambi apt-get purge e dpkg --remove entrambi fallirono. Quindi ho dovuto eliminare un paio di vecchie immagini del kernel da / boot con rm -f.


5
2017-10-14 09:22



Questo non è un buon modo per rimuovere i pacchetti. Anche se questa risposta non è molto specifica sul perché rimuoverli nel modo corretto non sono riuscito, sono sicuro che se fossero state fornite tali informazioni (in una domanda separata ovviamente) saremmo stati in grado di cercare di capire la causa del problema. - thomasrutter
Credo che sia fallito, perché /boot la partizione era piena. Questi comandi provano prima ad aggiornare il kernel a recenti e crash con No space left on device durante la generazione initrd.img - vp_arth
ATTENZIONE, la rimozione diretta dei file può portare a problemi, in quanto un aggiornamento del pacchetto linux-firmware può ricreare il file initrd.img per ogni versione che pensa sia installata in base alle informazioni del pacchetto. Vedere: askubuntu.com/questions/865577/... - kgrittn
grazie, questa è la soluzione finale salva-vita quando nient'altro funziona. - Jeff Puckett


Prendendo il meglio dalle risposte sopra, il mio approccio provato e vero è questo:

  • uname -aper trovare il kernel in esecuzione.
  • dpkg -l linux-{headers,image}-\* | grep ^ii per elencare tutti i pacchetti relativi al kernel attualmente installati. Ciò includerà il kernel in esecuzione.
  • sudo apt-get purge linux-{image,headers}-3.16.0-{xx,yy,zz} rimuovere i vecchi kernel. Sostituire xx,yy,zz con un elenco delle build del kernel che si desidera rimuovere: si tratta di tutte le build elencate dal comando precedente che sono più vecchie del kernel attualmente in esecuzione. Assicurati di non rimuovere il kernel attualmente in esecuzione, il tuo sistema diventerà non avviabile. Potrebbe anche essere necessario cambiare la versione del kernel da 3.16.0 a qualunque cosa sia installata sul tuo sistema.
  • Facoltativamente, fai un altro sudo apt-get autoremove- rimuoverà tutte le dipendenze rimanenti dei vecchi kernel che non sono più necessarie per quella corrente, liberando un po 'più di spazio.

Potresti avere i file di intestazione senza aver installato le versioni del kernel corrispondenti, o viceversa, solo includere tutte queste versioni nel comando. APT si lamenterà che alcuni pacchetti non possono essere rimossi perché non sono installati, ma ciò non danneggerà.

Se qualcosa non funziona ...

  • Se il comando apt fallisce a causa di a nessuno spazio lasciato sul dispositivo errore, utilizzare invece il comando dpkg corrispondente: sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}.
  • Se il comando dpkg continua a non funzionare perché il linux-image i pacchetti sono richiesti da linux-headers pacchetti della stessa versione (che si desidera disinstallare), dpkg potrebbe non riuscire a risolverlo. Riesaminare l'output di dpkg -l e specificare i suffissi del nome del pacchetto sulla riga di comando. Ad esempio, su uno dei miei sistemi il comando che alla fine ha funzionato è stato sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}-generic-pae.
  • Se riscontri altri errori, cerca aiuto: potresti avere un problema diverso da quello che pensavi.

4
2017-07-09 20:24



@ user535733 il solito caso (almeno quello in cui continuo a correre) è che c'è ancora alcuni spazio su /boot, non abbastanza per un altro pacchetto del kernel. In questi casi, quanto sopra ha funzionato bene. Sentiti libero, però, di aggiungere il corrispondente dpkg comando. Quanto a purge, no, non è un tipo di "rimozione forzata". Che cosa fa, a differenza di remove, è che cancella anche i file di configurazione. Poiché / fintanto che i pacchetti del kernel non installano file di configurazione, remove e purge farà lo stesso per i pacchetti del kernel. - user149408
Aggiunto quarto punto elenco con il comando dpkg corrispondente. - user535733