Не может чистить полный ботинок / из-за невстреченных зависимостей

Я получил сообщение об ошибке, объяснив, что моя начальная загрузка / полна. попытка очистить старые файлы изображений всегда, кажется, приводит к сбою из-за диска полные ошибки или ошибки зависимости. Мог кто-то объяснять, где я иду не так, как надо.

$ sudo apt-get autoremove
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-extra-3.13.0-44-generic : Depends: linux-image-3.13.0-44-generic but it is not installed
 linux-image-extra-3.13.0-45-generic : Depends: linux-image-3.13.0-45-generic but it is not installed
 linux-image-generic : Depends: linux-image-3.13.0-45-generic but it is not installed
E: Unmet dependencies. Try using -f.

$ ls /boot
abi-3.13.0-32-generic         initrd.img-3.13.0-43-generic
abi-3.13.0-36-generic         lost+found
abi-3.13.0-37-generic         memtest86+.bin
abi-3.13.0-39-generic         memtest86+.elf
abi-3.13.0-40-generic         memtest86+_multiboot.bin
abi-3.13.0-43-generic         System.map-3.13.0-32-generic
config-3.13.0-32-generic      System.map-3.13.0-36-generic
config-3.13.0-36-generic      System.map-3.13.0-37-generic
config-3.13.0-37-generic      System.map-3.13.0-39-generic
config-3.13.0-39-generic      System.map-3.13.0-40-generic
config-3.13.0-40-generic      System.map-3.13.0-43-generic
config-3.13.0-43-generic      vmlinuz-3.13.0-32-generic
grub                          vmlinuz-3.13.0-36-generic
initrd.img-3.13.0-32-generic  vmlinuz-3.13.0-37-generic
initrd.img-3.13.0-36-generic  vmlinuz-3.13.0-39-generic
initrd.img-3.13.0-37-generic  vmlinuz-3.13.0-40-generic
initrd.img-3.13.0-39-generic  vmlinuz-3.13.0-43-generic
initrd.img-3.13.0-40-generic

Я использовал

kernelver=$(uname -r | sed -r 's/-[a-z]+//')
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve $kernelver

добираться

linux-headers-3.13.0-32
linux-headers-3.13.0-32-generic
linux-headers-3.13.0-36
linux-headers-3.13.0-36-generic
linux-headers-3.13.0-37
linux-headers-3.13.0-37-generic
linux-headers-3.13.0-39
linux-headers-3.13.0-39-generic
linux-headers-3.13.0-40
linux-headers-3.13.0-40-generic
linux-headers-3.13.0-44
linux-headers-3.13.0-44-generic
linux-headers-3.13.0-45
linux-headers-3.13.0-45-generic
linux-image-3.13.0-32-generic
linux-image-3.13.0-36-generic
linux-image-3.13.0-37-generic
linux-image-3.13.0-39-generic
linux-image-3.13.0-40-generic

Затем выбирая первое изображение, которое удалит

$ sudo apt-get purge linux-image-3.13.0-32-generic
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-extra-3.13.0-32-generic : Depends: linux-image-3.13.0-32-generic but it is not going to be installed
 linux-image-extra-3.13.0-44-generic : Depends: linux-image-3.13.0-44-generic but it is not going to be installed
 linux-image-extra-3.13.0-45-generic : Depends: linux-image-3.13.0-45-generic but it is not going to be installed
 linux-image-generic : Depends: linux-image-3.13.0-45-generic but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
45
задан 30 June 2017 в 01:54

4 ответа

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

Прежде всего найдите ядро, в котором загружается система. Тот, который сейчас загружен. Откройте терминал (CTRL + ALT + T) и введите следующую команду

uname -r

. Она покажет вам загруженное ядро, вы НЕ должны пытаться удалить его.

Затем введите команду

ls /boot 

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

sudo dpkg --force-all -P linux-image-3.13.0-32-generic

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

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

sudo apt-get install -f 

, чтобы попытаться разрешить зависимости.

Наконец, введите команду «очистить старые ядра»

 sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")

Вышеупомянутая команда удалит ВСЕ ядра, кроме того, которое загружено в данный момент.

Поскольку у вас есть отдельный раздел / boot, имейте в виду, что вам нужно будет часто отслеживать его пространство и очищать его (частота зависит от объема / boot)

66
ответ дан 23 November 2019 в 00:01

Это то, что у меня работало в Ubuntu 16.04.

sudo apt autoremove --purge
sudo apt autoremove
sudo apt-get -f install
sudo apt-get upgrade
6
ответ дан 23 November 2019 в 00:01

Список всех ядер:

dpkg --list 'linux-image*'

Показать текущее ядро:

uname -r

Список всех ядер ИСКЛЮЧАЯ текущее:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Убедитесь, что вашего текущего ядра нет в этом списке.

Удалить все ядра ИСКЛЮЧАЯ текущий:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

Очистить другие данные:

sudo apt-get autoremove

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

sudo dpkg --purge linux-image-X.X.X-XXX-generic linux-image-extra-X.X.X-XXX-generic linux-signed-image-X.X.X-XXX-generic
sudo dpkg --purge linux-image-Y.Y.Y-YYY-generic linux-image-extra-Y.Y.Y-YYY-generic linux-signed-image-Y.Y.Y-YYY-generic

sudo apt-get -f install

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge
2
ответ дан 23 November 2019 в 00:01

Небольшое дополнение:

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

Как описано в На странице RemoveOldKernels вики сообщества Ubuntu вы можете настроить автоматическое обновление для автоматического удаления старых ядер, добавив следующую строку в свой файл конфигурации автоматического обновления:

Unattended-Upgrade::Remove-Unused-Dependencies "true";

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

Он также удаляет и другие ненужные пакеты, что вам нужно или нет.

0
ответ дан 5 January 2021 в 22:57

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

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