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


J'essaie de faire do-release-upgrade mais alors je reçois:

Pas assez d'espace disque libre

La mise à niveau a échoué. La mise à niveau nécessite un total de 25,7 millions de francs gratuits   espace sur le disque '/ boot'. S'il vous plaît libérer au moins 25,7 M supplémentaires de   espace disque sur '/ boot'. Videz votre corbeille et retirez les paquets temporaires   d'anciennes installations 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 d'espace sur 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

115
2018-05-27 14:48


origine


Ajouter la sortie à ls -l /boot et uname -a à votre question - jippie
Ajoutez également la sortie à dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' à votre question - jippie
ls -as /boot pourrait être utile à la place. Il ne comprendra que la taille des fichiers. - adempewolff
la sortie de ls -l / boot est assez longue aussi, alors voici un pastebin pastebin.com/yM1aEJUx - clamp
Non ce n'est pas. C'est la cause de votre problème. Si votre question devient trop longue, quelqu'un l'éditera. L'utilisation de services externes tels que pastebin va casser la valeur de la question pour référence future. - jippie


Réponses:


Votre partition / boot est remplie d'anciens noyaux. Il le fait parfois, ne sachant pas pourquoi il n'est jamais réparé. Vous pouvez facilement supprimer les anciens noyaux si vous savez quels paquets ils sont venus.

Premier chèque 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 répertorie tous les packages dont vous n'avez plus besoin. Je n'aime pas les supprimer automatiquement, j'aime bien contrôler les noyaux. Donc, pour chaque paquet listé, procédez comme 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 résoudre un problème avec linux-libc-dev:amd64. La plupart des utilisateurs peuvent ignorer ce paragraphe.

  • dpkg -l 'linux-*' liste tous les paquets qui ont un nom commençant par 'linux-'
  • sed '/^ii/!d; remove all lines that do *not* start withii`
  • uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/" trouver la version actuelle du noyau en cours d'exécution
  • /'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d Supprimez toutes les lignes, sauf celles contenant le numéro de version du noyau en cours d'exécution
  • s/^[^ ]* [^ ]* \([^ ]*\).*/\1/ Pour chaque liste de lignes uniquement le nom du paquet
  • /[0-9]/!d Supprimez les lignes qui ne contiennent pas de chiffres.

Pour réparer Le numéro de Frederick Nord Je pense que la commande peut être modifiée 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'

Il ajoute essentiellement un filtre supplémentaire:

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

/Intermezzo

some-kernel-package peut être remplacé par l'un des packages listés. Attention, vous ne supprimez pas les paquets de noyau actuellement utilisés (comme indiqué par le uname -a) par exemple. sudo apt-get purge -y linux-headers-3.0.0-12 etc.

Il peut être automatisé en utilisant la commande xargs, mais je n'aime pas ça. C'est une chose personnelle. Cependant, voici la commande à 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 ressemble à un noyau de rechange (2.6.38-11) juste au cas où et 3.2.0-24 en cours:

$ 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

155
2018-05-27 15:28



Cette solution s’inspire fortement d’un article de OzzyFrank ubuntugenius.wordpress.com/2011/01/08/… - jippie
Oui, pourquoi est-ce un problème est la question? Cela ne devrait pas être sur l'utilisateur à gérer. - Elijah Lynn
FWIW: Cela correspondait aussi à linux-libc-dev: amd64 pour moi. Donc, ça pourrait très bien être un peu trop généreux. - Frederick Nord
It does that sometimes, not sure why it is never fixed Ubuntu a pris la décision, pour le meilleur ou pour le pire, de fournir de nouveaux noyaux réguliers en tant que nouveaux packages plutôt que de mettre à jour des packages existants, de manière à pouvoir installer plusieurs noyaux à volonté. Je conviens que cette hypothèse ne convient pas aux 95% de personnes qui veulent simplement le dernier noyau (et peut-être une solution de secours en cas de nouveaux problèmes de démarrage) et qui ne veulent pas gérer elles-mêmes les noyaux installés. Peut-être qu'à l'avenir, Ubuntu changera ce comportement. Pour l'instant, assurez-vous que votre / boot est énorme. - thomasrutter
@thomasrutter Si vous (comme moi et les 95% de personnes dont vous parlez) pensez que ce bug est important, votez ici: bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1183692 - FriendFX


sudo apt-get autoremove 

a fait le tour pour moi, il a nettoyé avec succès tous les paquets de noyau inutilisés.


43
2018-04-24 09:18



ce n'est pas correct de man apt-get autoremove est utilisé pour supprimer les packages qui ont été automatiquement installés pour satisfaire les dépendances de certains packages et qui ne sont plus nécessaires. un noyau ne serait pas installé pour satisfaire les dépendances, ils sont installés lors des mises à niveau. - dward
@neon_overload Je viens de le poster car il a fait l'affaire, pour moi. - topless
@dward Il a libéré de la place pour moi: avant autremove:  /dev/sda1, 240M total, 171M used, 57M free, 75% used /boot  après:  /dev/sda1, 240M total, 129M used, 98M free, 57% used /boot - Stefan Rogin
@clickstefan la première réponse est correcte. voir également askubuntu.com/questions/89710/… - dward
Il devrait y avoir un bouton pour effectuer cette tâche dans le dialogue "Pas assez d'espace disque disponible". Cela aiderait particulièrement les utilisateurs novices qui ne sont pas familiarisés avec la ligne de commande. - Martin R.


Équivalent à la réponse acceptée - un autre moyen (éventuellement) plus simple consiste à installer le ubuntu-tweak outil, il peut être téléchargé à partir de ici. Allez dans "Janitor" et sélectionnez "Old Kernel" pour le nettoyer. Cela peut se faire en quelques clics. (testé sur le bureau 14.04)

enter image description here


8
2017-11-14 07:00



Situation avec manque d'espace sur /boot Cela arrive tout le temps, c'est donc ma solution préférée - application facile à exécuter qui fait le travail en un clic. - s3m3n


Par rapport aux autres réponses à l’interface graphique, l’avantage de cette réponse est qu’elle est native Ubuntu Bash est utilisé sans installer d’applications tierces.

Solution basée sur Zenity et Bash

Zenity fournit une interface graphique agréable 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 signalée correspond au montant qui sera enregistré dans /bootannuaire. Plus est enregistré sur votre disque, car les fichiers binaires du noyau résident également dans d'autres zones. 27 juillet 2017 note: Les répertoires /usr/src/*kernel_version* et /lib/modules/*kernel_version* sont maintenant inclus aussi.

le Date modifiée est découvert en utilisant le stat commander. Sur mon système cette date est "touché" chaque fois que le noyau est démarré en utilisant ceci (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, pas la dernière fois que vous l'avez démarrée.

apt-get purge vous donne la chance d'avorter

Vous avez la possibilité finale de voir 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 dans /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

REMARQUE: Vous avez besoin de l'autorisation sudo pour créer le fichier, utilisez donc:

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

Pour rendre le fichier exécutable, procédez comme suit:

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

REMARQUE: Pour un serveur (version texte, pas interface graphique) de ce script, voir: Comment supprimer les anciennes versions du noyau pour nettoyer le menu de démarrage?


28 juillet 2017 Mises à jour

La taille calculée de chaque noyau a été prise 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* et /lib/modules/*kernel_version*. La taille calculée pour chaque noyau est maintenant d'environ 400 Mo. Le code ci-dessus pour rm-kernels et rm-kernels-server a été mis à jour. Cependant, les exemples d'écrans ci-dessus ne reflètent pas encore ces modifications.

La valeur par défaut est d’estimer la taille des fichiers pour les en-têtes linux à 125 Mo et linux-image à 220 Mo car du peut être péniblement lente à moins que les fichiers soient en cache. Pour obtenir la taille réelle en utilisant du transmettre n'importe quel paramètre au script.

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

La boîte de dialogue utilisée pour afficher chaque noyau Dernière date d'accès. Cette date peut être écrasée en masse pour tous les noyaux lors d'une sauvegarde ou d'une opération similaire. La boîte de dialogue affiche maintenant le Date modifiée au lieu.


2
2018-05-10 02:54



Tu es incroyable! Vraiment super merci! Tu m'as rendu heureux! - zhartaunik


Vous pouvez facilement gérer les noyaux via le gestionnaire de paquets synaptique. Mais d'abord, vous devriez connaître un nom de version de noyau utilisé actuellement, à l'invite du terminal:

linux@linux-desktop:~$ uname -r 4.4.0-75-generic Donc, au moins cette version, vous devriez rester intact. Ouvrez synaptique et commencez à remplir l'espace réservé au filtre rapide comme indiqué ci-dessous: enter image description here Vous pouvez maintenant sélectionner tous les packages que vous souhaitez supprimer et procédez comme suit: Marque pour suppression complète -> Appliquer. Je suggère de conserver au moins un paquet de noyau et un noyau précédents. Par exemple dans ce cas, vous pouvez vous débarrasser en toute sécurité de linux-image-4.4.0-66-generic et linux-image-extra-4.4.0-66-generic, mais bon de garder 4.4.0-72  et bien sûr 4.4.0-75.


0
2018-05-07 10:39





Pour la ligne de commande facile:

https://github.com/erichs/bootnukem

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

alors

sudo bootnukem --dry-run

0
2018-05-09 16:57





Fonctionne sur Linux Mint 18.3 (basé sur Ubuntu 16.04).

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

La source: https://ubuntuforums.org/showthread.php?t=2248846&p=13146650#post13146650


0
2018-01-23 15:47