Impossibile eseguire l'aggiornamento a causa dello spazio su disco insufficiente in / boot

118

Provo a fare do-release-upgrade ma poi ho:

% Bl0ck_qu0te%

Output di df :

                    237251272 214797108  10402504  96% /
udev                    488120         4    488116   1% /dev
tmpfs                   198676       668    198008   1% /run
none                      5120         0      5120   0% /run/lock
none                    496684         0    496684   0% /run/shm
/dev/sda1               233191    225867         0 100% /boot

Come mai non è rimasto spazio all'avvio? Ecco l'output di ls -as /boot :

total 221839
    4 .
    4 ..
  645 abi-2.6.32-34-generic-pae
  698 abi-2.6.35-30-generic-pae
  727 abi-2.6.38-12-generic-pae
  727 abi-3.0.0-12-generic-pae
  727 abi-3.0.0-13-generic-pae
  727 abi-3.0.0-14-generic-pae
  727 abi-3.0.0-15-generic-pae
  727 abi-3.0.0-16-generic-pae
  727 abi-3.0.0-17-generic-pae
  727 abi-3.0.0-19-generic-pae
  761 abi-3.0.0-20-generic-pae
  115 config-2.6.32-34-generic-pae
  128 config-2.6.35-30-generic-pae
  136 config-2.6.38-12-generic-pae
  140 config-3.0.0-12-generic-pae
  140 config-3.0.0-13-generic-pae
  140 config-3.0.0-14-generic-pae
  140 config-3.0.0-15-generic-pae
  140 config-3.0.0-16-generic-pae
  140 config-3.0.0-17-generic-pae
  140 config-3.0.0-19-generic-pae
  140 config-3.0.0-20-generic-pae
    5 grub
10773 initrd.img-2.6.32-34-generic-pae
13619 initrd.img-2.6.35-30-generic-pae
15365 initrd.img-2.6.38-12-generic-pae
16481 initrd.img-3.0.0-12-generic-pae
16487 initrd.img-3.0.0-13-generic-pae
16501 initrd.img-3.0.0-14-generic-pae
16476 initrd.img-3.0.0-15-generic-pae
16481 initrd.img-3.0.0-16-generic-pae
16478 initrd.img-3.0.0-17-generic-pae
   12 lost+found
  174 memtest86+.bin
  176 memtest86+_multiboot.bin
 1700 System.map-2.6.32-34-generic-pae
 1841 System.map-2.6.35-30-generic-pae
 2115 System.map-2.6.38-12-generic-pae
 2141 System.map-3.0.0-12-generic-pae
 2141 System.map-3.0.0-13-generic-pae
 2143 System.map-3.0.0-14-generic-pae
 2146 System.map-3.0.0-15-generic-pae
 2147 System.map-3.0.0-16-generic-pae
 2147 System.map-3.0.0-17-generic-pae
 2148 System.map-3.0.0-19-generic-pae
 2149 System.map-3.0.0-20-generic-pae
    2 vmcoreinfo-2.6.32-34-generic-pae
    2 vmcoreinfo-2.6.35-30-generic-pae
    2 vmcoreinfo-2.6.38-12-generic-pae
    2 vmcoreinfo-3.0.0-12-generic-pae
    2 vmcoreinfo-3.0.0-13-generic-pae
    2 vmcoreinfo-3.0.0-14-generic-pae
    2 vmcoreinfo-3.0.0-15-generic-pae
    2 vmcoreinfo-3.0.0-16-generic-pae
    2 vmcoreinfo-3.0.0-17-generic-pae
    2 vmcoreinfo-3.0.0-19-generic-pae
    2 vmcoreinfo-3.0.0-20-generic-pae
 4092 vmlinuz-2.6.32-34-generic-pae
 4347 vmlinuz-2.6.35-30-generic-pae
 4567 vmlinuz-2.6.38-12-generic-pae
 4675 vmlinuz-3.0.0-12-generic-pae
 4676 vmlinuz-3.0.0-13-generic-pae
 4681 vmlinuz-3.0.0-14-generic-pae
 4698 vmlinuz-3.0.0-15-generic-pae
 4700 vmlinuz-3.0.0-16-generic-pae
 4700 vmlinuz-3.0.0-17-generic-pae
 4703 vmlinuz-3.0.0-19-generic-pae
 4705 vmlinuz-3.0.0-20-generic-pae

Output di uname -a :

 Linux kitsch 3.0.0-17-generic-pae #30-Ubuntu SMP Thu Mar 8 17:53:35 UTC 2012 i686 i686 i386 GNU/Linux
    
posta clamp 27.05.2012 - 16:48

7 risposte

156

La tua partizione / boot è piena di vecchi kernel. Lo fa a volte, non è sicuro del motivo per cui non è mai stato risolto. Puoi rimuovere facilmente i vecchi kernel se sai quali pacchetti sono arrivati.

Prima controlla uname -a per verificare la versione corrente.

Quindi esegui il seguente comando:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)//")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*//;/[0-9]/!d'

Questo comando elencherà tutti i pacchetti che non ti servono più. Non mi piace rimuoverli automaticamente, mi piace avere il controllo quando si tratta di rimuovere i kernel. Quindi per ogni pacchetto elencato fai quanto segue:

sudo apt-get -y purge some-kernel-package

Intermezzo

Questo intermezzo descrive in modo più dettagliato come funzionano i comandi e tenta di risolvere un problema con linux-libc-dev:amd64 . La maggior parte degli utenti può saltare questo paragrafo.

  • dpkg -l 'linux-*' elenca tutti i pacchetti che hanno un nome che inizia con 'linux -'
  • % Co_de% ii '
  • sed '/^ii/!d; remove all lines that do *not* start with trova la versione corrente del kernel in esecuzione
  • uname -r | sed "s/\(.*\)-\([^0-9]\+\)//" Rimuovi tutte le linee, eccetto quelle che contengono il numero di versione del kernel corrente in esecuzione
  • /'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)//")"'/d Per ogni elenco di linee, solo il nome del pacchetto
  • s/^[^ ]* [^ ]* \([^ ]*\).*// Rimuovi le righe che non contengono numeri.

Per correggere il problema di Frederick Nord penso che il comando possa essere modificato come segue:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)//")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*//;/[0-9]/!d;/^linux-\(headers\|image\)/!d'

In pratica aggiunge un filtro extra:

  • / ^ linux- (intestazioni \ | immagine) /! d Elimina tutte le righe che non iniziano con /[0-9]/!d o linux-headers

/ Intermezzo

Dove linux-image può essere sostituito con uno dei pacchetti elencati. Fai attenzione che non rimuovi i pacchetti del kernel che sono attualmente in uso (come elencato da some-kernel-package ) es. uname -a ecc.

Può essere ulteriormente automatizzato usando il comando xargs, ma non mi piace. È una cosa personale. Tuttavia, ecco il comando per farlo:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)//")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*//;/[0-9]/!d' | xargs sudo apt-get -y purge

Ecco come appare il mio sudo apt-get purge -y linux-headers-3.0.0-12 , un kernel di riserva (2.6.38-11) nel caso in cui 3.2.0-24 sia attuale:

$ ls -l /boot
total 59388
-rw-r--r-- 1 root root   730545 Sep 13  2011 abi-2.6.38-11-generic
-rw-r--r-- 1 root root   791023 Apr 25 13:51 abi-3.2.0-24-generic
-rw-r--r-- 1 root root   130326 Sep 13  2011 config-2.6.38-11-generic
-rw-r--r-- 1 root root   140341 Apr 25 13:51 config-3.2.0-24-generic
drwxr-xr-x 3 root root     5120 May 27 17:46 grub
-rw-r--r-- 1 root root 20883146 Oct  1  2011 initrd.img-2.6.38-11-generic
-rw-r--r-- 1 root root 22474219 May  5 09:04 initrd.img-3.2.0-24-generic
drwxr-xr-x 2 root root    12288 Apr 16  2009 lost+found
-rw-r--r-- 1 root root   176764 Nov 27 11:00 memtest86+.bin
-rw-r--r-- 1 root root   178944 Nov 27 11:00 memtest86+_multiboot.bin
-rw------- 1 root root  2656297 Sep 13  2011 System.map-2.6.38-11-generic
-rw------- 1 root root  2884358 Apr 25 13:51 System.map-3.2.0-24-generic
-rw------- 1 root root     1369 Sep 13  2011 vmcoreinfo-2.6.38-11-generic
-rw------- 1 root root  4526784 Sep 13  2011 vmlinuz-2.6.38-11-generic
-rw------- 1 root root  4965776 Apr 25 13:51 vmlinuz-3.2.0-24-generic

E utilizzo del file system:

$ df -h /boot
Filesystem Size Used Avail Use% Mounted
/dev/sda5  228M  63M  154M  29% /boot
    
risposta data jippie 27.05.2012 - 17:28
44

sudo apt-get autoremove

ha fatto il trucco per me, ha ripulito con successo tutti i pacchetti del kernel inutilizzati.

    
risposta data topless 24.04.2014 - 11:18
8

Equivalente alla risposta accettata - un altro (possibilmente) modo più semplice è installare lo strumento ubuntu-tweak , può essere scaricato da qui . Vai su "Janitor" e seleziona "Old Kernel" per pulire. Può essere fatto in pochi clic. (testato su desktop 14.04)

    
risposta data Yixing 14.11.2015 - 08:00
2

Rispetto ad altre risposte della GUI qui, il vantaggio di questa risposta è nativo Ubuntu Bash viene utilizzato senza installare applicazioni di terze parti.

Soluzione basata su Zenity e Bash

Zenity fornisce un'interfaccia GUI per il terminale per elaborare un elenco e selezionare elementi con pulsanti di opzione :

Ilkernelcorrenteavviatononpuòessererimossoenonèinclusonell'elenco.Ladimensioneriportataèquantoverràsalvatonelladirectory/boot.Altroèsalvatosuldiscoperchéibinaridelkernelrisiedonoancheinaltrearee.27luglio2017nota:orasonoincluseancheledirectory/usr/src/*kernel_version*e/lib/modules/*kernel_version*.

LaDatadimodificavienerilevatautilizzandoilcomandostat.Sulmiosistemaquelladataè"toccata" ogni volta che il kernel viene avviato usando questo ( Come fai a sapere quando è stata avviata l'ultima versione del kernel? ) cron script di riavvio. Tuttavia, sul tuo sistema la data sarà la data di rilascio del kernel, non l'ultima volta che l'hai avviato.

apt-get purge ti dà la possibilità di abortire

Ti viene offerta l'ultima opportunità di visualizzare tutto ciò che verrà eliminato e di vedere lo spazio totale del disco (in qualche modo fuorviante) che verrà ripristinato:

The following packages will be REMOVED:
  linux-headers-4.7.1-040701* linux-headers-4.7.1-040701-generic*
  linux-headers-4.7.2-040702* linux-headers-4.7.2-040702-generic*
  linux-headers-4.7.3-040703* linux-headers-4.7.3-040703-generic*
  linux-headers-4.8.1-040801* linux-headers-4.8.1-040801-generic*
  linux-headers-4.8.10-040810* linux-headers-4.8.10-040810-generic*
  linux-headers-4.8.11-040811* linux-headers-4.8.11-040811-generic*
  linux-headers-4.8.4-040804* linux-headers-4.8.4-040804-generic*
  linux-headers-4.8.5-040805* linux-headers-4.8.5-040805-generic*
  linux-image-4.7.1-040701-generic* linux-image-4.7.2-040702-generic*
  linux-image-4.7.3-040703-generic* linux-image-4.8.1-040801-generic*
  linux-image-4.8.10-040810-generic* linux-image-4.8.11-040811-generic*
  linux-image-4.8.4-040804-generic* linux-image-4.8.5-040805-generic*
0 upgraded, 0 newly installed, 24 to remove and 2 not upgraded.
After this operation, 2,330 MB disk space will be freed.
Do you want to continue? [Y/n] 

Il codice

Copia questo codice in un file eseguibile denominato rm-kernels in /usr/local/bin :

#!/bin/bash

# NAME: rm-kernels
# PATH: /usr/local/bin
# DESC: Provide zenity item list of kernels to remove

# DATE: Mar 10, 2017. Modified Jul 28, 2017.

# NOTE: Will not delete current kernel.

#       With 10 kernels on an SSD, empty cache from sudo prompt (#) using:
#       # free && sync && echo 3 > /proc/sys/vm/drop_caches && free
#       First time for 'du' 34 seconds.
#       Second time for 'du' 1 second.

# PARM: If any parm 1 passed use REAL kernel size, else use estimated size.
#       By default 'du' is not used and estimated size is displayed.

# Must be running as sudo
if [[ $(id -u) != 0 ]]; then
    zenity --error --text "root access required. Use: sudo rm-kernels"
    exit 99
fi

OLDIFS="$IFS"
IFS="|"
choices=()

current_version=$(uname -r)

for f in /boot/vmlinuz*
do
    if [[ $f == *"$current_version"* ]]; then continue; fi # skip current version
    [[ $f =~ vmlinuz-(.*) ]]
    v=${BASH_REMATCH[1]}        # example: 4.9.21-040921-generic
    v_main="${v%-*}"            # example: 4.9.21-040921

    # Kernel size in /boot/*4.9.21-040921-generic*
    s=$(du -ch /boot/*-$v* | awk '/total/{print $1}')

    if [[ $# -ne 0 ]] ; then    # Was a parameter passed?
        if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
             # Kernel headers size in /usr/src/*4.9.21-040921*
             s2=$(du -ch --max-depth=1 /usr/src/*-$v_main* | awk '/total/{print $1}')
        else
             s2="0M"            # Linux Headers are not installed
        fi
        # Kernel image size in /lib/modules/4.9.21-040921-generic*
        s3=$(du -ch --max-depth=1 /lib/modules/$v* | awk '/total/{print $1}')
    else
        # Estimate sizof of optional headers at 125MB and size of image at 220MB
        if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
             s2="125M"
        else
             s2="0M"            # Linux Headers are not installed
        fi
        s3="220M"
    fi

    # Strip out "M" provided by human readable option of du and add 3 sizes together
    s=$(( ${s//[^0-9]*} + ${s2//[^0-9]*} + ${s3//[^0-9]*} ))
    t=$(( t + s ))
    s=$s" MB"
    d=$(date --date $(stat -c %y $f) '+%b %d %Y') # Last modified date for display
    choices=("${choices[@]}" false "$v" "$d" "$s")
done

# adjust width & height below for your screen 640x480 default for 1920x1080 HD screen
# also adjust font="14" below if blue text is too small or too large

choices=('zenity \
        --title "rm-kernels - Total: $t MB excluding: $current_version" \
        --list \
        --separator="$IFS" \
        --checklist --multiple \
        --text '<span foreground="blue" font="14">Check box next to kernel(s) to remove</span>' \
        --width=640 \
        --height=480 \
        --column "Select" \
        --column "Kernel Version Number" \
        --column "Modified Date" \
        --column " Size " \
        "${choices[@]}"')
IFS="$OLDIFS"

i=0
list=""
for choice in "${choices[@]}" ; do
    if [ "$i" -gt 0 ]; then list="$list- "; fi # append "-" from last loop
    ((i++))

    short_choice=$(echo $choice | cut -f1-2 -d"-")
    header_count=$(find /usr/src/linux-headers-$short_choice* -maxdepth 0 -type d | wc -l)

    # If -lowlatency and -generic are purged at same time the _all header directory
    # remains on disk for specific version with no -generic or -lowlatency below.
    if [[ $header_count -lt 3 ]]; then
        # Remove all w.x.y-zzz headers
        list="$list""linux-image-$choice- linux-headers-$short_choice"
    else
        # Remove w.x.y-zzz-flavour header only, ie -generic or -lowlatency
        list="$list""linux-image-$choice- linux-headers-$choice" 
    fi

done

if [ "$i" -gt 0 ] ; then
     apt-get purge $list
fi

NOTA: hai bisogno dell'autorizzazione sudo per creare il file, quindi utilizza:

gksu gedit /usr/local/bin/rm-kernels

Per rendere eseguibile il file usa:

sudo chmod +x /usr/local/bin/rm-kernels

NOTA: per una versione di questo script (basata su testo, non su GUI) vedi: Come rimuovo le vecchie versioni del kernel per ripulire il menu di avvio?

Aggiornamenti del 28 luglio 2017

Le dimensioni calcolate di ogni kernel sono state prese da /boot/*kernel_version* che erano 5 file per un totale di ~ 50 MB. La formula è stata modificata per includere i file in /usr/src/*kernel_version* e /lib/modules/*kernel_version* . La dimensione calcolata per ogni kernel è ora ~ 400 MB. Il codice sopra per rm-kernels e rm-kernels-server è stato aggiornato. Tuttavia, le schermate di esempio sopra non riflettono ancora questi cambiamenti.

L'impostazione predefinita è di stimare la dimensione dei file per linux-headers a 125 MB e linux-image a 220 MB perché du può essere dolorosamente lento a meno che i file non siano nella cache. Per ottenere la dimensione reale utilizzando du , passa qualsiasi parametro allo script.

Il totale di tutte le dimensioni del kernel (esclusa la versione corrente corrente che non può essere rimossa) è ora mostrato nella barra del titolo.

La finestra di dialogo utilizzata per visualizzare la Data ultimo accesso di ogni kernel. Questa data può essere sovrascritta per tutti i kernel durante il backup o operazioni simili. La finestra di dialogo ora mostra invece Data modificata .

    
risposta data WinEunuuchs2Unix 10.05.2017 - 04:54
0

Puoi gestire facilmente i kernel tramite il gestore di pacchetti synaptic. Ma prima dovresti sapere un nome di rilascio del kernel usato corrente, nel prompt del terminale:

[email protected]:~$ uname -r 4.4.0-75-generic Quindi almeno questa versione non dovrebbe essere toccata. Apri sinaptic e inizia a riempire il segnaposto rapido del filtro come mostrato di seguito: Ora puoi selezionare tutti i pacchetti che desideri eliminare e fai quanto segue: Segna per la rimozione completa - & gt; Applica . Suggerirei di conservare almeno un pacchetto kernel aggiornato e un kernel precedente. Ad esempio in questo caso puoi tranquillamente eliminare linux-image-4.4.0-66-generic e linux-image-extra-4.4.0-66-generic , ma è utile mantenere 4.4.0-72 e ovviamente 4.4.0-75 .

    
risposta data daGo 07.05.2017 - 12:39
0

Per facilità nella riga di comando:

link

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

Poi

sudo bootnukem --dry-run
    
risposta data Jonathan 09.05.2017 - 18:57
0

Funziona su Linux Mint 18.3 (basato su Ubuntu 16.04).

sudo apt-get purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)//")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*//;/[0-9]/!d' | head -n -1) --assume-yes

Fonte: link

    
risposta data Raffael 23.01.2018 - 16:47

Leggi altre domande sui tag