Мой / загрузочный раздел достиг 100%, и теперь я не могу обновить. Не могу удалить старые ядра, чтобы освободить место

Моя первая проблема была, когда я пытался apt-get update или же apt-get upgrade, При обновлении я получаю следующую ошибку:

You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
linux-image-server : Depends: linux-image-3.2.0-27-generic but it is not installed
E: Unmet dependencies. Try using -f.

Я попытался запустить apt-get install -f, и это был результат (после ответа "да" на приглашение)

(Reading database ... 186183 files and directories currently installed.)
Unpacking linux-image-3.2.0-27-generic (from .../linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb) ...
Done.
dpkg: error processing /var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb (--unpack):
 failed in write on buffer copy for backend dpkg-deb during `./boot/System.map-3.2.0-27-generic': No space left on device
 No apport report written because the error message indicates a disk full error
                                                                          dpkg-deb:    error: subprocess paste was killed by signal (Broken pipe)
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-27-generic   /boot/vmlinuz-3.2.0-27-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-27-generic /boot/vmlinuz-3.2.0-27-generic
Errors were encountered while processing:
/var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Я пробовал бегать apt-get autoremove и это дает мне ту же ошибку, что и apt-get upgrade,

Когда я бегу dfЯ получаю это для /boot:

/dev/sda1                    233191     230297         0 100% /boot

Итак, я читал в другом месте, что я должен попытаться очистить старые ядра. Я проверил, какие ядра у меня были:

$ dpkg -l linux-image-\* | grep ^ii
ii  linux-image-2.6.38-13-server  2.6.38-13.52  Linux kernel image for version 2.6.38 on x86_64
ii  linux-image-3.0.0-13-server   3.0.0-13.22   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-14-server   3.0.0-14.23   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-15-server   3.0.0-15.26   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-16-server   3.0.0-16.29   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-17-server   3.0.0-17.30   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.2.0-24-generic  3.2.0-24.39   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-25-generic  3.2.0-25.40   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-26-generic  3.2.0-26.41   Linux kernel image for version 3.2.0  on 64 bit x86 SMP

Когда я пытаюсь удалить самый старый с этим:

$ sudo apt-get purge linux-image-2.6.38-13-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
linux-image-server : Depends: linux-image-3.2.0-27-generic but it is not going to be     installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Как я могу освободить или расширить загрузку, не испортив мою установку?

18 ответов

Решение

Освобождение места в корневой файловой системе

Чтобы освободить место в корневой файловой системе, вы можете попробовать выполнить apt-get clean,

Если это не сработает, вы можете перейти к /var/cache/apt/archives и вручную удалите несколько файлов из кэша, чтобы освободить место, например:

sudo rm linux-headers-*

Это не помешает удалить все .deb файлы здесь, если вам нужно - это то, что apt-get clean делает. Они будут автоматически перезагружены apt если они нужны снова.

Освобождение пространства в файловой системе / boot

Оригинальный постер имеет отдельный /boot раздел, и это то, что является полным и предотвращает apt система из работающих. Ему будет необходимо освободить там место.

Если там почти достаточно места, перейдите к /boot и удалите файл конфигурации или два:

sudo rm config-3.2.0-19-generic-pae

например, но используя имя одной из версий ядра, которую вы намереваетесь удалить в любом случае. Это освободит немного места (около 144K за штуку).

Если вам нужно больше места, индивидуально удалите старые vmlinuz, initrd, abi а также System.map файлы, пока у вас не будет достаточно места (около 22M для одной из моих версий ядра i386).

Что бы вы ни делали, не удаляйте их все. По крайней мере, вы должны хранить последние две подходящие версии файлов каждого типа для каждого используемого вами ядра.

Затем перейдите к командам apt-get install. Как упомянуто выше, им, возможно, придется повторно загрузить некоторые удаленные вами дэбы, но в этом случае это произойдет автоматически. Когда вы снова включите apt, выполните очистку с помощью apt-get, чтобы удалить пакеты, соответствующие удаленным файлам, чтобы все совпадало.


Конфиг файл в /boot это конфигурация ядра, которая использовалась командой ядра для сборки ядра с тем же именем. Удалять его безвредно, если только вы не хотите использовать его для справки или для создания собственных ядер.

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

В моем случае apt команды и dpkg Команда не может завершиться и не может быть удалена. Не удалось установить автообновление при установке 2.6.32-56-server,

Моим первым шагом было определить пространство, которое будет использоваться,

cd /boot
du -sk *|sort -n

У меня было около 30 ядер и вспомогательных файлов.

Я сделал uname -a чтобы получить работающее ядро, я определил, что я был на альтернативном Linux 2.6.32-43-server и сделал tar из 6 версий, которые не были запущены, и были старыми.

tar -cvf ~username/boot.tar *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

Я тогда сделал rm -rf из того, что я поддержал:

rm -rf *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

Я показываю эти команды в качестве примеров, вам придется решить, с чем вы будете работать в вашей ситуации.

Теперь, когда у меня было немного места на /bootЯ смог бежать

apt-get -f install 

Для очистки неудачной установки 2.6.32-56-server,

Я тогда сделал

apt-get remove linux-headers-2.6.32-38 linux-headers-2.6.32-38-server linux-image-2.6.32-38-server
apt-get remove linux-headers-2.6.32-39 linux-headers-2.6.32-39-server linux-image-2.6.32-39-server

Это дало мне возможность вернуть то, что я поддержал.

tar -xf ~username/boot.tar
rm  ~username/boot.tar    

Чтобы очистить, я мог бы запустить:

apt-get autoremove

Я перезагрузился и теперь использую 4% /boot,

Ты можешь использовать dpkg вместо apt-get удалить старые ядра:

sudo dpkg -r linux-image-3.2.0-29-generic

Я заметил, что в загрузочном каталоге все еще есть файлы старых версий:

$ ls /boot
vmcoreinfo-2.6.31-17-server

И менеджер пакетов перечислит старые версии:

dpkg -l | grep linux-image

Поэтому я использовал эту команду (autoremove также удалил бы более свежие изображения, которые я не хочу удалять)

sudo apt-get purge linux-image-2.6.31-17-server

У меня осталось еще несколько заголовков:

dpkg -l | grep linux-headers

Итак, я сделал это:

sudo apt-get purge linux-headers-2.6.32-34

Наконец, остался один пакет, который я не смог удалить с помощью apt-get purge:

$ dpkg -l | grep linux-image
rc  linux-image-2.6.28-11-server

Источник: Удалить пакет, помеченный как rc dpkg

sudo dpkg --purge linux-image-2.6.28-11-server

Это то, что я использовал:

sudo apt-get autoremove linux-image-xxxx

Сделайте это для всех старых ядер и оставьте только самые последние два.

Если вы хотите автоматически удалить старые ядра и обновить GRUB, посмотрите это: Документация по Ubuntu

Я обнаружил, что единственное, что работает для меня, это использование Aptitude.

sudo aptitude

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

Должен быть минус - рядом с разбитыми ядрами. Нажмите g снова, и это удалит сломанные ядра. Нажмите q выйти Тогда вы должны быть в состоянии использовать sudo apt-get autoremove избавиться от старых ядер и освободить место.

Проверьте использование /var/tmp с du -sh /var/tmp/, Все файлы в этой папке могут быть удалены, чтобы освободить место.

Затем вы можете запустить следующее, чтобы удалить старые ядра:

sudo apt-get clean
sudo apt install byobu
sudo purge-old-kernels
sudo apt autoremove
sudo update-grub

Вы не можете воздействовать на пакеты, но вы можете действовать на другие файлы. Сначала зайдите в свою домашнюю папку и посмотрите, есть ли что- нибудь, что вы можете удалить. Если нет, попробуйте переместить большое количество файлов в другой раздел (или на флэш-диск), а затем попробуйте sudo apt-get install -f чтобы устранить проблемы с зависимостями пакетов (скорее всего, вы установили файл.deb через dpkg), а затем удалите все старые ядра. Если у вас есть хотя бы 10 МБ, попробуйте очистить ненужное программное обеспечение или файлы.

Установите средство очистки Linux, как это.

Затем запустите в терминале:

sudo linux-purge --clear-boot --fix

Затем продолжайте удалять ядра, например,

sudo linux-purge --keep 1 --choose

Дополнительно:

Если вы хотите использовать linux-purge для автоматического удаления ядра вместо того, чтобы использовать для этого автоматические обновления, вам следует отключить удаление неиспользуемых вещей, отредактировав /etc/apt/apt.conf.d/50unattended-upgrades, и настроить службу systemd. проведение

/usr/local/bin/linux-purge --auto-only --keep 1 --yes

когда угодно.

Используйте Synaptic Package Manager. Просто выберите пакет, который вы хотите удалить, и он предложит вам также удалить пакеты, которые зависят от него. По моему опыту, пакеты ядра всегда входят в группы из двух (или более, в зависимости от того, как вы считаете) взаимозависимых. Обычно вы можете быстро найти старые, используя фильтр "локальный / устаревший".

Запустите это:

sudo apt-get autoremove
sudo apt-get --purge remove && sudo apt-get autoclean
sudo apt-get -f install
sudo dpkg-reconfigure -a

Источник: я получаю эту ошибку после апгейда. пожалуйста помоги

Ответ mreiter хорош, но немного устарел. Вот мой взгляд на освобождение места в /boot и удаление старых ядер в целом:

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

      uname -r

В моем случае я получил:

      5.11.0-41-generic

Перечислите установленные версии ядра:

      apt list --installed linux-image*

В моем случае это дало:

      linux-image-5.11.0-40-generic  <-- Can be removed
linux-image-5.11.0-41-generic  <-- In use. Don't remove
linux-image-generic-hwe-20.04  <-- Meta package. Don't remove

Не очищайте текущую версию ядра! Не очищайте пакеты, начинающиеся с «linux-image-generic». Это метапакеты для предоставления обновленных ядер. Теперь вы можете очистить (удалить, включая дополнительные файлы / файлы конфигурации) все версии ядра, включая их модули и заголовки, которые вы не используете:

      sudo apt purge linux-image-5.11.0-40-generic linux-modules-5.11.0-40-generic linux-headers-5.11.0-40-generic

apt сообщит вам, какие пакеты он на самом деле удалит. Убедитесь, что ни один из них не включает вашу текущую версию ядра. Grub должен обновляться автоматически.

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

      dpkg -l | grep linux-image | grep rc | awk '{ print $2 }' | sort -V

Если в нем перечислены какие-либо пакеты, очистите их все, используя:

      dpkg -l | grep linux-image | grep rc | awk '{ print $2 }' | sort -V | xargs sudo dpkg --purge

Чтобы очистить все остальное, запустите:

      sudo apt autoremove && sudo apt autoclean && sudo apt clean

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

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

Поэтому я написал этот сценарий, основанный на многих предложениях по поиску в Google, которые не требуют дальнейшей установки чего-либо. Сценарий несколько раз модифицировался для поддержки некоторых моих "неожиданных" ситуаций. Например, если запустить его на Raspberry Pi, update-grub, вероятно, не существует. И в некоторых случаях при запуске последних обновлений серверы зависали с IPv6, где некоторые сайты были недоступны.

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

#!/bin/bash

ipv4="-o Acquire::ForceIPv4=true"

if [ "$1" = "4" ] ; then
    withip=$ipv4
    echo "Going IPv4 ($withip)"
fi

echo "Autoremove+Purge."
apt-get $withip -y -f autoremove --purge >/dev/null 2>&1

if [ "$?" != "0" ] ; then
    echo "Auto Removal Failed!"
fi

echo "Old dependency fix."
apt-get $withip -f -y install >/dev/null 2>&1

if [ "$?" != "0" ] ; then
    echo "That failed. So we'll try to make up to it during this process."
fi

echo "Now, going old kernel cleanup!"
kern=$(dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`)
hadErrors=0

for k in $kern
do
    echo apt-get -y purge $k
    apt-get $withip -y purge $k >/dev/null 2>&1

    if [ "$?" != "0" ] ; then
        echo "Failed apt-purge... Using plan B (--force-all -P)..."
        dpkg --force-all -P $k >/dev/null 2>&1
        echo "Rerunning stuff (apt-get -f -y install) for dependencies..."
        apt-get $withip -f -y install >/dev/null 2>&1
        if [ "$?" != "0" ] ; then
            echo "Still failing..."
            hadErrors=1
        fi
    fi
done

if [ "$hadErrors" = "1" ] ; then
    echo "I had errors. I should rerun this process, to see if there are more kernels that were left out after cleanup..."
    /usr/local/tornevall/cleankernel
fi

apt-get $withip autoremove
apt-get $withip update
apt-get $withip upgrade
apt-get $withip dist-upgrade

grb=$(which update-grub)
if [ "" != "$grb" ] ; then
    update-grub
else
    echo "Can't upgrade grub since update-grub is missing..."
fi

Я видел пару статей о том, что / boot переполнен, но это не решается с помощью dpkg, очищающего старые ядра Linux, потому что apt-get -f install или apt-get -f autoremov e переустанавливает ядра.

В моем случае, по крайней мере, подписанные и дополнительные пакеты также необходимо было удалить - ядра были зависимостями для этих пакетов, поэтому их можно было переустановить. Как правило, соответствующие пакеты ядра должны быть очищены перед вызовом 'install'. Если вы попытались выполнить apt-get upgrade сразу после очистки, в сообщении об ошибке должно было быть указано, какие пакеты имеют неудовлетворенную зависимость от ядра, которое вы только что очистили.

В моем случае сработала следующая тактика:

#as sudo, repeat 1-3 for any old kernels; can be scripted
dpkg --force-all -P linux-image-4.4.0-112-generic 
dpkg --purge linux-image-extra-4.4.0-112-generic
dpkg --purge linux-signed-image-4.4.0-112-generic
apt-get -f install #dependency resolution didn't have work to do for kernel packages
apt-get autoremove --purge -f 
apt-get autoclean
apt-get upgrade

Я не нашел эту тему при поиске, поэтому я создал ее: Как спасти после установки или обновления apt, которые заполняют место на диске и ломаются?, но это дубликат.

В основном: используйте, чтобы получить место на диске. Тогда Apt снова заработает. Затем используйте apt purge <package>. Вы можете найти последние установленные сломанные пакеты, используя cat /var/log/apt/history.log.

Было бы здорово, если бы Apt сказал «использовать apt clean, если диск заполнен», что он мог бы проверить. Он также может проверить наличие достаточного свободного места, прежде чем разрешать непринудительную установку.

Этот пост предлагает использовать apt cleanи восстановить базу данных. Я не уверен, что apt clean работает с apt сломанным и показывает apt purge apt --fix-broken install. apt install -fкажется, принудительно повторяет ожидающую установку.Проблема с местом на диске после обновления apt-get

Прочтите мой другой пост, чтобы узнать о других советах по очистке дискового пространства, а также о том, как предотвратить его переполнение.

Рекомендую сделать снимок перед этим

Я сделал:

      uname -a

Чтобы получить используемую версию ядра

      ls -l /boot

Чтобы увидеть все версии

      rm *4.4.0-(old unused versions)*

Затем побежал

      sudo apt -f install

Но тут пришло сообщение: W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.и сразу заметил, что /boot снова заполняется до 100%, что приводит к ошибке apt.

Но потом нашел это: https://serverfault.com/a/623704

Заметил похожее несоответствие в моих конфигах и запустил

      /usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf
update-initramfs 

Перезагрузился, а затем снова запустил sudo apt -f installуспешно

Простые шаги для решения проблемы, когда /boot заполнен на 100%:

Это действительно хорошая статья: https://gist.github.com/ipbastola/2760cfc28be62a5ee10036851c654600 .

TL/DR:

Определите, какие образы Linux у вас установлены:

      dpkg -l linux-image-* | awk '/ii/{print $2}'

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

      sudo rm /boot/*-OLD_KERNEL_IMAGE_VERSION-*

Пример:

      sudo rm /boot/*-5.4.0-31-*

Исправление «частичной установки»:

      sudo apt -f install

Сделаем небольшую очистку:

      sudo apt autoremove ; sudo apt clean

Обновить Grub:

      sudo update-grub

Просто работает sudo apt-get -f autoremove решил мою проблему.

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