135 votes

Impossible de mettre à niveau en raison d'un espace disque insuffisant sur /boot

J'essaie de faire do-release-upgrade mais ensuite j'ai :

Pas assez d'espace disque libre

La mise à niveau a été interrompue. La mise à niveau nécessite un total de 25,7 M d'espace libre sur le disque '/b'. sur le disque '/boot'. Veuillez libérer au moins 25,7 M d'espace supplémentaire sur le disque supplémentaire sur le disque '/boot'. Videz votre corbeille et supprimez les paquets temporaires des anciennes installations en utilisant 'sudo apt-get clean'.

Sortie de 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

Comment se fait-il qu'il n'y ait plus de place dans le coffre ? Voici la sortie de 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

Sortie de 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

174voto

Shiva Points 765

Votre partition /boot est remplie de vieux noyaux. Ça fait ça parfois, je ne sais pas pourquoi ça n'est jamais réparé. Vous pouvez facilement supprimer les anciens noyaux si vous savez dans quels paquets ils se trouvent.

Premier contrôle uname -a pour vérifier votre version actuelle.

Ensuite, exécutez la commande suivante :

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

Cette commande listera tous les paquets dont vous n'avez plus besoin. Je n'aime pas les supprimer automatiquement, j'aime avoir le contrôle quand il s'agit de supprimer des noyaux. Donc pour chaque paquet listé, faites ce qui suit :

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

Intermezzo

Cet intermezzo décrit plus en détail le fonctionnement des commandes et tente de corriger un problème avec linux-libc-dev:amd64 . La plupart des utilisateurs peuvent sauter ce paragraphe.

  • dpkg -l 'linux-*' - liste tous les paquets dont le nom commence par 'linux-'.
  • sed '/^ii/!d; - supprimer toutes les lignes qui font nicht commencer par ii
  • uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/" - trouver la version du noyau en cours d'exécution
  • /'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d - supprimer toutes les lignes, sauf celles qui contiennent le numéro de version du noyau en cours d'exécution
  • s/^[^ ]* [^ ]* \([^ ]*\).*/\1/ - pour chaque ligne, indiquez uniquement le nom du paquet
  • /[0-9]/!d - supprimer les lignes qui ne contiennent pas de chiffres.

Pour réparer Numéro de Frederick Nord Je pense que le commandement peut être modifié comme suit :

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

En fait, il ajoute un filtre supplémentaire :

  • /^linux-\(headers\|image\)/!d - supprimer toutes les lignes qui ne commencent pas par linux-headers o linux-image

/Intermezzo

some-kernel-package peut être remplacé par l'un des paquets listés. Veillez simplement à ne pas supprimer les paquets du noyau qui sont actuellement utilisés (tels qu'ils sont répertoriés dans la liste des paquets du noyau). uname -a ) par exemple. sudo apt-get purge -y linux-headers-3.0.0-12 etc.

Il est possible de l'automatiser davantage en utilisant la commande xargs, mais je n'aime pas cela. C'est une chose personnelle. Cependant, voici la commande pour le faire :

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

C'est ce que mon /boot Il semblerait qu'il y ait un noyau de rechange (2.6.38-11) au cas où et que la version 3.2.0-24 soit actuelle :

$ 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

Et l'utilisation du système de fichiers :

$ df -h /boot
Filesystem Size Used Avail Use% Mounted
/dev/sda5  228M  63M  154M  29% /boot

54voto

Ryan ONeill Points 189
sudo apt-get autoremove

a fait l'affaire pour moi, il a nettoyé avec succès tous les paquets inutilisés du noyau.

8voto

JonH Points 121

Équivalent à la réponse acceptée -- un autre moyen (peut-être plus simple) est d'installer le fichier ubuntu-tweak il peut être téléchargé à partir de aquí . Allez dans "Janitor", et sélectionnez "Old Kernel" pour le nettoyer. Cela peut être fait en quelques clics. (testé sur le bureau 14.04)

enter image description here

3voto

WinEunuuchs2Unix Points 91128

Par rapport aux autres réponses GUI ici, l'avantage de cette réponse est l'utilisation du Bash natif d'Ubuntu sans installation d'applications tierces.

Solution basée sur Zenity et Bash

Zenity fournit une belle interface graphique au terminal pour traiter une liste et sélectionner des éléments avec boutons radio :

rm-kernels 1

Le noyau actuel avec lequel vous avez démarré ne peut pas être supprimé et n'est pas inclus dans la liste. La taille indiquée est celle qui sera sauvegardée dans le fichier /boot répertoire. Une plus grande partie est conservée sur votre disque car les binaires du noyau résident également dans d'autres zones. Note du 27 juillet 2017 : Les répertoires /usr/src/*kernel_version* y /lib/modules/*kernel_version* sont maintenant inclus également.

Le site Date de modification est découvert en utilisant le stat commande. Sur mon système, cette date est "touché" à chaque fois que le noyau est démarré en utilisant cette méthode ( Comment savoir quand une version spécifique du noyau a été démarrée pour la dernière fois ? ) cron redémarrer le script. Cependant, sur votre système, la date sera la date de sortie du noyau, et non la dernière fois que vous l'avez démarré.

apt-get purge vous donne la possibilité d'avorter

Vous avez une dernière possibilité de visualiser tout ce qui sera purgé et de voir l'espace disque total (quelque peu trompeur) qui sera récupéré :

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] 

Le code

Copiez ce code dans un fichier exécutable nommé rm-kernels en /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: Vous avez besoin de la permission sudo pour créer le fichier à utiliser :

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

Pour rendre le fichier exécutable, utilisez :

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

NOTA: Pour une version serveur (basée sur le texte, pas sur l'interface graphique) de ce script, voir : Comment supprimer les anciennes versions du noyau pour nettoyer le menu de démarrage ?


Mises à jour du 28 juillet 2017

La taille calculée de chaque noyau a été tirée de /boot/*kernel_version* qui étaient 5 fichiers totalisant ~50 MB. La formule a été modifiée pour inclure les fichiers dans /usr/src/*kernel_version* y /lib/modules/*kernel_version* . La taille calculée pour chaque noyau est maintenant de ~400 MB. Le code ci-dessus pour rm-kernels y rm-kernels-server a été mis à jour. Cependant, les exemples d'écrans ci-dessus ne reflètent pas encore ces changements.

Par défaut, la taille des fichiers est estimée à 125 Mo pour linux-headers et à 220 Mo pour linux-image car du peut être douloureusement lent, sauf si les fichiers sont dans le cache. Pour obtenir la taille réelle en utilisant du passer n'importe quel paramètre au script.

Le total de toutes les tailles de noyau (à l'exception de la version en cours d'exécution qui ne peut être supprimée) est maintenant affiché dans la barre de titre.

La boîte de dialogue utilisée pour afficher le nom de chaque noyau. Date du dernier accès . Cette date peut être écrasée en masse pour tous les noyaux lors d'une sauvegarde ou d'opérations similaires. La boîte de dialogue affiche maintenant le Date de modification à la place.

0voto

daGo Points 338

Vous pouvez facilement gérer les noyaux via le gestionnaire de paquets synaptic. Mais vous devez d'abord connaître le nom de la version du noyau actuellement utilisée. Vous pouvez le trouver en exécutant uname -r dans l'invite du terminal :

linux@linux-desktop:~$ uname -r
4.4.0-75-generic

Donc au moins cette version devrait rester intacte. Ouvrez synaptic et commencez à remplir l'espace réservé au filtre rapide comme indiqué ci-dessous :

quick filter search box at top in synaptic

Vous pouvez maintenant sélectionner tous les paquets que vous souhaitez supprimer et le faire :

Marquer pour une suppression complète > Appliquer

Je suggère de conserver au moins un paquet du dernier noyau actuel et un noyau précédent. Par exemple, dans ce cas, vous pouvez vous débarrasser en toute sécurité de linux-image-4.4.0-66-generic y linux-image-extra-4.4.0-66-generic mais il serait bon de garder 4.4.0-72 et bien sûr 4.4.0-75 .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X