Qual è il modo più sicuro per pulire / avviare la partizione?


Risposte:


335

Metodo da riga di comando:

Prima controlla la versione del tuo kernel, in modo da non eliminare l'immagine del kernel in uso, eseguendo:

uname -r

Ora esegui questo comando per un elenco di kernel installati:

dpkg --list 'linux-image*' | grep ^ii

ed elimina i kernel che non desideri più / di cui hai bisogno eseguendo questo:

sudo apt-get remove linux-image-VERSION

Sostituisci VERSIONE con la versione del kernel che vuoi rimuovere.

Quando hai finito di rimuovere i kernel più vecchi, puoi eseguirlo per rimuovere tutti i pacchetti che non ti serviranno più:

sudo apt-get autoremove

E infine puoi eseguirlo per aggiornare l'elenco del kernel grub:

sudo update-grub

34
sudo dpkg --list 'linux-image*' | grep ^iirende un po 'più semplice vedere solo i kernel installati. Inoltre penso che update-grubsia innocuo ma non strettamente necessario, che viene eseguito automaticamente quando si disinstalla un kernel.
Nelson,

9
Utilizzare sudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo ""per ottenere l'elenco dei nomi dei pacchetti da utilizzare con sudo apt-get remove. head -n -3viene utilizzato per mantenere 3 kernel più recenti rimasti nel sistema.
Sithsu,

2
my simple one liner:apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
gcb

27
sudo apt-get autoremovedovrebbe bastare (di solito ti lascia con gli ultimi 3 kernel)
mbx

6
Questa è una buona risposta, ma dubito che possa funzionare nella maggior parte dei casi (se non in tutti): il problema è che /bootè pieno, quindi apt-getfallirà con qualche codice di errore o altro. La risposta qui sotto è un po ' "hackier" (devo confessare che ho dovuto in acciaio a me stesso di emettere che rm -rfin /boot), ma l'unico che è in grado di lavorare in questa situazione.
Marco,

284

NOTA: questo è solo se non puoi usare apt per ripulire a causa di un 100% full / boot

Se apt-get non funziona perché / boot è al 100%, è necessario prima pulire / avviare. Questo probabilmente ha catturato un aggiornamento del kernel in un'installazione parziale, il che significa che apt è praticamente completamente bloccato e continuerà a dirti di eseguire apt-get -f installanche se quel comando continua a fallire.

Ottieni l'elenco delle immagini del kernel e determina cosa puoi fare a meno. Questo comando mostrerà i kernel installati tranne quello attualmente in esecuzione sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`. Nota le due versioni più recenti nell'elenco. Non devi preoccuparti di quello in esecuzione in quanto non è elencato qui. Puoi verificarlo con uname -r.

Crea un comando per eliminare tutti i file in / boot per i kernel che non ti interessano usando l'espansione del rinforzo per mantenerti sano di mente. Ricorda di escludere le immagini del kernel attuali e due più recenti. Esempio: sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*. È inoltre possibile utilizzare un intervallo con la sintassi {80..84}.

sudo apt-get -f install per ripulire ciò che rende apt scontroso su un'installazione parziale.

Se si verifica un errore che include una riga come "Errore interno: impossibile trovare l'immagine (/boot/vmlinuz-3.2.0-56-generic)", eseguire il comando sudo apt-get purge linux-image-3.2.0-56-generic(con la versione appropriata).

Infine, sudo apt-get autoremoveper cancellare i vecchi pacchetti di immagini del kernel che sono stati resi orfani dal clean boot manuale.

Suggerimento, esegui sudo apt-get updatee sudo apt-get upgradeprenditi cura di tutti gli aggiornamenti che potrebbero aver eseguito il backup durante l'attesa di scoprire la partizione completa / di avvio.

Suggerimento2, esamina https://help.ubuntu.com/community/AutomaticSecurityUpdates e considera l'impostazione di Unattended-Upgrade: Rimuovi-Unused-Dependencies su true in /etc/apt/apt.conf.d/50unattended-upgrades. Questo sarà l'equivalente dell'esecuzione di autoremove dopo ogni aggiornamento di sicurezza per essere sicuri di ripulire i kernel inutilizzati, ma rimuoverà anche altre cose che ritiene inutilizzate salvandoti da questo problema in futuro.


3
In questo modo ho l'ultimo per il prossimo riavvio e poi quello precedente nel caso in cui qualcosa si rompa in quello. Di solito ho un sacco di spazio, quindi non fa male averne alcuni e soddisfa la mia paranoia per non avere abbastanza opzioni di backup in un determinato scenario.
flickerfly,

1
Non ho mai avuto problemi causati da aggiornamenti non presidiati. Posso immaginare scenari in cui questo potrebbe essere un problema principalmente legato alla perdita di dipendenze in installazioni non deb debito Immaginate di installare php, decidete di disinstallarlo e installate una versione più recente dal sorgente. Questa versione ha dipendenze fornite dall'installazione precedente, ma apt non è a conoscenza del fatto che è ancora necessario. La prossima volta che esegui la rimozione automatica, tali dipendenze spariranno. Se automatizzato, potrebbe essere un po 'confuso. Se non si installa al di fuori dei repository, credo che sia totalmente sicuro.
flickerfly,

3
Dopo averlo visto in diversi server virtuali vsphere (in cui i kernel venivano aggiornati automaticamente ma non rimossi in seguito), ho scritto uno script Python per automatizzarlo. Mi piacerebbe avere più occhi su di esso
EvanK

2
Se lo usi dpkg --purgesu un avvio completo otterrai il seguente $ sudo dpkg --purge linux-image-3.13.0-65-generic dpkg: dependency problems prevent removal of linux-image-3.13.0-65-generic: linux-image-extra-3.13.0-65-generic depends on linux-image-3.13.0-65-generic. dpkg: error processing package linux-image-3.13.0-65-generic (--purge): dependency problems - not removing Errors were encountered while processing: linux-image-3.13.0-65-generic
flickerfly,

1
Dopo aver ripulito / avviato apt-get install -f continua a non funzionare. Usando df -iho scoperto che stavo anche esaurendo gli inode a /causa dell'enorme quantità di file per il codice sorgente dei kernel più vecchi in/usr/src
Kristofer

51

C'è documentazione al riguardo su https://help.ubuntu.com/community/RemoveOldKernels

In sintesi: utilizzare

sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels

Lo purge-old-kernelsstrumento può essere installato tramite sudo apt install byobu. Ecco la descrizione dalla sua pagina di manuale:

Questo programma rimuoverà i vecchi pacchetti kernel e header dal sistema, liberando spazio su disco. Non rimuoverà mai il kernel attualmente in esecuzione. Per impostazione predefinita, manterrà almeno gli ultimi 2 kernel, ma l'utente può sovrascrivere quel valore usando il --keep parametro.

Se si desidera una soluzione copia-incolla, ReSearchIT Eng ha suggerito quanto segue:

sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge

3
Nel mio caso apt non funziona a causa di un kernel in sospeso e la correzione suggerita è un catch-22:
James Bowery,

Ho dovuto riparare prima i pacchetti rotti con askubuntu.com/a/304388/284313 Dopo che la tua soluzione ha funzionato.
James Bowery,

3
Penso che questa dovrebbe essere la soluzione accettata fin d'ora.
Fran Marzoa,

3
questo è molto più sicuro della risposta accettata. penso che apt-get autoremove --purgedovrebbe essere sufficiente, però.
Woodrow Barlow,

7

Ho scoperto che è molto più facile abbandonare la piccola partizione e passare /bootalla radice. Ciò previene anche eventuali problemi di spazio esaurito in futuro.

Innanzitutto sposta i dati dalla partizione di avvio alla radice (esegui come sudo -s):

cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot

Rimuovi (o commenta) la /bootvoce in /etc/fstab:

vim /etc/fstab

Aggiorna grub e assicurati che tutto sia corretto:

update-grub

apt ora dovrebbe essere in grado di eseguire l'aggiornamento senza problemi.

Questo lascia una partizione 200mb inutilizzata (che potresti usare per qualcos'altro se ritieni che valga la pena).


5
Questa è una buona idea, ma non funziona se si desidera avere la crittografia dell'intero disco per la partizione di root.
Paŭlo Ebermann,

Sì, ci sono casi in cui / boot dovrebbe essere una partizione separata. Un altro esempio era che Grub non era in grado di caricare da una partizione LVM.
Bastione,

4

Rimozione dei vecchi kernel (per liberare spazio all'avvio / avvio) consultare: http://askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-boot

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

Quindi corri

sudo apt-get update

1
questa è stata l'unica che ha funzionato ... ottima soluzione
John,

Migliore risposta! Questa è l'unica soluzione che ha funzionato per me; autoremove è stupido; tenta di reinstallare eventuali kernel con dipendenze non soddisfatte prima di rimuoverle ufficialmente. Stavo andando in cerchio a corto di spazio ancora e ancora. Questa risposta è oro.
Lonnie Best

3

sudo apt-get autoremove

Questo rimuove tutti tranne gli ultimi 2 kernel. Testato su Ubuntu 16.04 LTS quando /bootera al 100% della capacità e apt-get upgradefallì l'ultimo aggiornamento del kernel. L'autoremove del kernel è iterativo, quindi se hai diversi kernel, verranno rimossi uno alla volta. Quindi sii paziente.


1

Perché farlo a mano quando puoi farlo con uno strumento? Sai che ti serviranno di nuovo tra 30 secondi, perché in questi giorni ci vogliono 30 secondi per inviare un nuovo aggiornamento di Kernal = P

Consiglio di usare questo strumento, bootnukem

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

Poi

sudo bootnukem --dry-run

Rimuovi --dry-rununa volta confermato che sembra sicuro

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.