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