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

115

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

Not enough free disk space

The upgrade has aborted. The upgrade needs a total of 25.7 M free space on disk '/boot'. Please free at least an additional 25.7 M of disk space on '/boot'. Empty your trash and remove temporary packages of former installations using '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
    
задан clamp 27.05.2012 в 16:48
источник

7 ответов

155

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

Сначала проверьте uname -a , чтобы проверить текущую версию.

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

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)//")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*//;/[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 with II '
  • uname -r | sed "s/\(.*\)-\([^0-9]\+\)//" найти текущую версию ядра ядра
  • /'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)//")"'/d Удалить все строки, кроме тех, которые содержат текущий номер версии ядра ядра
  • s/^[^ ]* [^ ]* \([^ ]*\).*// Для каждой строки перечисляется только имя пакета
  • /[0-9]/!d Удалить строки, которые не содержат чисел.

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

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)//")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*//;/[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]\+\)//")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*//;/[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
    
ответ дан jippie 27.05.2012 в 17:28
источник
44

sudo apt-get autoremove

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

    
ответ дан topless 24.04.2014 в 11:18
8

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

    
ответ дан Yixing 14.11.2015 в 08:00
2

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

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

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

Текущеезагруженноевамиядронеможетбытьудаленоиневключеновсписок.Сообщается,сколькобудетсохраненовкаталоге/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 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 , передайте любой параметр сценарию.

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

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

    
ответ дан WinEunuuchs2Unix 10.05.2017 в 04:54
0

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

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

    
ответ дан daGo 07.05.2017 в 12:39
0

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

Ссылка

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

Тогда

sudo bootnukem --dry-run
    
ответ дан Jonathan 09.05.2017 в 18:57
0

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

Источник: Ссылка

    
ответ дан Raffael 23.01.2018 в 16:47