Неможливо очистити повне / завантажувальне через невстановлені залежності


43

Я отримав повідомлення про помилку, в якому пояснюється, що мій / завантажувальний повний. спроба очищення старих файлів зображень завжди здається невдалою через повну помилку диска або помилки залежності. Може хтось пояснить, де я помиляюся.

$ 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 

спробувати вирішити залежності.

Нарешті, видайте команду «очищення старих ядер»

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

Команда вгорі видалить ВСІ ядра, крім завантаженого в даний час.

Оскільки у вас є окремий / завантажувальний розділ, майте на увазі, що вам потрібно буде відслідковувати його простір та очищення часто (частота залежить від місця / завантаження)


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 вище, він все ще хоче встановити всі старі ядра під час будь-якої з операцій очищення, описаних вище. Чи є спосіб просто сказати це ігнорувати непов'язані залежності та видалити єдине, повне старе ядро?
NKijak

3
Хочу додати, що мені також довелося видалити додаткові дані sudo dpkg --force-all -P linux-image-extra-3.13.0-32-generic. В іншому випадку ці додаткові елементи все ще залежать від фактичного зображення, і -fпрапор призведе до того, що зображення буде перевстановлене, а потім не вистачить місця на диску.
Привидник

1
@LonnieBest Я згоден. На відміну від Arch Linux зберігає лише один резервний запас. З іншого боку, Fedora, схоже, не має цього питання.
Франклін Ю

5

Це те, що працювало для мене на Ubuntu 16.04.

sudo apt autoremove --purge
sudo apt autoremove
sudo apt-get -f install
sudo apt-get upgrade

Цей метод спрацював для мене.
Бок

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*; ПРИМІТКА. Перегляньте поточне зображення ядра ще раз, перш ніж видаляти будь-яке зображення.
Хемант Торат

Досі скаржиться, що має невиконані залежності
Матісс Юргеліс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.