Какой самый безопасный способ очистки / загрузки раздела?

274

У меня выделено 200 МБ на /bootраздел. Всякий раз, когда я пытаюсь обновить ядро, я получаю сообщение об ошибке, которое в основном утверждает, /bootчто заполнено.

Что я могу сделать для очистки /bootи удаления / резервного копирования старых ядер?

koba101
источник
1
Посмотрите Вики Сообщество Ubuntu
Ярно
Если / boot заполнен, см. Askubuntu.com/questions/263363/…
nslntmnx

Ответы:

335

Метод командной строки:

Сначала проверьте версию ядра, чтобы не удалять используемый образ ядра, запустив:

uname -r

Теперь запустите эту команду для получения списка установленных ядер:

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

и удалите ядра, которые вам больше не нужны / не нужны, запустив это:

sudo apt-get remove linux-image-VERSION

Замените VERSION версией ядра, которое вы хотите удалить.

Когда вы закончите удаление старых ядер, вы можете запустить это, чтобы удалить все пакеты, которые вам больше не нужны:

sudo apt-get autoremove

И, наконец, вы можете запустить это, чтобы обновить список ядра grub:

sudo update-grub
PeppeDAlterio
источник
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) , но только один , который, вероятно , будет работать в этой ситуации.
Марко
284

ПРИМЕЧАНИЕ: это только если вы не можете использовать apt для очистки из-за 100% полной загрузки

Если apt-get не работает, потому что ваш / boot на 100%, вам нужно сначала очистить / boot. Это, скорее всего, привело к обновлению ядра при частичной установке, что означает, что 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-Dependencies значения true в /etc/apt/apt.conf.d/50unattended-upgrades. Это будет равносильно запуску автоматического удаления после каждого обновления безопасности, чтобы быть уверенным, что вы удалите неиспользуемые ядра, но также удалит другие вещи, которые, по его мнению, не используются, избавляя вас от этой проблемы в будущем.

flickerfly
источник
3
Таким образом, у меня есть последняя версия для следующей перезагрузки, а затем предыдущая на случай, если что-то сломается. Обычно у меня достаточно места, поэтому их не повредит, и это удовлетворяет мою паранойю за то, что у меня недостаточно вариантов резервного копирования в любом конкретном сценарии.
flickerfly
1
У меня никогда не было проблем, вызванных автоматическими обновлениями. Я могу представить себе сценарии, в которых это может быть проблемой, в основном из-за потери зависимостей при установках без deb-пакетов. Допустим, вы устанавливаете php, решаете удалить его и установить более новую версию из исходного кода. Эта версия имеет зависимости, предоставленные предыдущей установкой, но apt не знает, что она все еще требуется. В следующий раз, когда вы запустите авто-удаление, эти зависимости исчезнут. Если автоматизировано, это может быть немного запутанным. Если вы не устанавливаете вне репозиториев, я считаю, что это абсолютно безопасно.
flickerfly
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-страницы:

Эта программа удалит старые пакеты ядра и заголовка из системы, освободив дисковое пространство. Он никогда не удалит работающее ядро. По умолчанию он сохраняет как минимум последние 2 ядра, но пользователь может переопределить это значение с помощью --keep параметра.

Если вам нужно решение для копирования и вставки, ReSearchIT Eng предлагает следующее:

sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge
реч
источник
3
В моем случае apt не работает из-за ожидающего ядра, и предложенное исправление - ловушка 22:
Джеймс Бауэри
Сначала я должен был исправить поврежденные пакеты с помощью askubuntu.com/a/304388/284313 После этого ваше решение сработало.
Джеймс Бауэри
3
Я думаю, что это должно быть принятое решение на данный момент.
Фран Марзоа
3
это намного безопаснее, чем принятый ответ. Я думаю, что apt-get autoremove --purgeдолжно быть достаточно, хотя.
Вудроу Барлоу
7

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

Сначала переместите ваши данные из загрузочного раздела в корневой каталог (запустите как sudo -s):

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

Удалить (или прокомментировать) /bootзапись в /etc/fstab:

vim /etc/fstab

Обновите grub и убедитесь, что все правильно:

update-grub

apt Теперь должен быть в состоянии обновить без проблем.

Это оставляет неиспользованный раздел 200 МБ (который вы могли бы использовать для чего-то другого, если вы найдете, что это стоит того).

laktak
источник
5
Это хорошая идея, но она не работает, если вы хотите иметь полное дисковое шифрование для корневого раздела.
Пауло Эберманн
Да, есть случаи, когда / boot должен быть отдельным разделом. Другим примером было то, что Grub ранее не мог загружаться из раздела LVM.
Бастион
4

Удаление старых ядер (чтобы освободить место на / boot), смотрите: 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
это было единственное, что сработало .... отличное решение
Джон
Лучший ответ! Это единственное решение, которое сработало для меня; автоудаление глупо; он пытается переустановить все ядра с неудовлетворенными зависимостями, прежде чем он официально удалит их. Я ходил кругами, снова и снова выходя из космоса. Этот ответ - золото.
Лонни Бест
3

sudo apt-get autoremove

Это удаляет все, кроме последних 2 ядер. Протестировано на Ubuntu 16.04 LTS, когда оно /bootбыло загружено на 100% и apt-get upgradeне прошло последнее обновление ядра. Автоматическое удаление ядра является итеративным, поэтому, если у вас есть несколько ядер, они будут удалены по одному за раз. Так что наберитесь терпения.

DeepSpace101
источник
1

Зачем делать это вручную, если вы можете сделать это с помощью инструмента? Вы знаете, что вам понадобится снова через 30 секунд, потому что им требуется 30 секунд, чтобы запустить новое обновление Kernal в эти дни = P

Я рекомендую использовать этот инструмент, bootnukem

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

затем

sudo bootnukem --dry-run

Удалить, как --dry-runтолько вы подтвердите, что выглядит безопасно

Джонатан
источник