Не удается выполнить обновление из-за нехватки места на диске при загрузке /загрузке

Я стараюсь делать do-release-upgradeно потом я получаю:

Недостаточно свободного места на диске

Обновление прервано. Для обновления требуется в общей сложности 25,7 Млн свободного места на диске "/boot". Пожалуйста, освободите по крайней мере дополнительные 25,7 М дискового пространства в разделе "/boot". Очистите корзину и удалите временные пакеты предыдущих установок с помощью "sudo apt-get clean".

Выход из df:

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

Почему при загрузке не осталось свободного места? Вот результат работы 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 grub10773 initrd.img-2.6.32-34-generic-pae13619 initrd.img-2.6.35-30-generic-pae15365 initrd.img-2.6.38-12-generic-pae16481 initrd.img-3.0.0-12-generic-pae16487 initrd.img-3.0.0-13-generic-pae16501 initrd.img-3.0.0-14-generic-pae16476 initrd.img-3.0.0-15-generic-pae16481 initrd.img-3.0.0-16-generic-pae16478 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

Выход из 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

Ваш раздел /boot заполнен старыми ядрами. Иногда он так делает, не знаю, почему это никогда не исправляется. Вы можете легко удалить старые ядра, если знаете, в каких упаковках они были.

Первая проверка uname -a чтобы проверить вашу текущую версию.

Затем выполните следующую команду:

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

Эта команда выведет список всех пакетов, которые вам больше не нужны. Мне не нравится удалять их автоматически, мне нравится контролировать, когда дело доходит до удаления ядер. Итак, для каждого перечисленного пакета выполните следующие действия:

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

Интермеццо

Это интермеццо более подробно описывает, как работают команды, и пытается устранить проблему с linux-libc-dev:amd64. Большинство пользователей могут пропустить этот абзац.

  • dpkg -l 'linux-*' перечислите все пакеты, имя которых начинается с "linux-"
  • sed '/^ii/!d; remove all lines that do *not* start withii`
  • uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/" найдите текущую запущенную версию ядра
  • /'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d Удалите все строки, кроме тех, которые содержат номер текущей версии ядра
  • s/^[^ ]* [^ ]* \([^ ]*\).*/\1/ Для каждой строки перечислите только имя пакета
  • /[0-9]/!d Удалите строки, которые не содержат цифр.

Чинить Проблема Фредерика Норда Я думаю, что команда может быть изменена следующим образом:

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

Это в основном добавляет дополнительный фильтр:

  • /^linux-(заголовки\|изображение)/!d Удалите все строки, которые не начинаются с linux-headers или linux-image

/Интермеццо

Где some-kernel-package может быть заменен одним из перечисленных пакетов. Просто будьте осторожны, чтобы вы не удаляли пакеты ядра, которые используются в настоящее время (как указано в uname -a) например. sudo apt-get purge -y linux-headers-3.0.0-12 и т.д.

Это можно автоматизировать с помощью команды xargs, но мне это не нравится. Это личное дело каждого. Тем не менее, вот команда для этого:

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

Это то, что мой /boot похоже, одно запасное ядро (2.6.38-11) на всякий случай и 3.2.0-24 является текущим:

$ ls -l /boottotal 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-genericdrwxr-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-genericdrwxr-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

И использование файловой системы:

$ df -h /bootFilesystem Size Used Avail Use% Mounted/dev/sda5  228M  63M  154M  29% /boot
sudo apt-get autoremove

для меня это сработало, он успешно очистил все неиспользуемые пакеты ядра.

Эквивалентно принятому ответу - другой (возможно) более простой способ - установить ubuntu-tweak инструмент, его можно загрузить с здесь. Перейдите в раздел "Уборщик" и выберите "Старое ядро" для очистки. Это можно сделать в несколько кликов. (протестировано на рабочем столе 14.04)

enter image description here

По сравнению с другими ответами с графическим интерфейсом здесь, преимущество этого ответа заключается в том, что родной Ubuntu Bash используется без установки сторонних приложений.

Решение на основе Zenity и Bash

Zenity предоставляет удобный графический интерфейс для терминала для обработки списка и выбора элементов с помощью переключатели-кнопки:

rm-kernels 1

Текущее ядро, с которым вы загрузились, не может быть удалено и не включено в список. Указанный размер - это то, сколько будет сохранено в /boot каталог. Больше сохраняется на вашем диске, потому что двоичные файлы ядра также находятся в других областях. 27 июля 2017 года примечание: Каталоги /usr/src/*kernel_version* и /lib/modules/*kernel_version* теперь они также включены.

То Дата изменения обнаруживается с помощью stat команда. В моей системе эта дата "тронутый" каждый раз, когда ядро загружается с помощью этого (Как вы узнаете, когда в последний раз загружалась конкретная версия ядра?) cron сценарий перезагрузки. Однако в вашей системе датой будет дата выпуска ядра, а не дата его последней загрузки.

apt-get purge дает вам шанс прервать

Вам предоставляется последняя возможность просмотреть все, что будет удалено, и увидеть общее дисковое пространство (несколько вводящее в заблуждение), которое будет восстановлено:

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] 

Код

Скопируйте этот код в исполняемый файл с именем rm-kernels в /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 sudoif [[ $(id -u) != 0 ]]; then    zenity --error --text "root access required. Use: sudo rm-kernels"    exit 99fiOLDIFS="$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 largechoices=(`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=0list=""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"     fidoneif [ "$i" -gt 0 ] ; then     apt-get purge $listfi

записка: Вам нужно разрешение sudo для создания файла, поэтому используйте:

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

Чтобы сделать файл исполняемым, используйте:

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

записка: Для серверной (текстовой, а не графической) версии этого скрипта см.: Как мне удалить старые версии ядра, чтобы очистить загрузочное меню?


Обновления от 28 июля 2017 года

Расчетный размер каждого ядра был взят из /boot/*kernel_version* которые представляли собой 5 файлов общим объемом ~ 50 МБ. Формула была изменена, чтобы включить файлы в /usr/src/*kernel_version* и /lib/modules/*kernel_version*. Расчетный размер для каждого ядра теперь составляет ~400 МБ. Приведенный выше код для rm-kernels и rm-kernels-server был обновлен. Однако приведенные выше примеры экранов пока не отражают эти изменения.

По умолчанию размер файлов для linux-headers оценивается в 125 МБ, а linux-image - в 220 МБ, поскольку du может быть мучительно медленным, если файлы не находятся в кэше. Чтобы получить реальный размер, используя du передайте любой параметр скрипту.

Общее количество всех размеров ядра (за исключением текущей запущенной версии, которую нельзя удалить) теперь отображается в строке заголовка.

Диалоговое окно, используемое для отображения каждого ядра Дата Последнего Доступа. Эта дата может быть массово перезаписана для всех ядер во время резервного копирования или аналогичных операций. В диалоговом окне теперь отображается Дата изменения вместо.

Вы можете легко обрабатывать ядра с помощью synaptic package manager.Но сначала вы должны знать используемое в настоящее время название версии ядра. Вы можете узнать это, запустив uname -r в командной строке терминала:

linux@linux-desktop:~$ uname -r4.4.0-75-generic

Так что, по крайней мере, эту версию вы должны оставить нетронутой.Откройте synaptic и начните заполнять заполнитель быстрого фильтра, как показано ниже:

quick filter search box at top in synaptic

Теперь вы можете выбрать все пакеты, которые вы хотите удалить, и выполнить:

Отметьте для полного удаления > Применить

Я бы посоветовал сохранить по крайней мере последний текущий пакет ядра и одно предыдущее ядро. Например, в этом случае вы можете безопасно избавиться от linux-образ-4.4.0-66- общий и linux-образ-дополнительный-4.4.0-66- общий, но было бы хорошо сохранить 4.4.0-72 и, конечно 4.4.0-75.

Для удобства командной строки:

https://github.com/erichs/bootnukem

git clone https://github.com/erichs/bootnukem.gitcd bootnukemsudo ./install.sh

Затем

sudo bootnukem --dry-run

Работает на Linux Mint 18.3 (на основе 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

Источник: https://ubuntuforums.org/showthread.php?t=2248846&amp ;p=13146650#post13146650

У меня была аналогичная проблема, когда я пытался выполнить обновление с помощью программы обновления программного обеспечения, и для меняsudo apt full-upgradeсделал свое дело.

связанные - grub2 - How do I remove old kernel versions to clean up the boot menu? - Ask Ubuntu

sudo apt-get autoremove Сработал как по волшебству.
В моем случае он очистил / загрузил неиспользуемые ядра. Использование диска снизилось со 100% до 40%.