Не удается обновить MATE при новой установке на малину Pi [duplicate]

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

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

40 ответов

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

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 и виртуальный бокс). Большинство пользователей должны удалить эти пакеты заголовков, если соответствующий пакет ядра (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]+//')")
587
ответ дан 18 July 2018 в 00:49

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

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 и виртуальный бокс). Большинство пользователей должны удалить эти пакеты заголовков, если соответствующий пакет ядра (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]+//')")
587
ответ дан 24 July 2018 в 17:17

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

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

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

194
ответ дан 18 July 2018 в 00:49

Список всех ядер:

dpkg --list 'linux-image*'

Отображать текущее ядро:

uname -r

Список всех ядер EXCEPT current one:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

EXCEPT

Удалить все ядра EXCEPT current one:

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

Если он все еще дает вам возможность загружать disk space error для установки / удаления файлов, а затем удалить один из EXCEPT изображений из каталога / boot,

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

ПРИМЕЧАНИЕ. Перед удалением любого изображения просмотрите текущее изображение ядра.

0
ответ дан 18 July 2018 в 00:49
git clone https://github.com/erichs/bootnukem.git cd bootnukem sudo ./install.sh

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

sudo bootnukem
2
ответ дан 18 July 2018 в 00:49

[В качестве 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
ответ дан 18 July 2018 в 00:49

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

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

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

0
ответ дан 18 July 2018 в 00:49

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

0
ответ дан 18 July 2018 в 00:49

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

Выполнено через командную строку. Если вы делаете это с помощью удаленного использования, то вроде 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
ответ дан 18 July 2018 в 00:49
sudo apt-get autoremove

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

89
ответ дан 18 July 2018 в 00:49

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

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

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

sudo apt-get install synaptic

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

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

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

38
ответ дан 18 July 2018 в 00:49

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

4
ответ дан 18 July 2018 в 00:49

Я смог устранить проблему, используя 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
ответ дан 18 July 2018 в 00:49

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

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

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

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

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

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

22
ответ дан 18 July 2018 в 00:49

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

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

-1
ответ дан 18 July 2018 в 00:49

Вот сценарий 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
ответ дан 18 July 2018 в 00:49
Я уже удалил старые пакеты ядра (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
ответ дан 18 July 2018 в 00:49

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

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, чтобы перечислить все установленные в данный момент пакеты, связанные с ядром. Это будет включать запущенное ядро.
4
ответ дан 18 July 2018 в 00:49

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

bash script

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

0
ответ дан 18 July 2018 в 00:49

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

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

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

196
ответ дан 24 July 2018 в 17:17
  • 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

Список всех ядер:

dpkg --list 'linux-image*'

Отображать текущее ядро:

uname -r

Список всех ядер EXCEPT current one:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

EXCEPT

Удалить все ядра EXCEPT current one:

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

Если он все еще дает вам возможность загружать disk space error для установки / удаления файлов, а затем удалить один из EXCEPT изображений из каталога / boot,

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

ПРИМЕЧАНИЕ. Перед удалением любого изображения просмотрите текущее изображение ядра.

0
ответ дан 24 July 2018 в 17:17
git clone https://github.com/erichs/bootnukem.git cd bootnukem sudo ./install.sh

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

sudo bootnukem
2
ответ дан 24 July 2018 в 17:17

[В качестве 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
ответ дан 24 July 2018 в 17:17
  • 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

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

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

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

0
ответ дан 24 July 2018 в 17:17

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

0
ответ дан 24 July 2018 в 17:17

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

Выполнено через командную строку. Если вы делаете это с помощью удаленного использования, то вроде 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
ответ дан 24 July 2018 в 17:17
sudo apt-get autoremove

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

89
ответ дан 24 July 2018 в 17:17
  • 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

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

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

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