Моя первая проблема была, когда я пытался 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).
Как я могу освободить или расширить загрузку, не испортив мою установку ?
Чтобы освободить место в корневой файловой системе, вы можете попробовать выполнить apt-get clean
.
Если это не сработает, вы можете перейти к /var/cache/apt/archives
и вручную удалить несколько файлов из кэша, чтобы получить обратно немного места, например:
sudo rm linux-headers-*
Здесь не повредит удалить все файлы .deb
, если понадобится - это то, что делает apt-get clean
. Они будут автоматически повторно загружены apt
, если они снова понадобятся.
Оригинальный 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
, чтобы освободить место для нового.
В моем случае команды 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
.
Я заметил, что в загрузочном каталоге все еще остались некоторые файлы старых версий:
$ 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
Вы можете использовать dpkg
вместо apt-get
для удаления старые ядра:
sudo dpkg -r linux-image-3.2.0-29-generic
Проверьте использование / 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 autoremove linux-image-xxxx
Сделайте это для всех старых ядер и оставьте только два самых последних.
Если вы хотите автоматически удалить старые ядра и обновить GRUB см. это: Документация Ubuntu
Вы не можете работать с пакетами, но вы можете работать с другими файлами. Сначала просмотрите свою домашнюю папку и посмотрите, есть ли что-нибудь , что вы можете удалить. Если нет, попробуйте переместить хорошее количество файлов на другой раздел (или флешку), а затем попробуйте sudo apt-get install -f
, чтобы устранить проблемы с зависимостями от пакетов (скорее всего, вы установили .deb файл через dpkg
), а затем очистите все старые ядра. Как только у вас будет как минимум 10 МБ, попробуйте очистить ненужные программы или файлы.
Используйте Synaptic Package Manager. Просто выберите пакет, который вы хотите удалить, и он предложит вам также удалить пакеты, которые от него зависят. По моему опыту, пакеты ядра всегда приходят группами по два (или более, в зависимости от того, как вы считаете), которые являются взаимозависимыми. Обычно вы можете быстро найти старые пакеты, используя фильтр "local/obsolete".
Простой запуск sudo apt-get -f autoremove
решил мою проблему.
Я обнаружил, что единственное, что работало для меня, это использование Aptitude.
sudo aptitude
Затем, когда он откроется, он обычно говорит что-то о неудовлетворенных зависимостях на дне. Вы можете нажать на букву g
, чтобы продолжить предлагаемое удаление. Он перенесет вас на страницу, где перечислит, что произойдет.
Рядом с разбитыми ядрами должно быть минус -
. Снова нажмите g
, и сломанные ядра будут удалены. Нажмите q
, чтобы выйти. Затем вы сможете использовать sudo apt-get autoremove
, чтобы избавиться от старых ядер и освободить место.
Запустите это:
sudo apt-get autoremove
sudo apt-get --purge remove && sudo apt-get autoclean
sudo apt-get -f install
sudo dpkg-reconfigure -a
Источник: Я получаю эту ошибку после обновления. пожалуйста, помогите
Я видел пару статей о переполнении / 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
Время от времени я боролся с этой проблемой, и до сих пор не нашел решения, которое бы действительно выполняло всю работу. В некоторых случаях удаление старых ядер заканчивается зависимостями, которые не позволяют мне что-либо удалять, и мне приходилось удалять ядра вручную из / 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
Установить 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
, когда захотите.
Это действительно хорошая статья: https://gist.github.com/ipbastola/2760cfc28be62a5ee10036851c654600
Определите, какие образы 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