Неможливо оновити через низьке місце на диску / завантаження


123

Я намагаюся зробити, 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

Додайте висновок до 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
затискач

5
Ні, це не. Це причина вашої проблеми. Якщо ваше запитання дійсно задовге, хтось його відредагує. Використання зовнішніх служб, таких як пастбін, призведе до порушення значення питання для подальшого використання.
jippie

Відповіді:


160

Ваш / завантажувальний розділ заповнений старими ядрами. Це робиться інколи, не знаючи, чому це ніколи не фіксується. Ви можете легко видалити старі ядра, якщо знаєте, до яких пакунків вони потрапили.

Спочатку перевірте, 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 /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

2
Це рішення було сильно натхнене статтею OzzyFrank на сайті ubuntugenius.wordpress.com/2011/01/08/…
jippie

6
Так, чому це питання - це питання? Це не повинно бути користувачем для обробки.
Ілля Лінн

2
FWIW: Для мене також відповідає linux-libc-dev: amd64. Тож це може бути занадто щедрим.
Фредерік Норд

4
It does that sometimes, not sure why it is never fixedUbuntu прийняв рішення в кращому або гіршому випадку надавати регулярні нові ядра як нові пакети, а не як оновлення до існуючих пакетів, щоб дати можливість встановити кілька ядер і переключитися між ними за бажанням. Я погоджуюсь, що це припущення не влаштовує 95% людей, які просто хочуть останнього ядра (і, можливо, одного резервного копіювання у випадку нових проблем із завантаженням) і не хочуть керувати самими встановленими ядрами. Можливо, в майбутньому Ubuntu змінить таку поведінку. Поки що переконайтеся, що ваш / завантажувач величезний.
thomasrutter

1
@thomasrutter Якщо ви (як я і 95% людей, про яких ви говорите) вважаєте, що ця помилка важлива, проголосуйте тут: bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1183692
FriendFX

46

sudo apt-get autoremove

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


3
це не правильно. з man apt-getautoremove використовується для видалення пакунків, які автоматично встановлювались для задоволення залежностей для певного пакету і більше не потрібні. ядро не встановлюється для задоволення залежностей, вони встановлюються під час оновлення.
двор

5
@neon_overload Я щойно опублікував це, тому що це зробив трюк для мене.
топлес

1
@dward Це звільнило для мене місце: перед autremove: /dev/sda1, 240M total, 171M used, 57M free, 75% used /boot after: /dev/sda1, 240M total, 129M used, 98M free, 57% used /boot
Стефан Рогін

6
У діалоговому вікні "Недостатньо вільного місця на диску" повинна бути кнопка для виконання цього завдання. Це особливо допоможе початківцям користувачам, які не знайомі з командним рядком.
Мартін Р.

1
Зробив трюк, не порушивши мою ОС
Рутвік Вайла

8

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

введіть тут опис зображення


Ситуація, де не вистачає місця, /bootвідбувається постійно, тому це моє улюблене рішення - простий запуск програми, яка виконує завдання одним клацанням миші.
s3m3n

2

Порівняно з іншими відповідями GUI тут перевагою цієї відповіді є те, що Ubuntu Bash використовується без встановлення сторонніх додатків.

Рішення на основі Zenity та Bash

Zenity забезпечує приємний інтерфейс GUI до терміналу для обробки списку та вибору елементів за допомогою перемикачів :

rm-ядра 1

Поточне ядро, з яким ви завантажилися, не може бути видалено і не включено до списку. Розмір повідомляється про те, скільки буде збережено в /bootкаталозі. Більше зберігається на вашому диску, оскільки бінарні файли ядра містяться і в інших областях. 27 липня 2017 р. Примітка: Довідники /usr/src/*kernel_version*і /lib/modules/*kernel_version*зараз також включені.

Дата зміни виявляється з допомогою statкоманди. У моїй системі ця дата "торкається" кожного разу, коли ядро ​​завантажується за допомогою цього ( Як дізнатися, коли конкретна версія ядра востаннє завантажувалася? ) Cron script перезавантаження. Однак у вашій системі датою буде дата випуску ядра, а не останній раз, коли ви її завантажували.

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передайте будь-який параметр сценарію.

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

Діалогове вікно, яке використовується для відображення кожної дати останнього доступу до ядра . Ця дата може отримати масове перезапис для всіх ядер під час резервного копіювання або подібних операцій. Діалогове вікно тепер замість цього відображає змінену дату .


Ти дивовижний! Дійсно велике спасибі! Ти зробив мене щасливим!
жартаунік

0

Ви можете легко обробляти ядра за допомогою синаптичного менеджера пакунків. Але спочатку вам слід знати поточне вживане ім'я релізу ядра, у підказку терміналу:

linux@linux-desktop:~$ 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 .



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.