No se pueden purgar los kernels antiguos (problemas de dependencia), pero /boot no tiene espacio

No se pueden purgar los kernels antiguos (problemas de dependencia), pero /boot no tiene espacio

Estoy ejecutando Ubuntu 14.04.4 LTS y estoy intentando instalar un nuevo paquete usando apt-get. Desafortunadamente, cada vez que lo intento recibo mensajes como:

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

Buscando en Google encontré queEsto puede deberse a la falta de espacio en la partición de arranque.(y efectivamente, dfse muestra /bootal 100%). Sin embargo, cada vez que intento ejecutar los apt-getcomandos de la respuesta aceptada allí, aparece el mismo error que el anterior.

Buscando otra solución que no funcionó apt-get, encontréesta publicación, que recomienda usar elementos como sudo dpkg --purge linux-image-4.2.0-15-generickernels antiguos y no utilizados.

dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+' | grep -Fv $(uname -r)(de la publicación mencionada anteriormente) muestra que tengo varios núcleos antiguos en el piestado (deseado purgado, el estado está instalado de acuerdo coneste)

uname -rme dice que el kernel que estoy ejecutando es 3.16.0-62-generic, así que pensé que debería ser seguro eliminar estos kernels antiguos. Sin embargo, intentar hacerlo con cosas como sudo dpkg --purge linux-image-3.16.0-49-genericresultados en:

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

¡Garr! Estoy al límite de mi ingenio y fuera de mi alcance (realmente no sé mucho sobre dpkg o apt-get), así que necesito ayuda.

Preguntas:

  1. ¿Por qué no puedo desinstalar los kernels antiguos dpkg?

  2. Si esa pregunta no se puede resolver directamente, supongo que en última instancia quiero saber:¿Qué debo hacer para llegar a un estado en el que pueda instalar nuevos paquetes nuevamente?


Otras cosas que he probado:

  • sudo apt-get autoremove: da como resultado el error original sobre dependencias no satisfechas
  • sudo apt-get -f autoremove: resulta en:
Descomprimiendo linux-image-3.16.0-70-generic (3.16.0-70.90~14.04.1) ...
dpkg: error al procesar el archivo /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb (--unpack):
 no se pueden copiar los datos extraídos de './boot/vmlinuz-3.16.0-70-generic' a '/boot/vmlinuz-3.16.0-70-generic.dpkg-new': no ​​se pudo escribir (no queda espacio en el dispositivo)
No se ha escrito ningún informe de informe porque el mensaje de error indica un error de disco lleno
                                                                              dpkg-deb: error: la señal eliminó la pasta del subproceso (tubería rota)
Examinando /etc/kernel/postrm.d .
ejecutar-parts: ejecutando /etc/kernel/postrm.d/initramfs-tools 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic
ejecutar-parts: ejecutando /etc/kernel/postrm.d/zz-update-grub 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic
Se encontraron errores al procesar:
 /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb
E: El subproceso /usr/bin/dpkg devolvió un código de error (1)

Nota: He migrado esta pregunta desde"Intercambio de pilas de Unix y Linux"

Respuesta1

Úselo uname -rpara mostrar su kernel actualmente en ejecución. NO BORRAR nada con este número de versión.

Puede encontrar a qué paquetes /bootpertenecen los núcleos:

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

Puede eliminar estos paquetes consudo apt-get purge Nombre del paquete ....

Puede encontrar más paquetes relacionados con los kernels que desea eliminar buscando otros paquetes con el mismo número de versión:

Para extraer los números de versión:

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

Para buscar otros paquetes con los mismos números de versión:

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  

Para automatizar la eliminación de todos los kernels distintos del kernel actual y todos los paquetes cuyas versiones coincidan con los kernels eliminados (Peligro, Wil Robinson):

Simplemente agregue

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

al fragmento de código anterior. Cuando esté seguro de que hace lo que desea, elimine --dry-run.

Si /bootestá tan lleno que no puede eliminar paquetes, puede hacer algo de espacio /booteliminando el /boot/initrd.img*archivo más antiguo.

información relacionada