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

563

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

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

Вот список файлов, которые находятся на моем /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ядро.

user6722
источник
5
Стоит отметить, что не каждая установка Ubuntu будет иметь отдельный раздел / boot - часто это всего лишь один большой раздел. Этот ответ относится к тем, у кого есть отдельный раздел / boot. Те, кто использует LVM или шифрование «на полный диск», нуждаются в отдельном / boot, в противном случае это может быть необязательным.
Томасруттер
4
Если у кого-то есть такая же проблема, как у меня: после того, как / boot не осталось места, «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; это может работать некоторое время, но вы можете в конечном итоге обновить пакет, который воссоздает файлы, отсутствующие в версиях ядра, в которых есть пакеты, тем самым выполняя ваше пространство.
кгритт

Ответы:

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]+//')")
Lekensteyn
источник
16
Фантастический ответ. Еще одна информация поможет: как вы можете точно определить, какое из ядер вы используете? Предположительно, вы не можете просто предположить, что это последний ... Редактировать : И, похоже, ответ uname -a. Вероятно, лучше всего убедиться, что у вас нет ожидающих отложенного перезапуска для установки нового ядра (как я сделал; но я заметил несоответствие между uname -a«последним» ядром).
TJ Crowder
5
@freddyb Готово. Обратите внимание, что команды печатают / удаляют ядра, отличные от загруженного / загруженного .
Лекенштейн
9
Если очистка apt-get не удалась из-за неудовлетворенных зависимостей, вы можете следовать совету по адресу askubuntu.com/questions/171209/…
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

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

dward
источник
это также соответствует linux-libc-dev: amd64
Фредерик Норд
что будет причиной непреднамеренного удаления "linux-libc-dev: amd64"?
ConfusedStack
@FrederickNord спасибо за советы. Исправлено это. Это вызвало бы некоторые трудности при компиляции c программ.
dward
9
Команда звучит хорошо, но когда я ее запускаю, я получаю ту же ошибку, что и я, когда хочу что-то установить, и не может этого сделать, потому что загрузка полна: --------------- ----------- Следующие пакеты имеют неудовлетворенные зависимости: 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, а новые ядра не были установлены явно, это приведет к удалению старых ядер. Здравый смысл заключается в том, чтобы не принимать какие-либо изменения в системе без предварительного их чтения. Если здравый смысл использовался до использования этой команды, то проблем не будет.
mchid
1
@Rinzwind - Эта команда освободила 250 МБ моего дискового пространства, удалив старые «заголовки linux»
Chinmaya B
3
autoremove работает, если используется до того, как возникнет нехватка места. Однако, когда apt не хватает места и прерывает работу (и пользователь, наконец, замечает проблему), уже слишком поздно запускать autremove или любое другое решение на основе apt. Если это так, попробуйте одно из решений на основе dpkg.
user535733
40

Диспетчер пакетов Synaptic можно использовать для простого выбора и удаления старых образов ядра. Снимок экрана менеджера пакетов Synaptic

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

sudo apt-get install synaptic

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

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

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

fossfreedom
источник
Я на 14.04. В прошлом я справлялся с этой ситуацией через командную строку, но я решил попробовать этот метод сегодня ... для меня мои образы Linux были расположены под установленным (ручным), не установленным (локальным или устаревшим)
Ryan
8
О нет. Я не могу установить Synaptic, потому что на нем нет места /boot!
Джон МакГи
@JohnMcGehee fsck и parted должны решить эту проблему для вас.
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
Omni
источник
23

Это новый ответ на старый вопрос, но простой способ убрать эту вещь (и не только) - установить Ubuntu Tweak . Чтобы установить его :

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

затем вы можете запустить Ubuntu Tweak, перейдя на вкладку «janitor», и отсюда всего три клика:

Ubuntu твик дворник для старых ядер

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

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

Rmano
источник
Я попытался установить твик Ubuntu, а также зашел на сайт репозитория. Это говорит, что это только для 13.10 и раньше. У вас есть обновленная версия для 15.04?
JayCouture.com
@ JayCouture.com Версия на сайте для 14.04 («для 13.10 и раньше» - это ссылка на старые версии). Я игнорирую, если есть версия для 14.10 или 15.04.
Rmano
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размер или делать что-то еще.

Phrogz
источник
У вас либо не должно быть отдельного раздела / boot, либо вы должны увеличить его размер, так как 100 МБ слишком мало.
psusi
1
Спасибо, я удаляю через:sudo dpkg --remove linux-headers-3.5.0-28*
TiloBunt
2
и sudo dpkg --remove linux-image-3.5.0-28*для изображения, проверено черезdf -h
TiloBunt
Спасибо, это мне тоже понравилось. Я удалил несколько старых ядер ( не тех, которые я использовал в настоящее время), а затем сделал apt-get -f install. Кроме того, не забудьте позже сделать apt-get autoremove, чтобы возможно удалить другие ненужные.
Яхо
15

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

psusi
источник
6
Перемещение / boot в мой основной раздел не является для меня решением, так как все, кроме / boot, зашифровано. Вы не могли знать это по моему вопросу, извините.
user6722
Это хорошее решение, если приведенные выше решения не работают из-за отсутствия свободного места на загрузочном томе или если у вас постоянно возникает проблема «нехватки места». Пожалуйста, сначала прочтите, почему иногда требуется иметь раздел / boot: ( help.ubuntu.com/community/DiskSpace )
svandragt
@svandragt, в принципе, в наши дни не осталось причин для использования раздела / boot. Единственное, что осталось, - это если ваш биос поврежден и не может видеть весь диск, и ни у одной машины, созданной за последнее десятилетие, такого ограничения нет. Другие устаревшие случаи, такие как использование raid или LVM, теперь обрабатываются grub2 должным образом.
псуси
Есть несколько причин иметь отдельный загрузочный раздел. Но я не уверен, что преимущества стоят за установку повышенной сложности. 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.
  • Если вы получили какую-либо другую ошибку, обратитесь за помощью - у вас может быть другая проблема, чем вы думали.
user149408
источник
@ user535733 обычный случай (по крайней мере, тот, в который я продолжаю работать), это то, что на нем все еще есть место /boot, просто недостаточно для другого пакета ядра. В этих случаях вышесказанное сработало хорошо. Не стесняйтесь, однако, чтобы добавить соответствующую dpkgкоманду. Что касается purge, нет, это не своего рода «принудительное удаление». В отличие от removeнего он также удаляет файлы конфигурации. Поскольку / до тех пор , как пакеты ядра не устанавливать и не конфигурационных файлов, removeи purgeбудет делать то же самое для пакетов ядра.
user149408
Добавлен четвертый пункт с соответствующей командой dpkg.
user535733
4

Для меня и то apt-get purgeи dpkg --removeдругое не удалось. Поэтому мне пришлось удалить пару старых образов ядра из / boot с помощью rm -f.

orkoden
источник
4
Это не хороший способ удалить пакеты. Хотя этот ответ не очень конкретен о том, почему удалить их правильным способом не удалось, я уверен, что если бы эта информация была предоставлена ​​(в отдельном вопросе, конечно), мы могли бы попытаться выяснить причину проблемы.
Томасруттер
2
Я считаю, что это не удалось, потому что /bootраздел был заполнен. Эта No space left on deviceinitrd.img
команда
1
ВНИМАНИЕ, прямое удаление файлов может привести к проблемам, так как обновление пакета linux-firmware может воссоздать файл 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

Если он по-прежнему выдает ошибку места на загрузочном диске для установки / удаления файлов, то удалите непосредственно один из старых изображений из каталога / 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
thomasrutter
источник
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.

aibrahim
источник
1

Я показываю, что еще в 2017 году этот вопрос имеет новые комментарии и ответы, но пропускает один ответ, который я считаю очень полезным здесь:

Ubuntu как настольная ОС простого повседневного использования не имеет причин для установки с отдельным \ загрузочным разделом, и что-то вроде этого НЕ будет предлагать что-то «обычному пользователю» ... Так что решение - это новая установка без \ загрузочного раздела, и это как у тебя никогда не будет такой проблемы

PS: Мой ответ может быть удален или добавлен в принятый ответ ... (думаю, это поможет некоторым людям таким образом)

koleygr
источник
1

Супер полезная утилита , которая очистит ваш загрузочный раздел

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

Используйте на свой страх и риск, но у меня это сработало

sudo bootnukem
Джонатан
источник
Почему отрицательный голос?
Джонатан
0

В aptitude или synaptic есть раздел «старый или установленный вручную». Там должны быть старые пакеты Linux.

Мартин Уединг
источник
0

Есть скрипт bash, который я написал ниже, который делает этот процесс более удобным для пользователя.

YMMV - это было сделано для Mint 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
wibbynut
источник
0

[Как новичок AskUbuntu, я не могу комментировать, пока репутация не = 50, поэтому не голосуйте из-за этого.]

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

Единственное, что мне помогло, - это просмотреть текущее изображение, а затем вручную найтиsudo rm filename самые старые файлы изображений ( в именах каждого из них было -3.16.0-30 ). Как только это будет сделано, тогдаsudo apt-get autoremove была комната для маневра, необходимая для выполнения своей работы. Он выделил некоторые ошибки, связанные с этой версией, например: «depmod: FATAL: не удалось загрузить /boot/System.map-3.16.0-30-generic: нет такого файла или каталога», но этого и следовало ожидать.

После завершения dfвозвращается 42% использования / boot, чтобы указать, что он снова здоров.

Так, на всякий случай
источник
1
Сообщение, которое вы ищете, - askubuntu.com/questions/171209/…
muru
@muru Ну да ... я бы посоветовал оригинальному постеру также нуждаться в этом совете. Как только / boot заполнен, эти скриптовые версии, которые пытаются это исправить, также не работают, так как, ну, / boot заполнен.
Джастин Кейс,
Ну, есть две схожие проблемы: а) когда система предупреждает, что ваш диск переполнен, но apt-getимеет достаточно места для его продолжения, и б), где происходит apt-getсбой из-за переполнения диска. Это другой пост.
Муру
0

Я написал этот сценарий bash для выборочной очистки старых ядер сразу:

рм ядра реальный размер

Весь код bash и инструкции включены в ссылку.

WinEunuuchs2Unix
источник
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

/ boot раздел иногда может быть немного странным

не начинайте напрямую удалять файлы Kernal.

Шаги, чтобы следовать

  1. Проверьте, используется ли установленный в данный момент kernal системой linux

    uname -r

    это должно дать вам имя установленного в данный момент образа ядра в системе

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

    apt-get remove linux-image-XXXXX

  3. Также удалите заголовочный файл, а также

    apt-get remove linux-headers-XXXXX

  4. Также может возникнуть условие, когда aptперестал работать, в этом случае переключиться на / boot

    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. Обновление grub

    update-grub

  9. Последнее обновление ваших системных пакетов

    apt-get update

user225
источник
-1

Если вы не можете удалить больше неиспользуемых файлов и если у вас есть другой раздел с / или свободным пространством на том же устройстве, вы можете изменить размер / boot раздела с помощью parted / gparted . (Он также включен в установочный носитель.)

Внимание : изменение размера раздела - опасная операция, сохраните ваши важные данные на другом носителе, прежде чем делать это!

Рудольф Довичин
источник
Большинство пользователей небольших разделов / загрузочных разделов выбирают «шифрование всего диска» при установке, для чего требуется LVM. Это решение, кажется, вызывает больше проблем, чем решает для этих пользователей.
user535733