Як звільнити більше місця в / завантаженні?


563

Мій /bootрозділ майже заповнений, і я отримую попередження щоразу, коли перезавантажую систему. Я вже видалив старі пакети ядра (Linux-заголовки ...), насправді я це зробив, щоб встановити новішу версію ядра, яка постачалася з автоматичними оновленнями.

Після встановлення нової версії розділ знову майже заповнений. То що ще я можу видалити? Чи є інші файли, пов’язані зі старими зображеннями ядра?

Ось список файлів на моєму /bootрозділі:

:~$ ls /boot/
abi-2.6.31-21-generic         lost+found
abi-2.6.32-25-generic         memtest86+.bin
abi-2.6.38-10-generic         memtest86+_multiboot.bin
abi-2.6.38-11-generic         System.map-2.6.31-21-generic
abi-2.6.38-12-generic         System.map-2.6.32-25-generic
abi-2.6.38-8-generic          System.map-2.6.38-10-generic
abi-3.0.0-12-generic          System.map-2.6.38-11-generic
abi-3.0.0-13-generic          System.map-2.6.38-12-generic
abi-3.0.0-14-generic          System.map-2.6.38-8-generic
boot                          System.map-3.0.0-12-generic
config-2.6.31-21-generic      System.map-3.0.0-13-generic
config-2.6.32-25-generic      System.map-3.0.0-14-generic
config-2.6.38-10-generic      vmcoreinfo-2.6.31-21-generic
config-2.6.38-11-generic      vmcoreinfo-2.6.32-25-generic
config-2.6.38-12-generic      vmcoreinfo-2.6.38-10-generic
config-2.6.38-8-generic       vmcoreinfo-2.6.38-11-generic
config-3.0.0-12-generic       vmcoreinfo-2.6.38-12-generic
config-3.0.0-13-generic       vmcoreinfo-2.6.38-8-generic
config-3.0.0-14-generic       vmcoreinfo-3.0.0-12-generic
extlinux                      vmcoreinfo-3.0.0-13-generic
grub                          vmcoreinfo-3.0.0-14-generic
initrd.img-2.6.31-21-generic  vmlinuz-2.6.31-21-generic
initrd.img-2.6.32-25-generic  vmlinuz-2.6.32-25-generic
initrd.img-2.6.38-10-generic  vmlinuz-2.6.38-10-generic
initrd.img-2.6.38-11-generic  vmlinuz-2.6.38-11-generic
initrd.img-2.6.38-12-generic  vmlinuz-2.6.38-12-generic
initrd.img-2.6.38-8-generic   vmlinuz-2.6.38-8-generic
initrd.img-3.0.0-12-generic   vmlinuz-3.0.0-12-generic
initrd.img-3.0.0-13-generic   vmlinuz-3.0.0-13-generic
initrd.img-3.0.0-14-generic   vmlinuz-3.0.0-14-generic

В даний час я використовую 3.0.0-14-genericядро.


5
Варто зазначити, що не кожна установка Ubuntu матиме окремий / завантажувальний розділ - часто це буде лише один великий розділ. Ця відповідь стосується тих, хто має окремий / завантажувальний розділ. Тим, хто використовує шифрування LVM або "повний диск", потрібна окрема / завантажувальна система, інакше це може бути необов'язково.
thomasrutter

4
Якщо у когось іншого є така ж проблема, як у мене: після / завантаження не залишилось місця, "apt-get upgrade" не вдасться при повторному генеруванні initrd-файлів для встановлених ядер, або що сценарій update-initramfs вважає встановленим, вивчаючи вміст / var / lib / initramfs-tools. У цій ситуації не можна видалити старі ядра за допомогою apt-get, оскільки на розділі fscking / boot на пристрої не залишилося місця. Це можна зробити за допомогою "dpkg -P" з подальшим очищенням відповідного запису в / boot (до вільного місця) та / var / lib / initramfs-tools (зображення initrd не буде генеруватися).
wojci

3
Ключовим моментом правильних відповідей є те, що вони говорять вам про видалення пакетів, що містять старіші версії ядра. Багато веб-сторінок, які вирішують цю проблему, рекомендують безпосередньо видалити файли в / boot розділі; це може працювати деякий час, але ви, зрештою, можете оновити пакет, який заново створює файли, відсутні для версій ядра, у яких є пакети, тим самим не вистачає місця.
kgrittn

Відповіді:


629

У вас багато невикористаних ядер. Видаліть усі, крім останніх ядер, за допомогою:

sudo apt-get purge linux-image-{3.0.0-12,2.6.3{1-21,2-25,8-{1[012],8}}}

Це скорочення для:

sudo apt-get purge linux-image-3.0.0-12 linux-image-2.6.31-21 linux-image-2.6.32-25 linux-image-2.6.38-10 linux-image-2.6.38-11 linux-image-2.6.38-12 linux-image-2.6.38-8

Видалення linux-image-x.x.x-xпакета також буде видалено linux-image-x.x.x-x-generic.

Заголовки встановлюються /usr/srcі використовуються при побудові модулів ядра ядра (наприклад, власний драйвер nvidia та virtualbox). Більшість користувачів повинні видалити ці заголовкові пакети, якщо не встановлений відповідний пакет ядра ( linux-image-*).

Щоб перелічити всі встановлені ядра, запустіть:

dpkg -l linux-image-\* | grep ^ii

Одна команда для показу всіх ядер та заголовків, які можна видалити, виключаючи поточне запущене ядро:

kernelver=$(uname -r | sed -r 's/-[a-z]+//')
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve $kernelver

Він вибирає всі пакети, названі починаючи з linux-headers-<some number>або linux-image-<some number>, друкує назви пакетів для встановлених пакетів, а потім виключає поточне завантажене / запущене ядро (не обов'язково останнє ядро!). Це відповідає рекомендаціям протестувати новіше ядро ​​перед видаленням старих, відомих для роботи ядер.

Отже, після оновлення ядер та перезавантаження для тестування ви можете видалити всі інші ядра за допомогою:

sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")

16
Фантастична відповідь. Ще одна інформація допоможе: Як ви можете точно сказати, яке з ядер ви використовуєте? Імовірно, ви не можете просто припустити, що це остання ... Редагувати : І, схоже, відповідь є uname -a. Напевно, найкраще переконатися, що у вас не очікує перезавантаження, що очікує на інсталяцію нового ядра (як я це зробив; але я зазначив невідповідність між uname -aядром та "останньою").
TJ Crowder

5
@freddyb Готово. Зауважте, що команди друкує / видаляє ядра, крім завантаженого / завантаженого .
Лекенштейн

9
Якщо очищення від вдалого
svandragt

11
Дуже ретельна відповідь і досі працює ... і все ще потрібна в 2014 році. Смішно, що це все ще не робиться автоматично інструментами графічного інтерфейсу.
allprog

6
@ byf-ferdy Ядро є невід'ємною частиною ОС, якщо найновіша версія якимось чином не повністю працює з вашим обладнанням, то ви все одно можете вибрати іншу для завантаження. Приємною особливістю може бути щось, що видаляє всі автоматично встановлені ядра старше місяця (за винятком останніх двох).
Лекенштейн

217

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

uname -r

Потім скористайтеся цією командою для друку всіх встановлених ядер, які не є вашим найновішим:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Переконайтесь, що ваше поточне ядро ​​відсутнє у цьому списку. Зверніть увагу, як це більшість фінальних команд (внизу). Щоб видалити та видалити ці старі ядра, вам потрібно передати ці аргументи:

sudo apt-get -y purge

Тепер ми можемо робити все, що завгодно, комбінуючи ці дві останні команди в цей нечесний безлад:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

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


це також відповідає linux-libc-dev: amd64
Фредерік Норд

до чого призведе ненавмисне видалення "linux-libc-dev: amd64"?
ConfusedStack

@FrederickNord дякую за голову вгору. Виправлено це. Це спричинило б певні труднощі при складанні програм c.
dward

8
Команда звучить добре, але коли я її запускаю, я отримую ту саму помилку, яку я отримую, коли хочу щось встановити, і вона не може це зробити, тому що завантаження повно: --------------- ----------- Наступні пакети мають невиконані залежності: linux-image-extra-4.2.0-27-generic: Залежить: linux-image-4.2.0-27-generic, але він не збирається встановлюється linux-image-extra-4.2.0-30-generic: Залежить: linux-image-4.2.0-30-generic, але він не збирається встановлювати
Alex

109
sudo apt-get autoremove

Ця команда виконує завдання автоматично.


7
Як випливає з назви, apt-get AUTOremove - це автоматизована операція, коли система найкраще здогадується, що ви намагаєтесь досягти. Його не слід використовувати як заміну для управління здоровим глуздом. Проблема з таким підходом: якщо ви (або оновлення) видаляєте пакет, що входить до цього списку залежностей, функція автоматичного видалення хоче видалити всі інші пакети зі списку залежностей, залишивши вас із системою без робочого робочого столу (а іноді навіть із повністю порушеною системою).
Rinzwind

Довідка: 1 з багатьох джерел для цього коментаря вище: linuxquestions.org/questions/debian-26/…
Rinzwind

7
якщо встановлено linux-image-generic і нові ядра не були встановлені явно, це видалить старі ядра. Здоровий глузд - не приймати жодних змін у системі, не читаючи їх попередньо. Якщо до використання цієї команди був використаний здоровий глузд, то проблем не виникне.
мчід

1
@Rinzwind - Ця команда випорожнила 250 мб мого дискового простору, видаливши старі "linux заголовки"
Chinmaya B

3
autoremove працює, якщо використовується раніше, ніж існує умова поза простором. Однак, коли apt не вистачає місця та перериває (а користувач нарешті помічає проблему), вже запізно запускати autremove або будь-яке інше рішення, засноване на підходах. Якщо це для вас, спробуйте одне з рішень на основі dpkg.
користувач535733

40

Synaptic Package Manager можна використовувати для легкого вибору та видалення старих зображень ядра. Знімок екрана менеджера Synaptic Package

Якщо у вас ще не встановлено Synaptic:

sudo apt-get install synaptic

Запустіть програму та виберіть показані параметри.

Ви повинні мати змогу виділити всі пакети "linux-" з версією "2.6.x", де x становить від 31 до 38 відповідно до файлів у папці / boot.

Клацніть правою кнопкою миші кожен з цих пакетів Linux та оберіть опцію "Позначити для повного видалення". Нарешті натисніть кнопку застосувати. Це видалить усі файли та всі пов’язані з ними файли. Тепер ваша /bootпапка має бути трохи охайнішою.


Я 14.04. Раніше я обробляв цю ситуацію за допомогою командного рядка, але вирішив спробувати цей метод сьогодні ... для мене мої зображення Linux знаходилися під встановленим (ручним), а не встановленим (локальним чи застарілим)
Ryan

8
О ні. Я не можу встановити Synaptic, оскільки в ньому немає місця /boot!
Джон Макгі

@JohnMcGehee fsck і розлучення повинні вирішити цю проблему для вас.
FlipMcF

25

Дякую за детальну публікацію вашої проблеми, це змусило мене йти в правильному напрямку. Хоча корисно зберігати попередні файли ядра, ви можете видалити їх усі за один раз, перевірте цей пост:
Як видалити всі невикористані заголовки, зображення та модулі Linux ядра

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

Ось це скопійовано із посилання на статтю, я пропоную вам прочитати повну статтю:

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

23

Це нова відповідь на старе питання, але простий спосіб очистити цю річ (і багато іншого) - це встановити Ubuntu Tweak . Щоб встановити його :

sudo add-apt-repository ppa:tualatrix/ppa
sudo apt-get update
sudo apt-get install ubuntu-tweak

тоді ви можете запустити Ubuntu Tweak, перейшовши на вкладку "двірник", і звідси справа в три кліки:

Ubuntu налаштування двірника для старих ядер

Для безпеки краще залишити останнє ядро ​​(ніколи не відомо) або добре відоме робоче ядро; але це легко настроюється.

Ви можете використовувати той же інструмент для очищення багатьох речей --- просто пам’ятайте, що якщо ви очистите міні-кеш або кеш-пам'ять, то системі доведеться перебудувати їх, якщо вони знадобляться.


Я спробував встановити налаштування Ubuntu, а також перейти на веб-сайт сховища. Каже, це лише за 13.10 і раніше. Чи є у вас оновлена ​​версія до 15.04?
JayCouture.com

@ JayCouture.com Версія на сайті призначена для 14.04 ("на 13.10 і раніше" - посилання на старіші випуски). Я ігнорую, чи є версія для 14.10 або 15.04.
Рмано

19

Мені вдалося виправити проблему, використовуючи безпосередньо dpkgдля видалення пакунків. Хоча пакети все ще перераховані в dpkg -l, файли видаляються /boot, звільняючи місце.

phrogz@planar:/boot$ sudo dpkg --remove linux-image-2.6.32-30-server
(Reading database ... 145199 files and directories currently installed.)
Removing linux-image-2.6.32-30-server ...
Running postrm hook script /usr/sbin/update-grub.
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-35-server
Found linux image: /boot/vmlinuz-2.6.32-34-server
Found initrd image: /boot/initrd.img-2.6.32-34-server
Found linux image: /boot/vmlinuz-2.6.32-33-server
Found initrd image: /boot/initrd.img-2.6.32-33-server
Found linux image: /boot/vmlinuz-2.6.32-32-server
Found initrd image: /boot/initrd.img-2.6.32-32-server
Found linux image: /boot/vmlinuz-2.6.32-31-server
Found initrd image: /boot/initrd.img-2.6.32-31-server
Found memtest86+ image: /memtest86+.bin
done

# Repeat for kernels -31 and -32 and -33, up to (but not including)
# the version listed by `uname -a`

Після цього apt-get -f installвиправили мої проблеми із залежністю, і все було добре зі світом.

Однак я не сприймаю моєї відповіді, оскільки мені ще потрібно знати, чи варто мені збільшувати /bootрозмір чи робити щось інше.


У вас не повинно бути або окремого / завантажувального розділу в першу чергу, або ви повинні збільшити його розмір, оскільки 100 Мб занадто мало.
psusi

1
Дякую, sudo dpkg --remove linux-headers-3.5.0-28*
видаляю

2
а sudo dpkg --remove linux-image-3.5.0-28*для зображення, перевірено черезdf -h
TiloBunt

Дякую, і це мені послужило. Я видалив кілька старих ядер ( не тих, якими я зараз користувався), а потім зробив apt-get -f install. Крім того, не забудьте пізніше зробити це apt-get autoremove, щоб можливо видалити інші непотрібні.
Yajo

15

Ви можете припинити використовувати окремий / завантажувальний розділ, тоді у вас не буде такого обмеженого простору. Для цього відключіть розділ, потім встановіть його десь інше та скопіюйте всі файли там у каталог / boot у вашому кореневому розділі, а потім видаліть запис із / etc / fstab та перевстановіть grub. Наприклад (вам потрібно буде використовувати правильний розділ):

sudo -s
umount /boot
mount /dev/sda2 /mnt
cp -a /mnt/* /boot/
umount /mnt
gedit /etc/fstab
grub-install /dev/sda

Потім можна використовувати gparted для видалення старого / завантажувального розділу та, можливо, розширення кореневого розділу для використання цього простору. Щоб розширити кореневий розділ, вам потрібно буде завантажитися з livecd, і вільний простір повинен бути негайно праворуч. Якщо розділ / boot наразі знаходиться зліва від кореневого розділу, вам потрібно спочатку перемістити кореневий розділ вліво, потім розширити його, але це може зайняти дуже-дуже довго, тому, можливо, не варто неприємності.


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

Це хороше рішення, якщо рішення вище не працюють через відсутність місця у томі завантаження або якщо у вас неодноразово виникає проблема "поза космосом". Спочатку прочитайте, чому іноді потрібно мати розділ / boot, хоча: ( help.ubuntu.com/community/DiskSpace )
svandragt

@svandragt, в основному не залишається жодних причин потребувати розділу / boot в ці дні. Залишилося лише те, якщо ваш біосбиток зламаний і не видно весь диск, а будь-яка машина, виготовлена ​​за останнє десятиліття, не має такого обмеження. Інші застарілі випадки, такі як використання рейду або LVM, тепер належним чином обробляються grub2.
psusi

Існує кілька причин виникнення окремого завантажувального розділу. Але я не впевнений, що переваги варті збільшення налаштування складності. 1. ОС може скористатися швидшим завантаженням через ext2. 2. Безпека може бути підвищена шляхом встановлення / завантаження як RO. (руткіти тощо) або навіть залишатись відключеними під час виконання програми. 3. grub (1) має (ще) деякі проблеми з ext4 досі. 4. Необхідний для запуску lvm ​​(grubv1). Хоча це не стосується налаштувань ubuntu за замовчуванням.
Девід Кейхілл

lsblkможна використовувати, щоб визначити, який саме розділ
містер Перплей,

9

Отримавши найкраще з вищезазначених відповідей, мій перевірений підхід такий:

  • uname -a щоб знайти ядро, що працює.
  • dpkg -l linux-{headers,image}-\* | grep ^iiперерахувати всі встановлені на даний момент пакети ядра. Сюди ввійде запущене ядро.
  • sudo apt-get purge linux-{image,headers}-3.16.0-{xx,yy,zz}щоб видалити старі ядра. Замініть xx,yy,zzперелік збірок ядра, які ви хочете видалити - це всі збірки, перелічені попередньою командою, які є старшими за поточно працююче ядро. Переконайтеся, що ви не видалите поточно працююче ядро ​​- ваша система стане незавантаженою . Вам також може знадобитися змінити версію ядра 3.16.0на те, що встановлено у вашій системі.
  • За бажанням, зробіть додатковий sudo apt-get autoremove- це видалить будь-які залишкові залежності старих ядер, які вже не потрібні поточному, звільнивши ще трохи місця.

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

Якщо щось не вдається ...

  • Якщо команда не схильна з - за не залишилися на пристрій простору помилки, використовуйте відповідне DPKG команди замість: sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}.
  • Якщо команда dpkg все ще не працює, тому що linux-imageпакети потрібні linux-headersпакетами тієї ж версії (яку ви також хочете видалити), можливо, dpkg не зможе це вирішити. Повторно вивчіть вихід dpkg -lі вкажіть будь-які суфікси імен пакету в командному рядку. Наприклад, на одній з моїх систем була команда, яка врешті працювала sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}-generic-pae.
  • Якщо ви отримаєте будь-яку іншу помилку, зверніться за допомогою - у вас може виникнути проблема, ніж ви думали.

@ user535733 звичайний випадок (принаймні той, в який я постійно працюю) полягає в тому, що в ньому ще є трохи місця /boot, просто не вистачає іншого пакета ядра. У цих випадках вищезазначене спрацювало добре. Однак не соромтеся додати відповідну dpkgкоманду. Що стосується purge, ні, це не є своєрідним «примусовим зняттям». Це відрізняється від того remove, що він також видаляє файли конфігурації. Оскільки / до тих пір , як пакети ядра не встановлювати і НЕ конфігураційних файлів, removeі purgeбуде робити те ж саме для пакетів ядра.
користувач149408

Додана четверта куля з відповідною командою dpkg.
user535733

4

Для мене і те, apt-get purgeі dpkg --removeінше не вдалося. Тому мені довелося видалити кілька старих зображень ядра з / завантаження rm -f.


4
Це не гарний спосіб видалення пакетів. Хоча ця відповідь не дуже конкретна щодо того, чому не вдалося їх усунути правильним способом, я впевнений, що якщо ця інформація була надана (звичайно, в окремому запитанні), ми зможемо спробувати з’ясувати причину проблеми.
thomasrutter

2
Я вважаю, що це не вдалося, тому що /bootрозділ був повний. Ці команди спершу спробуйте оновити ядро ​​до недавнього та No space left on deviceinitrd.img
вийти з ладу

1
ПОПЕРЕДЖЕННЯ, безпосередньо видалення файлів може призвести до проблем, оскільки оновлення пакета програмного забезпечення linux може відтворити файл initrd.img для кожної версії, яку він вважає встановленою на основі інформації про пакет. Дивіться: askubuntu.com/questions/865577/…
kgrittn

1
спасибі, це остаточне рішення, яке рятує життя, коли більше нічого не працює.
Джефф Пукетт

4

Список усіх ядер:

dpkg --list 'linux-image*'

Показати поточне ядро:

uname -r

Перерахуйте всі ядра ВДАЧИ поточного:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Переконайтесь, що ваше поточне ядро ​​відсутнє у цьому списку.

Видаліть усі ядра, Окрім поточного:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

Очистити інші речі:

sudo apt-get autoremove

Якщо все-таки виникає помилка завантажувального дискового простору для встановлення / видалення файлів, тоді безпосередньо видаліть одне зображення OLD із каталогу / boot,

ls -lh /boot/*-3.13.0-119*;

rm /boot/*-3.13.0-119*; 

ПРИМІТКА. Перегляньте поточне зображення ядра ще раз, перш ніж видаляти будь-яке зображення.


2

Я вже видалив старі пакети ядра (Linux-заголовки ...)

linux-headers-*не є ядрами. Пакети ядра є названими linux-image-*. Названі - linux-headers-*це пакети розробки для компіляції модулів ядра: вони не живуть у каталозі / boot і не потрібні для загального щоденного використання вашої системи.

Файли, перелічені в / boot , включають декілька старих зображень ядра ( vmlinuz*) та скомпільовані зображення initrd ( initrd.img*) для цих ядер, що свідчить про те, що у вас все ще встановлено багато старих пакетів ядра.

Ви повинні мати можливість перелічити встановлені ядра

aptitude search ~ilinux-image

(Зверніть увагу, що це, ймовірно, поверне пакети, які теж не є ядрами).

Зазвичай не потрібно встановлювати більше двох ядер - першого, що використовується, і попереднього для цього (як резервний). Таким чином, ви можете почати видаляти старіші, по черзі, так:

sudo apt-get autoremove linux-image-3.2.0-23-generic

Переконайтесь, що ви замінили "3.2.0-23-generic" фактичною версією ядра, яку ви хочете видалити! Також не видаляйте такі пакунки, як linux-image-generic. Ви повинні бути дуже обережними, щоб не видалити запущене в даний час ядро, або ви не зможете завантажуватися (Ubuntu може або не попередить вас про це).

Ви можете знайти своє поточне ядро ​​за допомогою:

uname -r

1

У мене була ця проблема і більше, оскільки я видалив деякі initrd-img-xxxфайли вручну з / boot, і у мене виникла проблема, що ці старі версії генеруються та заповнюються в /bootпапці. Щоб виправити це, я дотримувався наступного:

  • Я видалив генеровану стару версію ядра вручну, щоб звільнити місце.
  • Ви будете редагувати текстовий конфігураційний файл як надрукований, тому вставте наступне в термінал:

    sudo gedit /etc/initramfs-tools/update-initramfs.conf
    
  • Знайдіть рядок update_initramfs=yesта змініть його на update_initramfs=no. Збережіть і закрийте файл, а потім запустіть:

    sudo dpkg --configure -a
    

Це вирішило мою проблему. Це було засноване на цьому блозі

Будемо сподіватися, що все повинно бути добре , коли ви перезавантажитеся, а потім ви можете спробувати змінити noспиною до yesв update-initramfs.conf.


1

Я показую, що ще в 2017 році на це запитання є нові коментарі та відповіді, але пропущена одна відповідь, яка, на мою думку, дуже корисна тут:

Ubuntu як настільна ОС простого повсякденного використання не має підстав встановлювати окремий \ завантажувальний розділ, а щось подібне НЕ пропонуватиме "звичайному користувачеві" ... Отже, рішення - це нова установка без \ boot-розділу та це так у вас ніколи не виникне такої проблеми

PS: Мою відповідь можна видалити або додати до прийнятої відповіді ... (Я думаю, це допоможе деяким людям таким чином)



0

У придатності або синаптиці є розділ "старий або встановлений вручну упакований". Там повинні бути старі пакети Linux.


0

Нижче є написаний сценарій bash, який робить процес трохи більш зручним для користувачів.

YMMV - це було зроблено для Монетного двору 14. Ще вивчаю BASH, тому, мабуть, трохи незграбно. Використовуйте на власний ризик, але це працює на мене!

#!/bin/bash

endCol='\e[0m'
bold_red='\e[1;31m'
bold_green='\e[1;32m'
bold_yellow='\e[1;33m'

title_color='\e[0;30;47m'

function show_kernel_info {
clear
current_kernel=$(uname -r)
echo "Current ACTIVE kernel is:"
echo -e "  "$bold_yellow$current_kernel$endCol
echo "This kernel will be TOTALLY EXCLUDED from all actions in this script."
echo "Also, one fallback non-active kernel will be always left untouched."
echo ""
echo "These are the non-active kernels stored in /boot:"
count_of_old_kernels_in_boot=$(ls -o /boot/initrd* | grep -c -v "$current_kernel")
if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo " * No non-active kernels found! *"
else
  ls -o /boot/initrd* | grep -v "$current_kernel"
fi
echo ""
list_of_old_kernels=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic")
current_old_kernel=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic" | head -n 1)
count_of_old_kernels_installed=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -c -v "linux-image-generic")
echo "Listing of all unused kernels still installed in the system (these may not exist in /boot):"
if [ $count_of_old_kernels_installed = 0 ]; then
  echo " * No unused kernel installs found! *"
else
  dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic"
fi
echo ""
}

function exit_script {
free_space_after=$(df -BM /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
let freed_space=$free_space_after-$free_space_before
echo ""
echo "Results (in MB)"
echo "---------------"
echo "Free space in /boot before script was run: "$free_space_before
echo "Free space now: "$free_space_after
echo ""
echo "Amount of space freed up = "$freed_space
echo ""
echo "Press any key to exit."
read -s -n 1
echo ""
exit
}

# Main code
echo ""
echo -e $title_color" --------------------------- "$endCol
echo -e $title_color" -   Kernel Cleanup v1.0   - "$endCol
echo -e $title_color" --------------------------- "$endCol
echo ""
echo "Maximise this window for readability."
echo "Press any key to continue."
read -s -n 1
echo ""
echo "This script will remove old unused kernels, but it will prompt you before removing each one."
echo "It will never remove the current running kernel, and will also leave one fallback kernel."
echo "It can also remove source files from /usr/src for each kernel removed."
echo "This is normally safe to do and will free up lots more space."
echo ""
echo "Do you want that done as well? (y/n, enter=yes)"
valid_input=0
while [ "$valid_input" = "0" ]; do
  read -s -n 1 YesNo_input
  if [ "$YesNo_input" = "" ]; then
    YesNo_input="y"
  fi
  case $YesNo_input
  in
    y)
    RemoveSource="y"
    valid_input=1
    ;;

    Y)
    RemoveSource="y"
    valid_input=1
    ;;

    n)
    RemoveSource="n"
    valid_input=1
    ;;

    N)
    RemoveSource="N"
    valid_input=1
    ;;
  esac
done

free_space_before=$(df -h /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
show_kernel_info
while [ $count_of_old_kernels_in_boot -gt 1 ]; do
  # failsafe check if somehow the current kernel is about to be removed!
  if [ "$current_old_kernel" = "$current_kernel" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow the current kernel has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  # failsafe check if somehow a linux-image-generic entry is about to be removed
  if [ "$current_old_kernel" = "linux-image-generic" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow one of the linux-image-generic entries has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  echo "Command about to be executed is:"
  echo "  $ sudo apt-get purge \"$current_old_kernel\""
  check_in_boot=$(echo $current_old_kernel | sed 's/linux-image/initrd.img/g')
  if [ -e /boot/$check_in_boot ]; then
    echo -e $bold_yellow"Note:"$endCol" This kernel exists in /boot but it NON-active, so it's OK to remove."
  else
    echo -e $bold_green"Totally safe to remove:"$endCol" This kernel does NOT exist in /boot."
  fi
  echo ""
  echo "Are you sure you want to remove this kernel?"
  echo "(*upper case* Y=yes / any other key will exit the script)"
  read -s -n 1 yes_no
  echo ""
  # Only entering a single upper case Y will work!
  if [ "$yes_no" != "Y" ]; then
    echo "Aborting script."
    exit_script
  fi
  echo "Removing kernel "$current_old_kernel"..."
  sleep 1
  sudo apt-get -y purge $current_old_kernel
  if [ "$RemoveSource" = "y" ]; then
    current_old_source=$(echo $current_old_kernel | sed 's/linux-image/linux-headers/g')
    current_old_source=$(echo $current_old_source | sed 's/-generic//g')
    current_old_source=$(echo $current_old_source | sed 's/-pae//g')
    sudo apt-get -y purge $current_old_source
  fi
  show_kernel_info
done

if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo -e $bold_red"There are no NON-active kernels to remove!"$endCol
else
  echo -e $bold_red"There is only one NON-active kernel left in /boot!"$endCol
  echo "This script will not remove the last non-active kernel so that you have at least one backup kernel."
fi
echo "Aborting script."
exit_script

0

[Як нобу AskUbuntu, я не можу коментувати до репутації = 50, тому не голосуйте через це.]

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

Єдине, що для мене працювало - це переглянути поточне зображення, а потім вручну знайти sudo rm filenameнайстаріші файли зображень (у кожному з них було по -3.16.0-30 ). Після того, як це було зроблено, тоді sudo apt-get autoremoveбула кімната, що потрібна для виконання своєї роботи. Він виділив деякі помилки, пов'язані з цією версією, наприклад: "depmod: FATAL: не вдалося завантажити /boot/System.map-3.16.0-30-generic: Немає такого файлу чи каталогу", але цього варто очікувати.

Закінчивши, dfповернув 42% у використанні для / завантаження, щоб вказати, що він знову здоровий.


1
Повідомлення, яке ви шукаєте, - askubuntu.com/questions/171209/…
muru

@muru Ну, так ... Я б припустив, що оригінальний плакат теж потребує цієї поради. Після того, як / завантаження заповнене, ці сценарії версії, які намагаються виправити, також виходять з ладу, тому що / boot заповнений.
Справа Джастіна

Ну, є дві подібні проблеми: а) де система попереджає, що ваш диск заповнюється, але apt-getмає достатньо місця для продовження, і b), де apt-getвиходить з ладу, оскільки диск занадто повний. Це інша посада.
муру

0

Я написав цей скрипт bash, щоб селективно очистити старі ядра все відразу:

реальні розміри ядер

Весь код bash та інструкції включені у посилання.


0

Збережіть цей сценарій як /usr/local/bin/remove_kernels.sh(пам’ятайте, щоб дати дозволи на виконання sudo chmod 755 /usr/local/bin/remove_kernels.sh):

#!/bin/sh
if test $(id -u) != 0; then
 echo Error: You must be root to run this script!
 exit 1
fi
apt purge $( dpkg --list | grep -P -o "linux-image-\d\S+" | grep -v $(uname -r | grep -P -o ".+\d") )
update-grub

Потім для видалення всіх старих ядер просто введіть: sudo remove_kernels.sh


0

/ іноді завантажувальний розділ може бути дещо дивним

не починайте безпосередньо видаляти файли ядра.

Кроки для виконання

  1. Перевірте наявний в даний час ядро, яке використовує система Linux

    uname -r

    це повинно дати вам ім'я поточно встановленого зображення ядра в системі

  2. Тепер починайте видаляти зайві файли, окрім одного конкретного, встановленого у вашій системі

    apt-get remove linux-image-XXXXX

  3. Також видаліть файл заголовка

    apt-get remove linux-headers-XXXXX

  4. Також може виникнути стан, коли aptвін перестав працювати, у такому випадку перейти на / завантажувати

    cd /boot

  5. Почніть видаляти файли вручну, але дуже обережно також пам’ятайте, що не видаляйте installed one'sфайли ядра з вашої системи.

    rm linux-image-XXXXX

    rm linux-image-extra-XXXXXX

  6. Після видалення правильних файлів очищення файлів частково встановлюється, якщо такі є

    apt-get -f install

  7. Видаліть зайві файли, що сидять там, як завантажувальні файли чистяться вручну

    apt-get autoremove

  8. Оновити груб

    update-grub

  9. Нарешті оновіть ваші системні пакети

    apt-get update


-1

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

Попередження : Змінення розміру розділу є небезпечною операцією, зберігайте важливі дані на інших носіях, перш ніж це робити!


Більшість тих, хто страждає невеликими роздільними / завантажувальними розділами, після встановлення вибрали "шифрування цілого диска", для чого потрібен LVM. Це рішення, здається, спричинить більше проблем, ніж вирішує для цих користувачів.
користувач535733
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.