¿Cómo elimino las versiones antiguas del kernel para limpiar el menú de arranque?

Cada vez que instalo un nuevo kernel de Linux, se queda en grub_config, lo que hace que el menú de arranque sea más largo cada vez.

Sé que puedo buscar manualmente los paquetes instalados y eliminarlos.

Ubuntu proporciona alguna forma más fácil de limpiarlos o evitar que se muestren en la lista de arranque?

16.04 y versiones más recientes de Ubuntu

sudo apt autoremove

Este comando elimina los paquetes que se instalaron automáticamente para resolver una dependencia, pero de los que ya no se depende. Esto incluye versiones antiguas de linux-headers-* y linux-image-*. (También es inteligente acerca de este proceso, dejando una versión de repuesto del kernel como alternativa.)

11.10 y versiones más recientes de Ubuntu

GRUB2 y su visualización de todos los núcleos

Las últimas versiones de Grub2 instalado en Ubuntu muestra automáticamente el kernel más reciente y oculta los kernels más antiguos que pueda haber instalado.

GNU GRUB

Si no ve su grub - entonces recuerda presionar Shift durante el arranque.

Como puede ver, solo se muestra el kernel más reciente.

Si selecciona la opción que se muestra (pulse Enter), todos los núcleos antiguos se vuelven visibles y están disponibles para arrancar.

GNU GRUB Previous versions

Cómo eliminar permanentemente los núcleos más antiguos

Primer arranque con el último kernel disponible.

Hay varias formas de eliminar los núcleos antiguos. Personalmente, no lo tocaría Conserje de Computadoras dado que esto se reconoce para romper su computadora con sus sugerencias.

sináptico

Una alternativa es Sináptico (sudo apt install synaptic)

buscar por linux-imagen, haga clic con el botón derecho en un kernel y elija eliminación completa y, finalmente, haga clic en Aplicar botón para borrar el kernel.

Repita la búsqueda, pero esta vez para linux-cabecera - puede eliminar los encabezados asociados para la imagen del kernel elegida anteriormente.

Sináptico no intentaremos verificar lo que está intentando eliminar... podría eliminar inadvertidamente su kernel más nuevo , o incluso eliminar todos sus kernels a través de esta herramienta, dejándolo con un kernel que no puede arrancar Ubuntu!.

Recuerde comprobar el tipo de kernel que está utilizando:

uname -r

El resultado sería similar a:

Terminal <uname -r>

Recuerde el resultado y el número, asegúrese de no eliminar la imagen o el encabezado correspondientes.

Recomendación

Mi recomendación es mantener al menos dos o preferiblemente tres núcleos, incluido el último. La razón de la recomendación es que tendrá al menos uno o dos núcleos más para arrancar, si por alguna razón el último núcleo con el que no puede arrancar o si introduce una capacidad con regresión, como una conexión inalámbrica rota.

En primer lugar, reinicie el sistema para asegurarse de que está utilizando el kernel más reciente. Luego abra terminal y verifique su kernel actual:

uname -r 

NO ELIMINE ESTE KERNEL!

A continuación, escriba el comando a continuación para ver/enumerar todos los núcleos instalados en su sistema.

dpkg --list 'linux-image-*'

Encuentre todos los núcleos que sean inferiores a su núcleo actual. Cuando sepa qué kernel eliminar, continúe a continuación para eliminarlo. Ejecute los siguientes comandos para eliminar el kernel que seleccionó.

sudo apt-get purge linux-image-x.x.x-x-generic 

Finalmente, ejecute los comandos a continuación para actualizar grub2

sudo update-grub2 

Reinicia el sistema.

Mi una sola línea para eliminar los núcleos antiguos (esto también libera espacio en disco)

dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p' | xargs sudo apt-get -y purge

Explicación (recuerde, | utiliza la salida del comando anterior como entrada al siguiente)

  • dpkg --list lista todos los paquetes instalados
  • grep linux-image busca las imágenes de Linux instaladas
  • awk '{ print $2 }' solo genera la 2da columna (que es el nombre del paquete)
  • sort -V ordena los elementos por número de versión
  • sed -n '/'`uname -r`'/q;p' imprime las líneas antes del núcleo actual
  • xargs sudo apt-get -y purge purga los kernels

Desenrollar el sed invocación:

  • -n decir sed para estar callado
  • `uname -r` genera la versión actual del kernel instalada : la incluimos en comillas invertidas para que la salida se incluya como parte del comando (también puede ver esto como $(uname -r)
  • /something/q dice stop cuando coincide con 'something' (en este caso, algo es la salida de uname -r) - el / rodear una expresión regular
  • p es impresión
  • el ; es el comando separtor, por lo que /something/q;p dice dejar de fumar cuando coincide con algo, de lo contrario imprimir

en conjunto, sed -n '/'`uname -r`'/q;p' imprime las líneas hasta que coincida con el nombre del núcleo actual.

Si eres paranoico (como yo), puedes hacer la última parte xargs echo sudo apt-get -y purge para que se imprima el comando para purgar los núcleos antiguos, puede verificar que no se incluya nada inesperado antes de ejecutarlo.


Versión modificada para eliminar encabezados:

dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purgedpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge

Nota: el sed se modifica la invocación. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")" extrae solo la versión (por ejemplo, "3.2.0-44"), sin "- generic " o similar de uname -r


Versión todo en uno para eliminar imágenes y encabezados (combina las dos versiones anteriores):

echo $(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p') $(dpkg --list | grep linux-headers | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p') | xargs sudo apt-get -y purge

Ubuntu 16.04+:

$ sudo apt autoremove...The following packages will be REMOVED:  linux-headers-4.4.0-57 linux-headers-4.4.0-57-generic linux-image-4.4.0-57-generic linux-image-extra-4.4.0-57-generic linux-tools-4.4.0-57 linux-tools-4.4.0-57-generic

Ubuntu 15.10 y versiones posteriores:

Encuentro que esta es la forma más fácil y rápida. Mantiene el kernel más reciente, así como dos más:

sudo apt-get install bikeshedsudo purge-old-kernels

Para cambiar el número de núcleos adicionales que se conservan:

sudo purge-old-kernels --keep 3

Eliminar entradas de Grub 2Las entradas deben eliminarse editando o eliminando archivos en /etc / grub.carpeta d. El directorio /boot / grub / grub.el archivo cfg es de solo lectura y normalmente no debería requerir edición.

¿Demasiados Granos?

  • Si no está seguro del núcleo que está utilizando actualmente, en un tipo de terminal uname-r.

  • Kernels eliminados a través de APT (Synaptic, & quot; apt-get remove", etc.) actualizará automáticamente grub.cfg y no se requiere ninguna acción del usuario.

  • Una gran herramienta para eliminar núcleos (y entradas de menú) es Ubuntu-Tweak, una aplicación GUI segura y fácil de usar.

  • Instalar ubuntu Tweak

  • Ubuntu-Tweak estará disponible en Aplicaciones y Herramientas del sistema.

Eliminar Entradas De Kernel Más Antiguas

  • Seleccione" Limpiador de paquetes "a la izquierda y" Limpiar Kernel & quot; en el panel derecho.

  • Presione el botón & quot; Desbloquear" en la parte inferior derecha, ingrese su contraseña.

  • Seleccione de la lista que se muestra las imágenes y encabezados del kernel que desea eliminar. El núcleo en uso no aparece en la lista.

  • Presione el botón & quot; Limpiar & quot; en la parte inferior derecha para eliminar las imágenes y encabezados del kernel seleccionados.

Eliminar sistemas operativos del menú de Grub

  • Otros sistemas operativos que se hayan eliminado de la computadora también se eliminarán del menú una vez que" update-grub & quot; se ejecute como root.

  • Los elementos de menú se colocan en el menú de Grub2 mediante scripts. Si no desea que se introduzcan otros sistemas operativos en el menú, desactive /etc/grub.d / 30_esprobo

  • Ejecute este comando para detener la ejecución del script
    sudo chmod -x /etc/grub.d/30_os-prober

  • DISABLE_30_OS-PROBER= 'true' en /etc / default / grub

Eliminar Memtest86+ del menú de Grub
sudo chmod -x /etc/grub.d/20_memtest86+

  • Ejecute el comando update-grub para permitir que los cambios se incorporen en grub.cfg

Fuente

Nota:Después de las actualizaciones del kernel, se agrega una nueva entrada al menú de GRUB.Puede quitar el más antiguo si lo desea.Sin embargo, la mayoría de los usuarios experimentados le aconsejarán que conserve al menos una entrada de repuesto en caso de que algo salga mal con una actualización y necesite arrancar una versión anterior del kernel para solucionar problemas.

Forma alternativa de eliminar entradas del kernel (anteriores a 10.04)

para GRUB, no para GRUB2

startupmanager

Puede encontrarlo en Sistema> & gt; Administración>>



¿Ves en la segunda captura de pantalla que puedes seleccionar cuántos núcleos mostrar? Por lo general, lo mantengo en 1, pero cuando recibo una actualización del kernel, siempre lo cambio a 2 antes de reiniciar para poder seleccionar el kernel anterior si el nuevo kernel tiene problemas con mi hardware. Una vez que sé que el nuevo núcleo está funcionando bien, lo cambio de nuevo a 1.

Puramente en la línea de comandos, esto eliminará todos menos el actual y el segundo más actual (a través del" -2 " en el comando head a continuación):

OLD=$(ls -tr /boot/vmlinuz-* | head -n -2 | cut -d- -f2- |    awk '{print "linux-image-" $0 " linux-headers-" $0}' )if [ -n "$OLD" ]; then    apt-get -qy remove --purge $OLDfiapt-get -qy autoremove --purge

Actualizar: purge-old-kernels ser en desuso hoy.

Hice un script para purgar núcleos incluso en condiciones difíciles. Se llama linux-purge y lo puedes encontrar aqui.

Si solo desea purgar los núcleos (y los paquetes relacionados) que son más antiguos que el núcleo utilizado actualmente, cuando el sistema no está roto, puede usar este script.

También hay una página de documentación de Ubuntu a la que he contribuido con respecto a la eliminación de núcleos antiguos aqui.

Puedes seguir el Uso de la sección del paquete "actualizaciones desatendidas" de Actualizaciones de Seguridad Automáticas artículo en Ubuntu Wiki para realizar esto.

Debe cambiar la siguiente línea en /etc / apt/apt.conf.d / 50 sin vigilancia-actualizaciones file;

//Unattended-Upgrade::Remove-Unused-Dependencies "false";

con

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

para eliminar automáticamente los paquetes antiguos, incluidos los núcleos.

También elimine o comente la línea

"^linux-image.*"; 

en la sección "NeverAutoRemove" del archivo /etc / apt/apt.conf.d / 01eliminar.

La forma más rápida/sencilla (aplicable al menos desde 12.04) posible que ya viene con Ubuntu es apt-get. Haga lo siguiente si desea eliminar todas las versiones anteriores del kernel que no están en uso (excepto la anterior que ya no está utilizando). Esto es para asegurarse de que si la versión actual del kernel falla de alguna manera, tiene una forma de volver a un estado anterior). Haga lo siguiente:

sudo apt-get autoclean

Esto eliminará cualquier archivo antiguo (incluidas las versiones del kernel) que pueda tener. Tenga en cuenta que si tiene muchas versiones antiguas, llevará un tiempo, ya que debe asegurarse de que la eliminación de la versión del kernel no tenga problemas. Para mí, la eliminación de las últimas 12 versiones del kernel tomó aproximadamente 2 minutos. También puede hacer lo siguiente:

sudo apt-get clean

Lo que eliminará todo lo descargado y almacenado en la carpeta de caché de apt. Por último, tienes:

sudo apt-get autoremove

lo que verificaría si hay paquetes no utilizados y los eliminaría si es necesario. Esto es ideal para aquellas bibliotecas y paquetes de dependencias que ya no son necesarios con ninguna aplicación instalada.

Para averiguar qué núcleos y encabezados están instalados, use

dpkg -l | grep linux-imagedpkg -l | grep linux-headers

A continuación, puede eliminarlos uno por uno o juntos, solo asegúrese de conservar el más reciente.

También hay algunos comandos y scripts útiles para automatizar la eliminación.

http://ubuntuforums.org/showthread.php?t=1658648

Las siguientes reivindicaciones para eliminar todos los núcleos y encabezados no utilizados:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | grep -v hwe | xargs sudo apt-get purge

(utilizar apt-get -y para eliminar sin cuestionar)

Esto es lo que sucede cuando se ejecuta en 18.04.1:

~$ dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | xargs sudo apt-get -y purgeReading package lists... DoneBuilding dependency tree       Reading state information... DoneThe following packages will be REMOVED:  linux-headers-4.15.0-33* linux-headers-4.15.0-33-generic* linux-headers-4.15.0-34* linux-headers-4.15.0-34-generic* linux-image-4.15.0-33-generic* linux-image-4.15.0-34-generic*  linux-modules-4.15.0-33-generic* linux-modules-4.15.0-34-generic* linux-modules-extra-4.15.0-33-generic* linux-modules-extra-4.15.0-34-generic*0 upgraded, 0 newly installed, 10 to remove and 1 not upgraded.After this operation, 671 MB disk space will be freed.(Reading database ... 227403 files and directories currently installed.)Removing linux-headers-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-headers-4.15.0-33 (4.15.0-33.36) ...Removing linux-headers-4.15.0-34-generic (4.15.0-34.37) ...Removing linux-headers-4.15.0-34 (4.15.0-34.37) ...Removing linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-image-4.15.0-33-generic (4.15.0-33.36) .../etc/kernel/postrm.d/initramfs-tools:update-initramfs: Deleting /boot/initrd.img-4.15.0-33-generic/etc/kernel/postrm.d/zz-update-grub:Generating grub configuration file ...Found linux image: /boot/vmlinuz-4.15.0-36-genericFound initrd image: /boot/initrd.img-4.15.0-36-genericFound linux image: /boot/vmlinuz-4.15.0-34-genericFound initrd image: /boot/initrd.img-4.15.0-34-genericAdding boot menu entry for EFI firmware configurationdoneRemoving linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...Removing linux-image-4.15.0-34-generic (4.15.0-34.37) ...I: /vmlinuz.old is now a symlink to boot/vmlinuz-4.15.0-36-genericI: /initrd.img.old is now a symlink to boot/initrd.img-4.15.0-36-generic/etc/kernel/postrm.d/initramfs-tools:update-initramfs: Deleting /boot/initrd.img-4.15.0-34-generic/etc/kernel/postrm.d/zz-update-grub:Generating grub configuration file ...Found linux image: /boot/vmlinuz-4.15.0-36-genericFound initrd image: /boot/initrd.img-4.15.0-36-genericAdding boot menu entry for EFI firmware configurationdoneRemoving linux-modules-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-modules-4.15.0-34-generic (4.15.0-34.37) ...(Reading database ... 156180 files and directories currently installed.)Purging configuration files for linux-image-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-modules-4.15.0-33-generic (4.15.0-33.36) ...dpkg: warning: while removing linux-modules-4.15.0-33-generic, directory '/lib/modules/4.15.0-33-generic' not empty so not removedPurging configuration files for linux-modules-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-image-4.15.0-33-generic (4.15.0-33.36) ...Purging configuration files for linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...~$ uname -r4.15.0-36-generic

`sudo apt-get autoremove ’ debería hacer el truco en Ubuntu 14.04+

Hay un comando de ubuntu llamado purge-old-kernels para hacer el trabajo. Vea mi respuesta para más información.

Sigo volviendo a esta página… el comentario de @hobs solo funciona si sus kernels se instalaron automáticamente , sin embargo, haga `sudo apt-get autoremove --purge 'la respuesta siguiendo el consejo de ‘apt-mark’ en https://help.ubuntu.com/community/RemoveOldKernels

La acumulación de núcleos antiguos es un error, con corrección en progreso: https://bugs.launchpad.net/bugs/1357093 . Cuando se lance la corrección, los núcleos más antiguos se eliminarán automáticamente de forma predeterminada.

@hobs El comando no me hace el truco en Ubuntu Studio 14.04, si los kernels no se han instalado automáticamente, sino por el actualizador de software.

Además de eliminar los núcleos antiguos, descomente esta línea en '/ etc / default / grub ‘si desea deshacerse de los elementos de’ recuperación 'en el menú: #GRUB_DISABLE_LINUX_RECOVERY= “true”

En versiones recientes, Ubuntu oculta los núcleos en el submenú de Grub, por lo que no es tan molesto. Sin embargo, puede ser una buena idea eliminar los núcleos adicionales para ahorrar espacio, especialmente si tiene una pequeña partición /boot separada.

No puedo encontrar ninguna respuesta que ayude a eliminar los núcleos de la versión anterior después de actualizar Ubuntu a una versión más nueva, incluso si una pregunta específica al respecto se ha marcado como un duplicado de esta aquí. Ver también relacionado [informe de error](https://bugs.launchpad.net/ubuntu/ + fuente / bikeshed / + bug / 1586303)

He hecho un guión que hace el trabajo. Lo publicaré una vez que alcance mi objetivo de recompensa: Bountysource