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

Мой раздел /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.

1
задан 13 February 2018 в 00:16

18 ответов

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

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

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

190
ответ дан 25 May 2018 в 15:45
  • 1
    Это отлично поработало, спасибо. – Michael Durrant 21 February 2013 в 09:59
  • 2
    это также соответствует linux-libc-dev: amd64 – Frederick Nord 29 August 2014 в 21:39
  • 3
    что произойдет непреднамеренное удаление «linux-libc-dev: amd64». причина? – ConfusedStack 12 October 2014 в 05:37
  • 4
    @FrederickNord благодарит за головы. Исправлено это. Это создало бы трудности с компиляцией программ c. – dward 15 October 2014 в 00:01
  • 5
    Команда хорошо звучит, но когда я запускаю ее, я получаю ту же ошибку, которую получаю, когда хочу что-то установить, и она не может этого сделать, потому что загрузка полна: --------------- ----------- Следующие пакеты имеют неудовлетворенные зависимости: 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 1 October 2016 в 06:29
sudo apt-get autoremove

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

85
ответ дан 25 May 2018 в 15:45
  • 1
    Как следует из названия, apt-get AUTOremove - это автоматизированная операция, в которой система берет «наилучшее предположение». чего вы пытаетесь достичь. Он не должен использоваться в качестве замены для администрирования системы здравого смысла. Проблема с этим подходом: если вы (или обновление) удалили пакет, входящий в этот список зависимостей, функция автоматического удаления хочет удалить все остальные пакеты в списке зависимостей, оставив вам систему без рабочего стола (а иногда даже с полностью сломанной системой). – Rinzwind 5 November 2012 в 16:09
  • 2
    Ссылка: 1 из многих источников для этого комментария выше: linuxquestions.org/questions/debian-26/… – Rinzwind 5 November 2012 в 16:10
  • 3
    если linux-image-generic установлен и новые ядра не установлены явно, это приведет к удалению старых ядер. Здравый смысл состоит в том, чтобы не принимать какие-либо изменения в системе, не читая их в первую очередь. Если здравый смысл использовался до использования этой команды, тогда никаких проблем не возникнет. – mchid 2 March 2015 в 03:34
  • 4
    @Rinzwind - эта команда освободила 250 МБ дискового пространства, удалив старые «заголовки Linux», – Chinmaya B 28 July 2015 в 07:41
  • 5
    autoremove работает, если используется до , существует условие отсутствия пространства. Однако, как только apt закончит работу и прекратит работу (и пользователь, наконец, замечает проблему), слишком поздно запускать autremove или любое другое решение на основе apt. Если это так, попробуйте один из решений на основе dpkg. – user535733 2 February 2017 в 18:25

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

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

sudo apt-get install synaptic

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

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

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

37
ответ дан 25 May 2018 в 15:45
  • 1
    Я на 14.04. Я обработал эту ситуацию в прошлом через командную строку, но сегодня решил попробовать этот метод ... для меня мои изображения Linux были расположены под установленным (ручным), не установленным (локальным или устаревшим) – Ryan 9 July 2016 в 23:32
  • 2
    О нет. Я не могу установить Synaptic, потому что на /boot нет места! – John McGehee 16 September 2016 в 23:14
  • 3
    @JohnMcGehee fsck и parted должны решить эту проблему для вас. – FlipMcF 3 April 2017 в 23:10

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

Выполнено через командную строку. Если вы делаете это с помощью удаленного использования, то вроде 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
24
ответ дан 25 May 2018 в 15:45

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

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

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

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

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

22
ответ дан 25 May 2018 в 15:45
  • 1
    Я попытался установить Ubuntu, а также перейти на сайт репозитория. Он говорит, что это только для 13.10 и раньше. У вас есть обновленная версия для 15.04? – JayCouture.com 10 May 2015 в 16:57
  • 2
    @ JayCouture.com Версия на сайте - 14.04 («для 13.10 и раньше» - это ссылка на более старые версии). Я игнорирую, если есть версия для 14.10 или 15.04. – Rmano 12 May 2015 в 01:15

Я смог устранить проблему, используя 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 или делать что-то еще.

17
ответ дан 25 May 2018 в 15:45
  • 1
    Вы должны либо не иметь отдельный / загрузочный раздел в первую очередь, либо увеличить размер, так как 100 МБ слишком малы. – psusi 4 December 2011 в 10:07
  • 2
    Спасибо, я удаляю через: sudo dpkg --remove linux-headers-3.5.0-28* – TiloBunt 16 July 2013 в 22:34
  • 3
    и sudo dpkg --remove linux-image-3.5.0-28* для изображения, отмеченного с помощью df -h – TiloBunt 16 July 2013 в 22:57

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

11
ответ дан 25 May 2018 в 15:45
  • 1
    Перемещение / загрузка моего основного раздела для меня не является решением, так как все, кроме / boot, зашифровано. Вы не могли это знать, из моего вопроса, извините. – user6722 24 December 2011 в 20:15
  • 2
    Это хорошее решение, если вышеприведенные решения не работают из-за отсутствия свободного места на загрузочном томе или если вы повторно используете «вне пространства», вопрос. Сначала прочитайте, почему иногда требуется иметь раздел / boot: ( help.ubuntu.com/community/DiskSpace ) – svandragt 10 July 2014 в 13:26
  • 3
    @svandragt, в принципе, в наши дни нет необходимости в необходимости раздела / boot. О единственном, что осталось, это если ваша биография сломана и не может увидеть весь диск, и любая машина, созданная в последнее десятилетие, не имеет такого ограничения. Другие устаревшие случаи, такие как использование рейда или LVM, теперь корректно обрабатываются grub2. – psusi 11 July 2014 в 06:59
  • 4
    Существует несколько причин наличия отдельного загрузочного раздела. Но я не уверен, что преимущества стоят сложной настройки. 1. ОС может выиграть от более быстрой загрузки через ext2. 2. Безопасность может быть увеличена путем установки / загрузки как RO. (руткиты и т. д.) или даже не размонтированы во время выполнения os. 3. grub (1) имеет (имел) некоторые проблемы с ext4. 4. Требуется для запуска lvm (grubv1). Хотя это не относится к настройке ubuntu по умолчанию. – David Cahill 13 April 2015 в 20:37
  • 5
    lsblk можно использовать для определения того, какой раздел – Mr Purple 9 May 2016 в 12:51

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

4
ответ дан 25 May 2018 в 15:45
  • 1
    Это не лучший способ удалить пакеты. Хотя этот ответ не очень специфичен в отношении того, почему их удаление было неверным, я уверен, что если бы эта информация была предоставлена ​​(в отдельном вопросе, конечно), мы могли бы попытаться выяснить причину проблемы. – thomasrutter 29 August 2014 в 14:55
  • 2
    Я считаю, что это было неудачно, потому что раздел /boot был заполнен. Эти команды сначала пытаются обновить ядро ​​до последнего и сбой No space left on device при генерации initrd.img – vp_arth 3 December 2015 в 19:50
  • 3
    ПРЕДУПРЕЖДЕНИЕ. Прямое удаление файлов может привести к проблемам, так как обновление пакета linux-firmware может воссоздать файл initrd.img для каждой версии, которая, по его мнению, установлена ​​на основе информации о пакете. Смотрите: askubuntu.com/questions/865577/… – kgrittn 5 January 2017 в 17:57
  • 4
    спасибо, это окончательное решение для спасения жизни, когда ничего не работает. – Jeff Puckett 17 August 2017 в 06:28

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

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

Если что-то не работает ...

uname -a чтобы найти запущенное ядро. Если команда dpkg все еще не работает, потому что пакеты linux-image требуются пакетами linux-headers той же версии (которую вы также хотите удалить), возможно, dpkg для решения этого. Пересмотрите вывод dpkg -l и укажите суффиксы имени пакета в командной строке. Например, в одной из моих систем команда, которая в конечном итоге работала, была sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}-generic-pae. dpkg -l linux-{headers,image}-\* | grep ^ii, чтобы перечислить все установленные в данный момент пакеты, связанные с ядром. Это будет включать запущенное ядро.
3
ответ дан 25 May 2018 в 15:45
  • 1
    @ user535733 обычный случай (по крайней мере, тот, который я продолжаю работать) состоит в том, что на /boot все еще некоторое место просто недостаточно для другого пакета ядра. В этих случаях это хорошо работает. Не стесняйтесь, однако, добавить соответствующую команду dpkg. Что касается purge, нет, это не своего рода «force-remove». Что он делает, иначе, чем remove, заключается в том, что он удаляет файлы конфигурации. Поскольку /, пока пакеты ядра не устанавливают конфигурационные файлы, remove и purge будут делать то же самое для пакетов ядра. – user149408 4 February 2017 в 03:55
  • 2
    Добавлена ​​четвертая пуля с соответствующей командой dpkg. – user535733 4 February 2017 в 04:02
Я уже удалил старые пакеты ядра (linux-headers ...)

linux-headers-* не являются ядрами. Пакеты ядра называются linux-image-*. Те, которые называются linux-headers-*, являются пакетами разработки для компиляции модулей ядра: они не живут в каталоге / boot и не требуются для повседневного использования вашей системы.

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

You должен иметь возможность перечислять ваши установленные ядра с помощью

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
2
ответ дан 25 May 2018 в 15:45
git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh

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

sudo bootnukem
2
ответ дан 25 May 2018 в 15:45

У меня была эта проблема и больше, поскольку я удалил некоторые 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
ответ дан 25 May 2018 в 15:45

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

0
ответ дан 25 May 2018 в 15:45

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

YMMV - это было сделано для Монетного двора 14. Все еще изучая БАШ, так что это, вероятно, немного неуклюже. Используйте на свой страх и риск, но он работает для меня!

#!/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
ответ дан 25 May 2018 в 15:45

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

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

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

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

0
ответ дан 25 May 2018 в 15:45
  • 1
    Сообщение, которое вы ищете, это askubuntu.com/questions/171209/… – muru 8 February 2017 в 06:02
  • 2
    @muru Ну, да ... Я бы предположил, что оригинальному плакату тоже понадобится этот совет. После того, как загрузка / загрузка заполнена, эти сценарии, которые пытаются ее исправить, также терпят неудачу, так как, ну, / boot заполнен. – Justin Case 8 February 2017 в 22:36
  • 3
    Ну, есть две похожие проблемы: а) где система предупреждает, что ваш диск заполняется, но apt-get имеет достаточно места для продолжения, и b), где apt-get терпит неудачу, потому что диск слишком заполнен. Это другой пост. – muru 9 February 2017 в 08:56

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

bash script

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

0
ответ дан 25 May 2018 в 15:45

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

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

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

0
ответ дан 25 May 2018 в 15:45

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

Предупреждение. Изменение размера раздела опасно, сохраните важные данные на других носителях перед его выполнением!

-1
ответ дан 25 May 2018 в 15:45
  • 1
    Большинство стратегов небольших отдельных / загрузочных разделов выбрали «полное шифрование диска» при установке, что требует LVM. Это решение, похоже, вызовет больше проблем, чем оно решает для этих пользователей. – user535733 2 February 2017 в 18:40

Другие вопросы по тегам:

Похожие вопросы: