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


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

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

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

Вывод 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

Почему при загрузке не осталось места? Вот результат 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

Вывод 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


происхождения


Добавьте вывод в ls -l /boot а также uname -a на ваш вопрос. - jippie
Также добавьте вывод в dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' на ваш вопрос. - jippie
ls -as /boot может быть полезно вместо этого. Он будет содержать только размеры файлов. - adempewolff
вывод ls -l / boot довольно длинный, поэтому здесь есть пастебин pastebin.com/yM1aEJUx - clamp
Нет. Это причина вашей проблемы. Если ваш вопрос действительно слишком длинный, кто-то отредактирует его. Использование внешних сервисов, таких как пастебин, нарушит ценность вопроса для дальнейшего использования. - jippie


ответы:


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

Первая проверка 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

Интермеццо

Этот intermezzo более подробно описывает, как работают команды, и пытается исправить проблему с помощью 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- (headers \ | image) /! 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 /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

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

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

155
2018-05-27 15:28



Это решение сильно вдохновило статью Оззи Франка на ubuntugenius.wordpress.com/2011/01/08/... - jippie
Да, почему это вопрос? Это не должно быть для пользователя. - Elijah Lynn
FWIW: Это также соответствует Linux-libc-dev: amd64 для меня. Так что это может быть очень щедро. - Frederick Nord
It does that sometimes, not sure why it is never fixed Ubuntu приняло решение, к лучшему или худшему, предоставить новые новые ядра в качестве новых пакетов, а не как обновления существующих пакетов, чтобы дать возможность установить несколько ядер и переключиться между ними по своему усмотрению. Я согласен с тем, что это предположение не устраивает 95% людей, которым просто требуется последнее ядро ​​(и, возможно, один резерв в случае новых проблем с загрузкой), и которые не хотят управлять установленными ядрами самостоятельно. Возможно, в будущем Ubuntu изменит это поведение. Пока, убедитесь, что ваш / boot огромен. - thomasrutter
@thomasrutter Если вы (как я и 95% людей, о которых вы говорите) думают, что эта ошибка важна, проголосуйте здесь: bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1183692 - FriendFX


sudo apt-get autoremove 

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


43
2018-04-24 09:18



это неверно. из man apt-get autoremove используется для удаления пакетов, которые были автоматически установлены для удовлетворения зависимостей для некоторых пакетов, и которые больше не нужны. ядро не будет установлено для удовлетворения зависимостей, они будут установлены во время обновлений. - dward
@neon_overload Я только что опубликовал его, потому что он сделал трюк для меня. - topless
@dward Это освободило для меня пространство: перед autremove:  /dev/sda1, 240M total, 171M used, 57M free, 75% used /boot  после:  /dev/sda1, 240M total, 129M used, 98M free, 57% used /boot - Stefan Rogin
@clickstefan первый ответ правильный. смотрите также askubuntu.com/questions/89710/... - dward
Для выполнения этой задачи должна быть кнопка для диалога «Недостаточно свободного места на диске». Это особенно поможет начинающим пользователям, которые не знакомы с командной строкой. - Martin R.


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

enter image description here


8
2017-11-14 07:00



Ситуация с отсутствием места на /boot происходит все время, так что это мое любимое решение - легко запускаемое приложение, выполняющее работу одним щелчком мыши. - s3m3n


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

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

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

rm-kernels 1

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

Измененная дата обнаруживается с использованием stat команда. В моей системе эта дата «Прикоснулся» каждый раз, когда ядро ​​загружается с помощью этого (Как узнать, когда была загружена последняя версия ядра?) хрон перезагрузите скрипт. Однако в вашей системе дата будет датой выпуска ядра, а не в последний раз, когда вы ее загрузили.

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

ЗАМЕТКА: Вам нужно sudo разрешение на создание файла, поэтому используйте:

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

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

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

ЗАМЕТКА: Для версии сценария для сервера (на основе текста, а не GUI) см .: Как удалить старые версии ядра для очистки меню загрузки?


28 июля 2017 г. Обновления

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

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

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

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


2
2018-05-10 02:54



Ты великолепен! Очень большое спасибо! Ты делаешь меня счастливым! - zhartaunik


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

linux@linux-desktop:~$ uname -r 4.4.0-75-generic Так что, по крайней мере, эта версия должна оставаться нетронутой. Откройте синаптический интерфейс и запустите заполняющий фильтр, как показано ниже: enter image description here Теперь вы можете выбрать все пакеты, которые вы хотите удалить, и сделать следующее: Отметьте для полного удаления -> Применить, Я бы предложил сохранить хотя бы последний текущий пакет ядра и одно предыдущее ядро. Например, в этом случае вы можете спокойно избавиться от Linux-образ-4.4.0-66-родовой а также Linux-образ-экстра-4.4.0-66-родовой, но хорошо держать 4.4.0-72  и, конечно же, 4.4.0-75,


0
2018-05-07 10:39





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

https://github.com/erichs/bootnukem

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

затем

sudo bootnukem --dry-run

0
2018-05-09 16:57





Работает на 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&p=13146650#post13146650


0
2018-01-23 15:47