Не удается очистить старые ядра (проблемы с зависимостями), но в / boot недостаточно места [дубликат]

Я использую Ubuntu 14.04.4 LTS и пытаюсь установить новый пакет с помощью apt-get.К сожалению, всякий раз, когда я пытаюсь, я получаю такие сообщения, как:

The following packages have unmet dependencies:
 linux-image-extra-3.16.0-70-generic : Depends: linux-image-3.16.0-70-generic but it is not going to be installed
 linux-image-generic-lts-utopic : Depends: linux-image-3.16.0-70-generic but it is not going to be installed
 linux-signed-image-3.16.0-70-generic : Depends: linux-image-3.16.0-70-generic (= 3.16.0-70.90~14.04.1) but it is not going to be installed

Выполняя поисковые запросы, я обнаружил, что это может быть вызвано нехваткой места в загрузочном разделе (и, конечно же, df показывает / boot при 100%). Однако каждый раз, когда я пытаюсь запустить команды apt-get в принятом ответе, я получаю те же ошибки, что и выше.

В поисках другого решения, которое не использует apt-get , я наткнулся на этот пост , в котором рекомендуется использовать такие вещи, как sudo dpkg --purge linux-image -4.2.0-15-generic для старых, неиспользуемых ядер.

dpkg -l | хвост -n +6 | grep -E 'linux-image- [0-9] +' | grep -Fv $ (uname -r) (из вышеупомянутого сообщения) показывает, что у меня есть несколько старых ядер в состоянии pi (желательно очищено, состояние устанавливается в соответствии с это )

uname -r сообщает мне, что я использую ядро ​​3.16.0-62-generic, поэтому я подумал, что могу безопасно удалить эти старые ядра. Однако попытка сделать это с помощью таких вещей, как sudo dpkg --purge linux-image-3.16.0-49-generic , приводит к:

dpkg: error processing package linux-image-3.16.0-49-generic (--purge):
 dependency problems - not removing
Errors were encountered while processing:
 linux-image-3.16.0-49-generic

Garrg! Я на грани своего остроумия и не в себе (на самом деле мало что знаю о dpkg или apt-get), поэтому мне нужна помощь.

Вопросы:

  1. Почему я не могу удалить старые ядра с помощью dpkg ?

  2. Если этот вопрос не может быть решен напрямую, я думаю, в конечном итоге я хочу знать: Что мне нужно сделать, чтобы снова установить новые пакеты?


Другие вещи, которые я пробовал :

  • sudo apt-get autoremove : приводит к исходной ошибке о неудовлетворении dependencies
  • sudo apt-get -f autoremove : приводит к:
Unpacking linux-image-3.16.0-70-generic (3.16.0-70.90~14.04.1) ...
dpkg: error processing archive /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb (--unpack):
 cannot copy extracted data for './boot/vmlinuz-3.16.0-70-generic' to '/boot/vmlinuz-3.16.0-70-generic.dpkg-new': failed to write (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.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic
Errors were encountered while processing:
 /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Примечание : Я перенес этот вопрос из «Unix & Linux Stack Exchange»

5
задан 13 April 2017 в 15:37

1 ответ

Используйте uname -r для показа в настоящее время рабочего ядра. Ничего НЕ УДАЛЯЙТЕ с этим номером версии.

можно найти, который упаковывает ядра в /boot, принадлежат:

for i in /boot/vmlinuz* ; do 
    dpkg -S $i| egrep -v $(uname -r)
done

можно удалить эти пакеты с sudo apt-get purge packagename... .

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

Для извлечения номеров версий:

for i in /boot/vmlinuz* ; do 
    dpkg -S $i | egrep -v $(uname -r)
done |cut -d- -f3-4  

Для нахождения других пакетов с теми же номерами версий:

for j in $(
    for i in /boot/vmlinuz* ; do 
        dpkg -S $i| egrep -v $(uname -r)
    done |cut -d- -f3-4 ) ; 
do 
     dpkg -l "*$j*" | egrep '^ii|^rc'
done  

Для автоматизации удаления всех ядер кроме текущего ядра и всех пакетов, версии которых соответствуют удаленным ядрам ( Опасность, Wil Robinson ):

Просто добавляют

| awk '{print $2}' | xargs sudo apt-get --dry-run purge

к предыдущему фрагменту кода. Когда Вы уверены, что это делает то, что Вы хотите, удаляете --dry-run.

, Если Ваш /boot так полно, что Вы не можете удалить пакеты, можно сделать некоторое пространство на /boot путем удаления самого старого /boot/initrd.img* файл,

3
ответ дан 14 April 2017 в 01:37

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

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