Как мне освободить больше места в /boot?

Мой /boot раздел почти заполнен, и я получаю предупреждение каждый раз, когда перезагружаю свою систему. Я уже удалил старые пакеты ядра (linux-headers ...), на самом деле я сделал это, чтобы установить более новую версию ядра, которая поставляется с автоматическими обновлениями.

После установки этой новой версии раздел снова почти заполнен. Итак, что еще я могу удалить? Есть ли какие-то другие файлы, связанные со старыми образами ядра?

Вот список файлов, которые находятся на моем /boot раздел:

:~$ ls /boot/abi-2.6.31-21-generic         lost+foundabi-2.6.32-25-generic         memtest86+.binabi-2.6.38-10-generic         memtest86+_multiboot.binabi-2.6.38-11-generic         System.map-2.6.31-21-genericabi-2.6.38-12-generic         System.map-2.6.32-25-genericabi-2.6.38-8-generic          System.map-2.6.38-10-genericabi-3.0.0-12-generic          System.map-2.6.38-11-genericabi-3.0.0-13-generic          System.map-2.6.38-12-genericabi-3.0.0-14-generic          System.map-2.6.38-8-genericboot                          System.map-3.0.0-12-genericconfig-2.6.31-21-generic      System.map-3.0.0-13-genericconfig-2.6.32-25-generic      System.map-3.0.0-14-genericconfig-2.6.38-10-generic      vmcoreinfo-2.6.31-21-genericconfig-2.6.38-11-generic      vmcoreinfo-2.6.32-25-genericconfig-2.6.38-12-generic      vmcoreinfo-2.6.38-10-genericconfig-2.6.38-8-generic       vmcoreinfo-2.6.38-11-genericconfig-3.0.0-12-generic       vmcoreinfo-2.6.38-12-genericconfig-3.0.0-13-generic       vmcoreinfo-2.6.38-8-genericconfig-3.0.0-14-generic       vmcoreinfo-3.0.0-12-genericextlinux                      vmcoreinfo-3.0.0-13-genericgrub                          vmcoreinfo-3.0.0-14-genericinitrd.img-2.6.31-21-generic  vmlinuz-2.6.31-21-genericinitrd.img-2.6.32-25-generic  vmlinuz-2.6.32-25-genericinitrd.img-2.6.38-10-generic  vmlinuz-2.6.38-10-genericinitrd.img-2.6.38-11-generic  vmlinuz-2.6.38-11-genericinitrd.img-2.6.38-12-generic  vmlinuz-2.6.38-12-genericinitrd.img-2.6.38-8-generic   vmlinuz-2.6.38-8-genericinitrd.img-3.0.0-12-generic   vmlinuz-3.0.0-12-genericinitrd.img-3.0.0-13-generic   vmlinuz-3.0.0-13-genericinitrd.img-3.0.0-14-generic   vmlinuz-3.0.0-14-generic

В настоящее время я использую 3.0.0-14-generic ядро.

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

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]+//')")

Ваш загрузочный раздел заполнен. Поскольку это обновление ядра, эти файлы будут скопированы в загрузочный раздел, поэтому вам необходимо выполнить очистку in out. Вот такой запись в блоге это покажет вам, как очистить старые образы ядра с помощью одной команды. Я дам краткое описание этого метода. Используйте эту команду, чтобы распечатать текущую версию вашего ядра:

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

И эта единственная команда позаботится обо всем за вас. Я подтвержду, что это действительно работает отлично, но никогда никому не доверяйте в Интернете. :) Для получения дополнительной информации в сообщении в блоге дается очень хорошее объяснение того, что делает каждая часть команды, поэтому прочитайте ее, чтобы убедиться, что она делает то, что вы хотите.

sudo apt-get autoremove

Эта команда выполняет задание автоматически.

Synaptic Package Manager можно использовать для простого выбора и удаления старых образов ядра.Screenshot of Synaptic Package Manager

Если у вас еще не установлен Synaptic:

sudo apt-get install synaptic

Запустите приложение и выберите показанные параметры.

Вы должны иметь возможность выделить все пакеты "linux" с версией "2.6.x", где x находится в диапазоне от 31 до 38 в соответствии с файлами в вашей папке /boot.

Щелкните правой кнопкой мыши каждый из этих пакетов Linux и выберите опцию "Отметить для полного удаления". Наконец, нажмите кнопку применить. Это приведет к удалению всех файлов и любых связанных файлов. Ваш /boot папка теперь должна быть немного аккуратнее.

Спасибо за ваш подробный пост о вашей проблеме, это помогло мне двигаться в правильном направлении. Хотя полезно сохранять предыдущие файлы ядра, вы можете удалить их все за один раз, проверьте этот пост:
Как удалить все неиспользуемые заголовки, изображения и модули ядра 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

Это новый ответ на старый вопрос, но простой способ очистить эту штуку (и многое другое) - установить Настройка Ubuntu. К установите его:

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

затем вы можете запустить Ubuntu Tweak, перейдя на вкладку "уборщик", и отсюда это всего лишь три клика:

Ubuntu tweak janitor for old kernels

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

Вы можете использовать один и тот же инструмент для очистки многих вещей - просто помните, что если вы очистите кэш миниатюр или кэш TB, системе придется перестроить их, если они понадобятся.

Я смог устранить проблему, используя 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-serverFound linux image: /boot/vmlinuz-2.6.32-34-serverFound initrd image: /boot/initrd.img-2.6.32-34-serverFound linux image: /boot/vmlinuz-2.6.32-33-serverFound initrd image: /boot/initrd.img-2.6.32-33-serverFound linux image: /boot/vmlinuz-2.6.32-32-serverFound initrd image: /boot/initrd.img-2.6.32-32-serverFound linux image: /boot/vmlinuz-2.6.32-31-serverFound initrd image: /boot/initrd.img-2.6.32-31-serverFound memtest86+ image: /memtest86+.bindone# Repeat for kernels -31 and -32 and -33, up to (but not including)# the version listed by `uname -a`

После этого, apt-get -f install исправил мои проблемы с зависимостями, и в мире все было хорошо.

Однако я не приму этот свой ответ, поскольку мне все еще нужно знать, следует ли мне увеличивать свой /boot размер или делать что-то еще.

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

sudo -sumount /bootmount /dev/sda2 /mntcp -a /mnt/* /boot/umount /mntgedit /etc/fstabgrub-install /dev/sda

Затем вы можете использовать gparted для удаления старого / загрузочного раздела и, возможно, расширения корневого раздела, чтобы использовать это пространство. Чтобы расширить корневой раздел, вам нужно будет загрузиться с livecd, а свободное место должно быть сразу справа. Если раздел / boot в настоящее время находится слева от корневого раздела, то вам нужно будет сначала переместить корневой раздел влево, а затем расширить его, но это может занять очень, очень много времени, поэтому, возможно, не стоит беспокоиться.

Взяв лучшее из приведенных выше ответов, мой проверенный и верный подход заключается в следующем:

  • 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 будет жаловаться, что некоторые пакеты не могут быть удалены, потому что они не установлены, но это не повредит.

Если что-то не получится...

  • Если команда 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.
  • Если вы получите какую—либо другую ошибку, обратитесь за помощью - возможно, у вас другая проблема, чем вы думали.

Перечислите все ядра:

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

Если он по-прежнему выдает вам ошибку загрузки дискового пространства для установки / удаления файлов, то непосредственно удалите один из старый изображение из каталога /boot,

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

записка: Пожалуйста, еще раз просмотрите текущий образ ядра, прежде чем удалять какое-либо изображение.

Если он по-прежнему выдает какую-либо ошибку, повторите следующие команды для удаления нежелательных ядер,

sudo dpkg --purge linux-image-X.X.X-XXX-generic linux-image-extra-X.X.X-XXX-generic linux-signed-image-X.X.X-XXX-genericsudo dpkg --purge linux-image-Y.Y.Y-YYY-generic linux-image-extra-Y.Y.Y-YYY-generic linux-signed-image-Y.Y.Y-YYY-genericsudo apt-get -f installdpkg -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

Стоит отметить, что не каждая установка Ubuntu будет иметь отдельный / загрузочный раздел - часто все это будет просто один большой раздел. Этот ответ применим к тем, у кого есть отдельный раздел /boot. Тем, кто использует шифрование LVM или “полный диск”, требуется отдельная загрузка / boot, в противном случае это может быть необязательно.

Если у кого-то еще есть такая же проблема, как у меня: после того, как в /boot не осталось свободного места, “apt-get upgrade” завершится ошибкой при повторной генерации файлов initrd для установленных ядер или которые, по мнению скрипта update-initramfs, установлены путем проверки содержимого /var /lib/initramfs-tools. В этой ситуации невозможно удалить старые ядра с помощью apt-get, потому что в разделе fscking /boot на устройстве не осталось свободного места. Это можно сделать с помощью “dpkg -P” с последующей очисткой соответствующей записи в /boot (чтобы освободить место) и /var/lib/initramfs-tools (образ initrd не будет сгенерирован).

Ключевым моментом для правильных ответов является то, что они советуют вам удалить * пакеты *, содержащие более старые версии ядра. Многие веб-страницы, на которых решается эта проблема, рекомендуют напрямую удалять files в разделе /boot; это может сработать на некоторое время, но в конечном итоге вы можете обновить пакет, который воссоздаст файлы, отсутствующие в версиях ядра, в которых есть пакеты, что приведет к нехватке места.

https://help.ubuntu.com/community/RemoveOldKernels

Все ответы очень помогли мне понять, но ссылка, которой делится @ jarno, была тем, что я на самом деле сделал, чтобы решить эту проблему