Мой раздел / boot достиг 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 installedE: 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-genericrun-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-27-generic /boot/vmlinuz-3.2.0-27-genericErrors were encountered while processing:/var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.debE: 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 ^iiii  linux-image-2.6.38-13-server  2.6.38-13.52  Linux kernel image for version 2.6.38 on x86_64ii  linux-image-3.0.0-13-server   3.0.0-13.22   Linux kernel image for version 3.0.0  on x86_64ii  linux-image-3.0.0-14-server   3.0.0-14.23   Linux kernel image for version 3.0.0  on x86_64ii  linux-image-3.0.0-15-server   3.0.0-15.26   Linux kernel image for version 3.0.0  on x86_64ii  linux-image-3.0.0-16-server   3.0.0-16.29   Linux kernel image for version 3.0.0  on x86_64ii  linux-image-3.0.0-17-server   3.0.0-17.30   Linux kernel image for version 3.0.0  on x86_64ii  linux-image-3.2.0-24-generic  3.2.0-24.39   Linux kernel image for version 3.2.0  on 64 bit x86 SMPii  linux-image-3.2.0-25-generic  3.2.0-25.40   Linux kernel image for version 3.2.0  on 64 bit x86 SMPii  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-serverReading package lists... DoneBuilding dependency treeReading state information... DoneYou 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     installedE: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

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

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

Чтобы освободить место в корневой файловой системе, вы можете попробовать выполнить 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

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

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

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

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


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

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

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

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

cd /bootdu -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-serverapt-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.tarrm  ~username/boot.tar    

Чтобы привести себя в порядок, я тогда мог бы бежать:

apt-get autoremove

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

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

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

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

$ ls /bootvmcoreinfo-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-imagerc  linux-image-2.6.28-11-server

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

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

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

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

sudo apt-get cleansudo apt install byobusudo purge-old-kernelssudo apt autoremovesudo update-grub

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

sudo apt-get autoremove linux-image-xxxx

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

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

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

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

sudo aptitude

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

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

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

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

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

#!/bin/bashipv4="-o Acquire::ForceIPv4=true"if [ "$1" = "4" ] ; then    withip=$ipv4    echo "Going IPv4 ($withip)"fiecho "Autoremove+Purge."apt-get $withip -y -f autoremove --purge >/dev/null 2>&1if [ "$?" != "0" ] ; then    echo "Auto Removal Failed!"fiecho "Old dependency fix."apt-get $withip -f -y install >/dev/null 2>&1if [ "$?" != "0" ] ; then    echo "That failed. So we'll try to make up to it during this process."fiecho "Now, going old kernel cleanup!"kern=$(dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`)hadErrors=0for k in $kerndo    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    fidoneif [ "$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/cleankernelfiapt-get $withip autoremoveapt-get $withip updateapt-get $withip upgradeapt-get $withip dist-upgradegrb=$(which update-grub)if [ "" != "$grb" ] ; then    update-grubelse    echo "Can't upgrade grub since update-grub is missing..."fi

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

https://help.ubuntu.com/community/RemoveOldKernels

@dskrvk Да! Почему Удалить неиспользуемые зависимости не используется по умолчанию?

Я думаю, что ответ @ mreiter может быть лучшим: он использует диспетчер пакетов, и он работал, когда другие команды диспетчера пакетов завершались неудачей, по крайней мере, для меня: apt - My /boot partition hit 100% and now I can't upgrade. Can't remove old kernels to make room - Ask Ubuntu