Який найбезпечніший спосіб очищення / завантаження розділу?


273

У мене на /bootрозділ призначено 200 МБ . Кожного разу, коли я намагаюся оновити ядро, я отримую повідомлення про помилку, яке в основному повідомляє, що /bootце повно.

Що я можу зробити для очищення /bootта видалення / резервного копіювання старих ядер?


1
Дивіться Wiki Ubuntu Community Wiki
jarno

Якщо / завантаження заповнене, дивіться askubuntu.com/questions/263363/…
nslntmnx

Відповіді:


334

Метод командного рядка:

Спочатку перевірте свою версію ядра, щоб ви не видалили використовуване зображення ядра, запустивши:

uname -r

Тепер запустіть цю команду для списку встановлених ядер:

dpkg --list 'linux-image*' | grep ^ii

та видаліть ядра, які вам більше не потрібні / не потрібні, виконавши це:

sudo apt-get remove linux-image-VERSION

Замініть VERSION версією ядра, яке потрібно видалити.

Закінчивши видалення старих ядер, ви можете запустити це, щоб видалити коли-небудь пакети, які вам більше не знадобляться:

sudo apt-get autoremove

І, нарешті, ви можете запустити це для оновлення списку ядер grub:

sudo update-grub

34
sudo dpkg --list 'linux-image*' | grep ^iiполегшує перегляд лише встановлених ядер. Також я думаю, що update-grubнешкідливий, але не суворо необхідний, який запускається автоматично, коли ви видаляєте ядро.
Нельсон

9
Використовуйте sudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo ""для отримання списку імен пакунків, з якими потрібно використовувати sudo apt-get remove. head -n -3використовується для збереження 3 останніх ядер, що залишилися в системі.
Сітсу

2
мій простий один лайнер:apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
gcb

27
sudo apt-get autoremoveмає вистачити (зазвичай залишають вас з останніми 3 ядрами)
mbx

6
Це хороша відповідь, але я сумніваюся, що це може спрацювати у більшості випадків (якщо не у всіх): питання /bootповне, тому apt-getне вдасться з деяким кодом помилки чи іншим. Відповідь нижче трохи «дилетантський» (я повинен зізнатися , що я повинен був сам стали видавати , що rm -rfв /boot) , але тільки один , який, ймовірно , буде працювати в цій ситуації.
Марко

283

ПРИМІТКА: це лише в тому випадку, якщо ви не можете використовувати apt для очищення через 100% повного завантаження

Якщо apt-get не функціонує, оскільки ваш / завантажувач знаходиться на 100%, вам потрібно спочатку очистити / запустити. Це, ймовірно, застало оновлення ядра в частковій установці, що означає, що apt майже повністю застиг, і буде постійно говорити вам про запуск, apt-get -f installнавіть якщо ця команда не працює.

Отримайте список зображень ядра та визначте, що можна зробити без. Ця команда покаже встановлені ядра, за винятком поточного sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`. Зверніть увагу на дві новіші версії у списку. Не потрібно турбуватися про запущений, оскільки він не вказаний тут. Ви можете перевірити це за допомогою uname -r.

Створіть команду для видалення всіх файлів у / boot для ядер, які не мають значення для вас, використовуючи розширення дужок, щоб зберегти вас здоровими. Не забудьте виключити поточне та два найновіші зображення ядра. Приклад: sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*. Ви також можете використовувати діапазон із синтаксисом {80..84}.

sudo apt-get -f install щоб очистити те, що робить сприятливим наріканням на часткове встановлення.

Якщо ви зіткнулися з помилкою, що включає такий рядок, як "Внутрішня помилка: Не вдалося знайти зображення (/boot/vmlinuz-3.2.0-56-generic)", виконайте команду sudo apt-get purge linux-image-3.2.0-56-generic(з відповідною версією).

Нарешті, sudo apt-get autoremoveщоб очистити старі пакети зображень ядра, осиротівши ручним очищенням завантаження.

Пропонуйте, запустіть sudo apt-get updateі sudo apt-get upgradeподбайте про будь-які оновлення, які, можливо, створили резервну копію під час очікування відкриття повної / завантажувальної частини.

Пропозиція2, перегляньте https://help.ubuntu.com/community/AutomaticSecurityUpdates і розгляньте, як встановити Unattended-Upgrade :: Remove-Unused-Dependitions на істинне в /etc/apt/apt.conf.d/50unattended-upgrades. Це буде еквівалентом запуску авторемонту після кожного оновлення безпеки, щоб переконатися, що ви очищаєте невикористані ядра, але також видалятимете інші речі, які, на його думку, не використовуються, врятуючи вас від цієї проблеми в майбутньому.


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

1
У мене ніколи не було проблем, спричинених автоматичним оновленням. Я можу уявити сценарії, коли це може бути проблемою, головним чином, про те, що втрачаються залежності від встановлених пакетів, що не встановлюються, скажімо, ви встановите php, вирішите видалити його та встановити нову версію з джерела. Ця версія має залежності, передбачені попередньою установкою, але apt не знає, що вона все-таки потрібна. Наступного разу, коли ви запустите автоматичне видалення, ці залежності не будуть втрачені. Якщо це буде автоматизовано, це може бути трохи заплутано. Якщо ви не встановлюєте поза сховищами, я вважаю, що це абсолютно безпечно.
мерехтіння

3
Побачивши це на декількох віртуальних серверах vsphere (де ядра вдосконалювалися автоматично, а потім не видалялися), я написав сценарій python для автоматизації. Я хотів би мати більше погляд на це
EvanK

2
Якщо ви користуєтесь dpkg --purgeповним завантаженням, ви отримаєте наступне $ sudo dpkg --purge linux-image-3.13.0-65-generic dpkg: dependency problems prevent removal of linux-image-3.13.0-65-generic: linux-image-extra-3.13.0-65-generic depends on linux-image-3.13.0-65-generic. dpkg: error processing package linux-image-3.13.0-65-generic (--purge): dependency problems - not removing Errors were encountered while processing: linux-image-3.13.0-65-generic
flickerfly

1
Після очищення / завантаження apt-get install -f все одно не працюватиме. Використовуючи, df -iя з'ясував, що у мене також не вистачає inode /через величезну кількість файлів для вихідного коду старих ядер в/usr/src
Крістофер,

51

Про це є документація на https://help.ubuntu.com/community/RemoveOldKernels

Підсумовуючи: Використовуйте

sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels

purge-old-kernelsІнструмент може бути встановлений з допомогою sudo apt install byobu. Ось опис його man-сторінки:

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

Якщо ви хочете вирішити копію-вставити, ReSearchIT Eng запропонував таке:

sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge

3
У моєму випадку apt не працює через ядро, що очікує на розгляд, і запропоноване виправлення - це привід 22:
James Bowery

Мені довелося виправити зламані пакети спочатку за допомогою askubuntu.com/a/304388/284313 Після цього ваше рішення спрацювало.
Джеймс Баурі

3
Я думаю, це має бути прийнятим рішенням на даний момент.
Fran Marzoa

3
це набагато безпечніше, ніж прийнята відповідь. Я думаю, що apt-get autoremove --purgeмає бути достатнім, хоча.
Вудро Барлоу

7

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

Спочатку перенесіть дані з завантажувального розділу в root (запустіть як sudo -s):

cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot

Видаліть (або прокоментуйте) /bootзапис у /etc/fstab:

vim /etc/fstab

Оновіть груб і переконайтесь, що все правильно:

update-grub

apt тепер має бути можливість оновити без проблем.

Це залишає невикористаний розділ 200 Мб (який ви можете використати для чогось іншого, якщо вважаєте, що це коштує проблем).


5
Це гарна ідея, але не працює, якщо ви хочете мати повне дискове шифрування для вашого кореневого розділу.
Paŭlo Ebermann

Так, є випадки, коли / boot має бути окремим розділом. Іншим прикладом було те, що Grub раніше не міг завантажуватися з розділу LVM.
Бастіон

4

Видалення старих ядер (до звільнення місця / завантаження) дивіться: http://askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-boot

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

Потім бігайте

sudo apt-get update

1
це було єдине, що спрацювало .... чудове рішення
Джон

Найкраща відповідь! Це єдине рішення, яке працювало для мене; autoremove дурний; вона намагається перевстановити будь-які ядра з невиконаними залежностями, перш ніж офіційно їх видаляє. Я ходив по колах, знову і знову не вистачаючи місця. Ця відповідь - золота.
Lonnie Best

3

sudo apt-get autoremove

Це видаляє всі, крім останніх 2 ядра. Тестовано на Ubuntu 16.04 LTS, коли він /bootбув на 100% потужності та apt-get upgradeне зміг, це останнє оновлення ядра. Автоматичне переміщення ядра є ітеративним, тому якщо у вас кілька ядер, вони будуть видалятися по одному. Тож будьте терплячі.


1

Навіщо це робити вручну, коли це можна зробити інструментом? Ви знаєте, що вам знадобиться це знову за 30 секунд, тому що їм потрібно 30 секунд, щоб підняти нове оновлення ядра в ці дні = P

Я рекомендую використовувати цей інструмент, bootnukem

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

Тоді

sudo bootnukem --dry-run

Видаліть, --dry-runяк тільки ви підтвердите, що це виглядає безпечно

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