Come posso liberare più spazio in / boot?


563

La mia /bootpartizione è quasi piena e ricevo un avviso ogni volta che riavvio il mio sistema. Ho già eliminato i vecchi pacchetti del kernel (linux-headers ...), in realtà l'ho fatto per installare una versione del kernel più recente fornita con gli aggiornamenti automatici.

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

Ecco un elenco di file presenti nella mia /bootpartizione:

:~$ 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-generickernel.


5
Vale la pena ricordare che non tutte le installazioni di Ubuntu avranno una partizione separata / boot - spesso sarà solo una grande partizione. Questa risposta vale per coloro che hanno una partizione separata / boot. Coloro che utilizzano la crittografia LVM o "full disk" hanno bisogno di un separato / avvio, altrimenti potrebbe essere facoltativo.
thomasrutter,

4
Se qualcun altro ha lo stesso problema: dopo / boot non rimane spazio "apt-get upgrade" fallirà quando si rigenerano i file initrd per i kernel installati o che lo script update-initramfs ritiene siano installati esaminando 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 (per liberare spazio) e / var / lib / initramfs-tools (l'immagine initrd non verrà generata).
Wojci,

3
Un punto chiave per le risposte corrette è che ti dicono di rimuovere i pacchetti contenenti le versioni precedenti del kernel. Molte pagine Web che risolvono questo problema raccomandano di rimuovere direttamente i file nella partizione / boot; potrebbe funzionare per un po ', ma alla fine potresti aggiornare un pacchetto che ricrea i file mancanti per le versioni del kernel che hanno pacchetti, esaurendo così lo spazio.
kgrittn,

Risposte:


629

Hai molti kernel inutilizzati. Rimuovi tutto tranne gli ultimi kernel con:

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

Rimuovendo anche il linux-image-x.x.x-xpacchetto verrà rimosso linux-image-x.x.x-x-generic.

Le intestazioni sono installate /usr/srce utilizzate per la creazione di moduli 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, esegui:

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

Un comando per mostrare tutti i kernel e le intestazioni che possono essere rimosse, escluso l' 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 installati e quindi esclude l' attuale kernel caricato / in esecuzione (non necessariamente l' ultimo 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 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]+//')")

16
Risposta fantastica. Un'ulteriore informazione sarebbe di aiuto: come puoi sapere (con certezza) quale dei kernel stai usando? Presumibilmente non puoi semplicemente supporre che sia l'ultimo ... Modifica : E sembra che la risposta sia uname -a. Probabilmente è meglio assicurarsi di non avere un riavvio in sospeso per installare il nuovo kernel in sospeso (come ho fatto io, ma ho notato la discrepanza tra uname -ail kernel "più recente").
TJ Crowder,

5
@freddyb Fatto. Si noti che i comandi stampa / rimuove i kernel diversi da quello caricato / avviato .
Lekensteyn,

9
Se apt-get purge non riesce a causa di dipendenze non soddisfatte, è possibile seguire i consigli su askubuntu.com/questions/171209/…
svandragt

11
Risposta molto approfondita e funziona ancora ... e ancora necessaria nel 2014. Kinda ridicola che non è ancora fatta automaticamente dagli strumenti della GUI.
allprog,

6
@ 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 una diversa da cui avviare. Una bella funzionalità sarebbe probabilmente qualcosa che rimuove tutti i kernel installati automaticamente più vecchi di un mese (tranne gli ultimi due).
Lekensteyn,

217

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

uname -r

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

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 corrente non sia in quella lista. Nota come questa è la maggior parte del comando finale (in basso). Per disinstallare ed eliminare questi vecchi kernel, è necessario reindirizzare questi argomenti a:

sudo apt-get -y purge

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

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. Confermo che questo funziona perfettamente ma non si fida mai di nessuno su Internet. :) Per ulteriori informazioni, il post sul blog fornisce un'ottima spiegazione di ciò che fa ogni parte del comando, quindi leggilo attraverso in modo da essere soddisfatto che faccia quello che vuoi che faccia.


questo corrisponde anche a linux-libc-dev: amd64
Frederick Nord,

che cosa causerà la rimozione involontaria di "linux-libc-dev: amd64"?
ConfusedStack,

@FrederickNord grazie per l'heads-up. Risolto questo Ciò avrebbe causato alcune difficoltà nella compilazione di programmi c.
dward

9
Il comando suona bene, ma quando lo eseguo ottengo lo stesso errore che ottengo quando voglio installare qualcosa e non posso farlo perché l'avvio è pieno: --------------- ----------- I seguenti pacchetti hanno dipendenze non soddisfatte: linux-image-extra-4.2.0-27-generico: dipende: linux-image-4.2.0-27-generico ma non funziona da installare linux-image-extra-4.2.0-30-generic: dipende da: linux-image-4.2.0-30-generic ma non verrà installato
Alex

109
sudo apt-get autoremove

Questo comando esegue automaticamente il lavoro.


7
Come suggerisce il nome, apt-get AUTOremove è un'operazione automatizzata in cui il sistema prende la "migliore ipotesi" su ciò che stai cercando di ottenere. Non dovrebbe essere usato come sostituto dell'amministrazione del sistema di buon senso. 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 di 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

7
se è installato linux-image-generic e non sono stati installati esplicitamente nuovi kernel, questo rimuoverà i vecchi kernel. Il buon senso è non accettare alcuna modifica al sistema senza prima leggerle. Se il buon senso è stato usato prima di usare questo comando, non ci saranno problemi.
mchid

1
@Rinzwind - Questo comando ha svuotato 250 MB del mio spazio su disco rimuovendo le vecchie "intestazioni linux"
Chinmaya B,

3
autoremove funziona se usato prima che esista una condizione di spazio esaurito. Tuttavia, una volta che apt esaurisce lo spazio e si interrompe (e l'utente nota finalmente il problema), è troppo tardi per eseguire l'autremove o qualsiasi altra soluzione basata su apt. Se questo è il tuo caso, prova una delle soluzioni basate su dpkg.
user535733

40

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

Se non hai già installato Synaptic:

sudo apt-get install synaptic

Avviare l'applicazione e selezionare le opzioni visualizzate.

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

Fare clic con il tasto destro su ciascuno di questi pacchetti Linux e scegliere l'opzione "Segna per rimozione completa". Infine fai clic sul pulsante Applica. Ciò rimuoverà tutti i file e tutti i file associati. La tua /bootcartella ora dovrebbe essere un po 'più ordinata.


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 di linux sono state installate sotto (manuale), non installato (locale o obsoleto)
Ryan

8
Oh no Non riesco a installare Synaptic perché non c'è spazio /boot!
John McGehee,

@JohnMcGehee fsck and parted dovrebbe risolvere questo problema per te.
FlipMcF

25

Grazie per il tuo post dettagliato del tuo problema, questo mi ha portato nella giusta direzione. Sebbene sia utile conservare i file del kernel precedenti, è possibile rimuoverli tutti in una volta, controllare questo post:
Come rimuovere tutte le intestazioni, le immagini e i moduli del kernel Linux non utilizzati

Fatto tramite riga di comando. Se lo stai facendo in remoto, usa qualcosa come WINSCP per aprire una sessione terminale e incollarla, funziona molto bene.

Qui è copiato dal collegamento dell'articolo, ti consiglio di leggere l'articolo completo:

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

23

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

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 si tratta di tre clic:

Ubuntu tweak bidello per vecchi kernel

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

Puoi usare lo stesso strumento per pulire molte cose --- ricorda solo che se pulisci la cache delle miniature o la cache TB, il sistema dovrà ricostruirle se sono necessarie.


Ho provato a installare Ubuntu tweak e anche andare sul sito web del repository. Dice che è solo per il 13.10 e prima. Hai una versione aggiornata per 15.04?
JayCouture.com,

@ JayCouture.com La versione del sito è per 14.04 (la "per 13.10 e precedenti" è un collegamento a versioni precedenti). Ignoro se esiste una versione per 14.10 o 15.04.
Rmano,

19

Sono stato in grado di risolvere il problema utilizzando dpkgper rimuovere direttamente i pacchetti. Sebbene i pacchetti siano ancora elencati in dpkg -l, i file vengono rimossi /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`

Dopo questo, apt-get -f installrisolto i miei problemi di dipendenza e tutto andava bene per il mondo.

Non accetterò questa mia risposta, tuttavia, poiché ho ancora bisogno di sapere se dovrei aumentare le mie /bootdimensioni o fare qualcos'altro.


Non dovresti avere una partizione separata / boot in primo luogo, o dovresti aumentarne le dimensioni poiché 100mb è troppo piccolo.
psusi il

1
Grazie, elimino tramite:sudo dpkg --remove linux-headers-3.5.0-28*
TiloBunt il

2
e sudo dpkg --remove linux-image-3.5.0-28*per l'immagine, controllato tramitedf -h
TiloBunt il

Grazie, anche questo mi è servito. Ho rimosso alcuni vecchi kernel ( non quello che stavo usando attualmente) e poi ho fatto il apt-get -f install. Inoltre, non dimenticate di fare tardi apt-get autoremove, per rimuovere eventualmente altri quelli non necessari.
Yajo

15

Puoi smettere di usare una partizione separata / boot, quindi non avrai così spazio limitato lì. Per fare ciò, smontare la partizione, quindi montarla da qualche altra parte e copiare tutti i file lì 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 old / boot ed eventualmente estendere la partizione root per utilizzare quello spazio. Per estendere la partizione di root dovrai avviare da livecd, e lo spazio libero deve essere immediatamente a destra. Se la partizione / boot è attualmente a sinistra della partizione di root, dovrai prima spostare la partizione di root a sinistra, quindi estenderla, ma ciò può richiedere molto, molto tempo, quindi potrebbe non valere la pena guaio.


6
Lo spostamento / avvio nella mia partizione principale non è una soluzione per me poiché tutto tranne / boot è crittografato. Non puoi saperlo dalla mia domanda, scusa.
user6722

Questa è una buona soluzione se le soluzioni precedenti non funzionano a causa della mancanza di spazio sul volume di avvio o se si verifica ripetutamente il problema "spazio esaurito". Per favore, leggi prima perché a volte è necessario disporre di una partizione / boot: ( help.ubuntu.com/community/DiskSpace )
svandragt

@svandragt, in pratica al giorno d'oggi non è rimasto alcun motivo per aver bisogno di una partizione / boot. L'unica cosa rimasta è se il tuo BIOS è rotto e non riesce a vedere l'intero disco e qualsiasi macchina realizzata nell'ultimo decennio non ha tale limitazione. Altri casi legacy come l'uso di raid o LVM sono ora gestiti correttamente da grub2.
psusi,

Ci sono alcuni motivi per avere una partizione di avvio separata. Ma non sono sicuro che i vantaggi valgano dalla maggiore configurazione di complessità. 1. Il sistema operativo può beneficiare di un avvio più rapido tramite ext2. 2. La sicurezza può essere aumentata montando / avviando come RO. (rootkit, ecc.) o addirittura non montati durante il runtime del sistema operativo. 3. grub (1) ha (avuto) dei problemi con ext4 ancora. 4. Richiesto per l'esecuzione di lvm (grubv1). Anche se questo non si applica alla configurazione predefinita di Ubuntu.
David Cahill,

lsblkpuò essere usato per determinare quale partizione è cosa
Mr Purple,

9

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

  • uname -a per trovare il kernel in esecuzione.
  • dpkg -l linux-{headers,image}-\* | grep ^iiper 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}per rimuovere i vecchi kernel. Sostituisci xx,yy,zzcon un elenco delle build del kernel che desideri rimuovere: queste sono 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 modificare la versione del kernel da 3.16.0qualsiasi cosa sia installata sul tuo sistema.
  • Facoltativamente, fai un ulteriore: sudo apt-get autoremovequesto rimuoverà tutte le dipendenze rimanenti dei vecchi kernel che non sono più necessarie a quello attuale, liberando un po 'più di spazio.

È possibile che siano presenti file di intestazione senza le corrispondenti versioni del kernel installate o viceversa: è sufficiente includere tutte queste versioni nel comando. APT si lamenterà che alcuni pacchetti non possono essere rimossi perché non sono installati, ma ciò non farà alcun danno.

Se qualcosa fallisce ...

  • Se il comando apt fallisce a causa di uno spazio esaurito sul dispositivo di errore, utilizzare il comando corrispondente dpkg invece: sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}.
  • Se il comando dpkg continua a non funzionare perché i linux-imagepacchetti sono richiesti dai linux-headerspacchetti della stessa versione (che si desidera anche disinstallare), dpkg potrebbe non averlo risolto. Riesaminare l'output di dpkg -le specificare eventuali suffissi del nome del pacchetto sulla riga comandi. 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 ricevi altri errori, chiedi aiuto, potresti avere un problema diverso da quello che pensavi.

@ user535733 il caso solito (almeno quello Continuo a correre in) è che c'è ancora un po 'di spazio sul /boot, ma non abbastanza per un altro pacchetto del kernel. In questi casi, quanto sopra ha funzionato bene. Sentiti libero, tuttavia, di aggiungere il dpkgcomando corrispondente . Per quanto riguarda purge, no, non è una sorta di "rimozione forzata". Ciò che fa, diversamente da remove, è che elimina anche i file di configurazione. Poiché / fintanto che i pacchetti del kernel non installano file di configurazione removee purgefaranno lo stesso per i pacchetti del kernel.
user149408

Aggiunto quarto proiettile con il comando dpkg corrispondente.
user535733

4

Per me entrambi apt-get purgee dpkg --removeentrambi hanno fallito. Quindi ho dovuto eliminare un paio di vecchie immagini del kernel da / boot con rm -f.


4
Questo non è un buon modo per rimuovere i pacchetti. Sebbene questa risposta non sia molto specifica sul perché rimuoverli nel modo corretto non sia riuscito, sono sicuro che se tali informazioni fossero fornite (in una domanda separata ovviamente) saremmo in grado di provare a capire la causa del problema.
thomasrutter,

2
Credo che sia fallito, perché la /bootpartizione era piena. Questo comando tenta innanzitutto di aggiornare il kernel a recente e di No space left on deviceinitrd.img
bloccarlo

1
ATTENZIONE, la rimozione diretta dei file può causare problemi, in quanto un aggiornamento del pacchetto firmware linux può ricreare il file initrd.img per ogni versione che ritiene sia installata in base alle informazioni sul pacchetto. Vedi: askubuntu.com/questions/865577/…
kgrittn il

1
grazie, questa è la soluzione definitiva salvavita quando nient'altro funziona.
Jeff Puckett,

4

Elenca tutti i kernel:

dpkg --list 'linux-image*'

Mostra il kernel corrente:

uname -r

Elenca tutti i kernel TRANNE quello corrente:

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 corrente non sia in quella lista.

Rimuovi tutti i kernel TRANNE quello corrente:

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

Cancella altre cose:

sudo apt-get autoremove

Se ti dà ancora errore di spazio su disco di avvio per l'installazione / disinstallazione di file, rimuovi direttamente un'immagine OLD dalla directory / boot,

ls -lh /boot/*-3.13.0-119*;

rm /boot/*-3.13.0-119*; 

NOTA: rivedere nuovamente l'immagine del kernel corrente prima di eliminare qualsiasi immagine.


2

Ho già cancellato i vecchi pacchetti del kernel (linux-headers ...)

linux-headers-*non sono kernel. I pacchetti del kernel sono quelli indicati linux-image-*. Quelli nominati linux-headers-*sono pacchetti di sviluppo per la compilazione di moduli del kernel: non vivono nella directory / boot e non sono richiesti per l'uso quotidiano del sistema.

I file che hai elencato in / boot fanno includere diverse immagini del kernel vecchi ( vmlinuz*) e le immagini initrd compilati ( initrd.img*) per quelle kernel, che è un'indicazione che avete ancora un sacco di vecchi pacchetti del kernel installati.

Dovresti essere in grado di elencare i tuoi kernel installati con

aptitude search ~ilinux-image

(Nota che questo probabilmente restituirà pacchetti che non sono anche kernel).

Di solito non è necessario installare più di due kernel, quello attualmente in uso e quello precedente (come fallback). Quindi puoi iniziare a rimuovere quelli più vecchi, uno per uno, in questo modo:

sudo apt-get autoremove linux-image-3.2.0-23-generic

Assicurati di sostituire "3.2.0-23-generic" con l'attuale versione del kernel che vuoi rimuovere! Inoltre, non rimuovere pacchetti come linux-image-generic. Devi stare molto attento a non rimuovere il kernel attualmente in esecuzione o non sarai in grado di avviarlo (Ubuntu potrebbe o meno avvertirti di farlo).

Puoi trovare il tuo kernel attualmente in esecuzione con:

uname -r

1

Ho avuto questo problema e molto altro mentre ho rimosso alcuni initrd-img-xxxfile manualmente da / boot e ho avuto un problema che queste vecchie versioni continuano a generare e compilando la /bootcartella. Per risolverlo ho seguito quanto segue:

  • Ho rimosso manualmente la vecchia versione del kernel generata in modo da liberare spazio.
  • Modificherai un file di configurazione del testo come superutente, quindi incolla quanto segue in un terminale:

    sudo gedit /etc/initramfs-tools/update-initramfs.conf
    
  • Individua la linea update_initramfs=yese modificala in update_initramfs=no. Salvare ed uscire dal file, quindi eseguire:

    sudo dpkg --configure -a
    

Ciò ha risolto il mio problema. Questo si basava su questo blog

Si spera che al riavvio tutto vada bene e in seguito puoi provare a cambiare il noback yesin update-initramfs.conf.


1

Mostro che ancora nel 2017 questa domanda ha nuovi commenti e risposte ma manca una risposta che penso sia molto utile qui:

Ubuntu come sistema operativo desktop di semplice utilizzo quotidiano non ha motivo di essere installato con una partizione \ boot separata e qualcosa del genere NON offrirà qualcosa a un "utente comune" ... Quindi una soluzione è una nuova installazione senza partizione \ boot e questo modo non avrai mai un tale problema

PS: la mia risposta può essere cancellata o aggiunta nella risposta accettata ... (Penso che aiuterà alcune persone in questo modo)


1

Utilità super utile che cancella la partizione di avvio

git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh

Utilizzare a proprio rischio, ma ha funzionato per me:

sudo bootnukem

Perché il downvote?
Jonathan,

0

In aptitude o synaptic c'è una sezione "vecchio o installato manualmente impacchettato". Dovrebbero esserci i vecchi pacchetti linux lì.


0

C'è uno script bash che ho scritto sotto che rende il processo un po 'più user-friendly.

YMMV - è stato creato per la Menta 14. Sto ancora imparando BASH, quindi probabilmente è un po 'goffo. Utilizzare a proprio rischio, ma funziona per me!

#!/bin/bash

endCol='\e[0m'
bold_red='\e[1;31m'
bold_green='\e[1;32m'
bold_yellow='\e[1;33m'

title_color='\e[0;30;47m'

function show_kernel_info {
clear
current_kernel=$(uname -r)
echo "Current ACTIVE kernel is:"
echo -e "  "$bold_yellow$current_kernel$endCol
echo "This kernel will be TOTALLY EXCLUDED from all actions in this script."
echo "Also, one fallback non-active kernel will be always left untouched."
echo ""
echo "These are the non-active kernels stored in /boot:"
count_of_old_kernels_in_boot=$(ls -o /boot/initrd* | grep -c -v "$current_kernel")
if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo " * No non-active kernels found! *"
else
  ls -o /boot/initrd* | grep -v "$current_kernel"
fi
echo ""
list_of_old_kernels=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic")
current_old_kernel=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic" | head -n 1)
count_of_old_kernels_installed=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -c -v "linux-image-generic")
echo "Listing of all unused kernels still installed in the system (these may not exist in /boot):"
if [ $count_of_old_kernels_installed = 0 ]; then
  echo " * No unused kernel installs found! *"
else
  dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic"
fi
echo ""
}

function exit_script {
free_space_after=$(df -BM /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
let freed_space=$free_space_after-$free_space_before
echo ""
echo "Results (in MB)"
echo "---------------"
echo "Free space in /boot before script was run: "$free_space_before
echo "Free space now: "$free_space_after
echo ""
echo "Amount of space freed up = "$freed_space
echo ""
echo "Press any key to exit."
read -s -n 1
echo ""
exit
}

# Main code
echo ""
echo -e $title_color" --------------------------- "$endCol
echo -e $title_color" -   Kernel Cleanup v1.0   - "$endCol
echo -e $title_color" --------------------------- "$endCol
echo ""
echo "Maximise this window for readability."
echo "Press any key to continue."
read -s -n 1
echo ""
echo "This script will remove old unused kernels, but it will prompt you before removing each one."
echo "It will never remove the current running kernel, and will also leave one fallback kernel."
echo "It can also remove source files from /usr/src for each kernel removed."
echo "This is normally safe to do and will free up lots more space."
echo ""
echo "Do you want that done as well? (y/n, enter=yes)"
valid_input=0
while [ "$valid_input" = "0" ]; do
  read -s -n 1 YesNo_input
  if [ "$YesNo_input" = "" ]; then
    YesNo_input="y"
  fi
  case $YesNo_input
  in
    y)
    RemoveSource="y"
    valid_input=1
    ;;

    Y)
    RemoveSource="y"
    valid_input=1
    ;;

    n)
    RemoveSource="n"
    valid_input=1
    ;;

    N)
    RemoveSource="N"
    valid_input=1
    ;;
  esac
done

free_space_before=$(df -h /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
show_kernel_info
while [ $count_of_old_kernels_in_boot -gt 1 ]; do
  # failsafe check if somehow the current kernel is about to be removed!
  if [ "$current_old_kernel" = "$current_kernel" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow the current kernel has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  # failsafe check if somehow a linux-image-generic entry is about to be removed
  if [ "$current_old_kernel" = "linux-image-generic" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow one of the linux-image-generic entries has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  echo "Command about to be executed is:"
  echo "  $ sudo apt-get purge \"$current_old_kernel\""
  check_in_boot=$(echo $current_old_kernel | sed 's/linux-image/initrd.img/g')
  if [ -e /boot/$check_in_boot ]; then
    echo -e $bold_yellow"Note:"$endCol" This kernel exists in /boot but it NON-active, so it's OK to remove."
  else
    echo -e $bold_green"Totally safe to remove:"$endCol" This kernel does NOT exist in /boot."
  fi
  echo ""
  echo "Are you sure you want to remove this kernel?"
  echo "(*upper case* Y=yes / any other key will exit the script)"
  read -s -n 1 yes_no
  echo ""
  # Only entering a single upper case Y will work!
  if [ "$yes_no" != "Y" ]; then
    echo "Aborting script."
    exit_script
  fi
  echo "Removing kernel "$current_old_kernel"..."
  sleep 1
  sudo apt-get -y purge $current_old_kernel
  if [ "$RemoveSource" = "y" ]; then
    current_old_source=$(echo $current_old_kernel | sed 's/linux-image/linux-headers/g')
    current_old_source=$(echo $current_old_source | sed 's/-generic//g')
    current_old_source=$(echo $current_old_source | sed 's/-pae//g')
    sudo apt-get -y purge $current_old_source
  fi
  show_kernel_info
done

if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo -e $bold_red"There are no NON-active kernels to remove!"$endCol
else
  echo -e $bold_red"There is only one NON-active kernel left in /boot!"$endCol
  echo "This script will not remove the last non-active kernel so that you have at least one backup kernel."
fi
echo "Aborting script."
exit_script

0

[Come Noob AskUbuntu non posso commentare fino a quando reputazione = 50, quindi non votare verso il basso per questo.]

Anche il mio server lo stava facendo. Letteralmente nessuna delle risposte previste qui ha funzionato dal momento che richiedono un po 'di spazio di lavoro su / boot per il completamento. Se la partizione di avvio è piena, si interromperà bruscamente senza eliminare alcuna delle immagini.

L'unica cosa che ha funzionato per me è stata rivedere l'immagine corrente, quindi manualmente sudo rm filenamei file di immagine più vecchi (ognuno aveva -3.16.0-30 nei loro nomi). Una volta fatto ciò, sudo apt-get autoremoveaveva la stanza di cui aveva bisogno per fare il suo lavoro. Ha evidenziato alcuni errori associati a quella versione, ad esempio: "depmod: FATAL: impossibile caricare /boot/System.map-3.16.0-30-generic: nessun file o directory", ma è prevedibile.

Al termine, ha dfrestituito un 42% in uso per / boot per indicare che è di nuovo integro.


1
Il post che stai cercando è askubuntu.com/questions/171209/…
muru

@muru Beh, sì ... Vorrei suggerire che anche il poster originale avrebbe bisogno di questo consiglio. Una volta che / boot è pieno, anche queste versioni con script che tentano di risolverlo falliscono poiché, beh, / boot è pieno.
Caso Justin

Bene, ci sono due problemi simili: a) in cui il sistema avverte che il disco si sta riempiendo, ma apt-getha spazio sufficiente per andare avanti, e b), dove apt-getnon funziona perché il disco è troppo pieno. Questo è l'altro post.
Muru,

0

Ho scritto questo script bash per eliminare in modo selettivo vecchi kernel tutti in una volta:

rm kernel dimensione reale

Tutto il codice e le istruzioni bash sono inclusi nel link.


0

Salvare questo script come /usr/local/bin/remove_kernels.sh(ricordarsi di dare le autorizzazioni di esecuzione sudo chmod 755 /usr/local/bin/remove_kernels.sh):

#!/bin/sh
if test $(id -u) != 0; then
 echo Error: You must be root to run this script!
 exit 1
fi
apt purge $( dpkg --list | grep -P -o "linux-image-\d\S+" | grep -v $(uname -r | grep -P -o ".+\d") )
update-grub

Quindi per rimuovere tutti i vecchi kernel basta digitare: sudo remove_kernels.sh


0

La partizione / boot a volte può essere un po 'strana

non iniziare direttamente a eliminare i file kernal.

I passaggi da seguire

  1. Verifica che il kernel attualmente installato sia utilizzato dal sistema Linux

    uname -r

    questo dovrebbe darti il ​​nome dell'immagine kernal attualmente installata sul sistema

  2. Ora inizia a cancellare file extra tranne quello specifico installato sul tuo sistema

    apt-get remove linux-image-XXXXX

  3. Rimuovere anche il file di intestazione

    apt-get remove linux-headers-XXXXX

  4. Inoltre, potrebbe esserci una condizione in cui aptha smesso di funzionare, in tal caso passare a / boot

    cd /boot

  5. Inizia a rimuovere i file manualmente ma con molta attenzione tieni a mente anche di non eliminare i installed one'sfile kernal dal tuo sistema.

    rm linux-image-XXXXX

    rm linux-image-extra-XXXXXX

  6. Dopo aver rimosso i file corretti, pulizia eventuali installazioni parziali

    apt-get -f install

  7. Rimuovi i file extra presenti lì come file di avvio puliti manualmente

    apt-get autoremove

  8. Aggiorna grub

    update-grub

  9. Infine, aggiorna i tuoi pacchetti di sistema

    apt-get update


-1

Se non è possibile rimuovere altri file inutilizzati e se si dispone di un'altra partizione con / o spazio libero sullo stesso dispositivo, è possibile ridimensionare la partizione / boot parted / gparted . (È incluso anche nel supporto di installazione.)

Attenzione : il ridimensionamento della partizione è un'operazione pericolosa , salva i tuoi dati importanti su altri supporti prima di farlo!


La maggior parte dei malati di piccole partizioni separate / di avvio ha scelto la "crittografia dell'intero disco" al momento dell'installazione, che richiede LVM. Questa soluzione sembra causare più problemi di quanti ne risolva per quegli utenti.
user535733
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.