Не удается очистить полную / загрузку из-за неудовлетворенных зависимостей

43

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

$ 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).
Филип Ховард
источник
Пожалуйста, измените ваш вопрос и вывод sudo apt-get autoremoveи ls /boot.
Муру
Попробуйте ответ Фрог. Используйте uname -rкоманду, чтобы узнать текущую версию ядра, и попробуйте удалить другое ядро.
Муру

Ответы:

64

В таком случае я бы использовал 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 

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

Наконец, выполните команду "cleanup old kernels"

 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)

NickTux
источник
1
Привет, когда я пытаюсь удалить их, я получаю сообщение об ошибке sudo dpkg --force-all -P abi-3.13.0-32-generic dpkg: предупреждение: игнорирование запроса на удаление abi-3.13.0-32-generic, который не является установлен
Филипп Говард
9
Это работает для меня, с одной модификацией: после удаления изображений ядра с dpkg, мне пришлось бежать , sudo apt-get -f autoremoveчтобы apt-getостановить жалуясь неудовлетворенными зависимостями. В противном случае, sudo apt-get -f installочевидно, продолжал пытаться переустановить все образы ядра, которые я удалил dpkg, которые, очевидно, просто /bootснова заполнились .
mdunsmuir
4
После принудительной очистки и apt-get -f autoremoveкомментария в @mdunsmuir, приведенного выше, он все еще хочет установить все старые ядра во время любой из приведенных выше операций очистки. Есть ли способ просто сказать ему, чтобы он игнорировал несвязанные зависимости и удалял одно, полное старое ядро?
Нкияк
3
Я хотел бы добавить, что мне также пришлось удалить дополнения sudo dpkg --force-all -P linux-image-extra-3.13.0-32-generic. В противном случае эти дополнения по-прежнему зависят от фактического образа, и этот -fфлаг приведет к переустановке образа и последующему исчерпанию дискового пространства.
Ghostkeeper
1
@LonnieBest Я согласен. В отличие от Arch Arch сохраняет только один запасной вариант. У Fedora, похоже, нет этой проблемы.
Франклин Ю
5

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

sudo apt autoremove --purge
sudo apt autoremove
sudo apt-get -f install
sudo apt-get upgrade
MSA
источник
Этот метод работал для меня.
Бок
2

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

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
Хемант Торат
источник
Если он по-прежнему выдает ошибку места на загрузочном диске для установки / удаления файлов, то удалите непосредственно один из старых образов из каталога / boot, ls -lh /boot/*-3.13.0-119*; rm /boot/*-3.13.0-119*; ПРИМЕЧАНИЕ. Пожалуйста, просмотрите текущий образ ядра еще раз, прежде чем удалять любое изображение.
Гемант Торат
Все еще жалуется, что у него есть неудовлетворенные зависимости
Матисс Юргелис