Мой / загрузочный раздел достиг 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).

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

163
задан 27 April 2018 в 10:23

15 ответов

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

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

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

sudo rm linux-headers-*

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

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

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

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

sudo rm config-3.2.0-19-generic-pae

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

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

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

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


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

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

134
ответ дан 27 April 2018 в 10:23

В моем случае команды apt и dpkg не могли закончиться, и не могли быть удалены. Автообновление не удалось установить 2.6.32-56-сервер.

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

cd /boot
du -sk *|sort -n

у меня было около 30 ядер и поддерживающих файлов.

я сделал uname -a, чтобы получить работающее ядро, Я обнаружил, что я работаю на альтернативном 2.6.32-43-сервере Linux и сделал 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-сервер.

Затем я сделал

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.

68
ответ дан 27 April 2018 в 10:23

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

$ 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
10
ответ дан 27 April 2018 в 10:23

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

sudo dpkg -r linux-image-3.2.0-29-generic
22
ответ дан 27 April 2018 в 10:23

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

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

sudo apt-get clean
sudo apt install byobu
sudo purge-old-kernels
sudo apt autoremove
sudo update-grub
3
ответ дан 27 April 2018 в 10:23

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

sudo apt-get autoremove linux-image-xxxx

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

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

3
ответ дан 27 April 2018 в 10:23

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

2
ответ дан 27 April 2018 в 10:23

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

1
ответ дан 27 April 2018 в 10:23

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

0
ответ дан 27 April 2018 в 10:23

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

sudo aptitude

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

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

2
ответ дан 27 April 2018 в 10:23

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

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

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

0
ответ дан 27 April 2018 в 10:23

Я видел пару статей о переполнении / 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
0
ответ дан 21 October 2019 в 15:16

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

Итак, я написал это script, основанный на многих предложениях в 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
1
ответ дан 21 October 2019 в 15:16

Установить 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

, когда захотите.

0
ответ дан 21 October 2019 в 15:16

Простые шаги для решения проблемы, когда / 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
0
ответ дан 5 January 2021 в 23:37

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

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