Cómo eliminar las versiones del kernel (núcleo) antiguas (obsoletas) en GNU Linux Debian y Linux Ubuntu, para liberar espacio en disco. Cuando realizamos una actualización en Linux, éste guarda el kernel anterior por si hay problemas con el nuevo, permitiendo arrancar con el kernel antiguo. Pero cuando tenemos probado el nuevo, el antiguo ocupa espacio y no es necesario. Lo explicamos para Debian, pero es válido para otras distribuciones de GNU Linux como Ubuntu.

El kernel de GNU Linux

El núcleo Linux es un núcleo (también denominado Kernel) de sistema operativo libre tipo Unix. Es uno de los principales ejemplos de software libre y código abierto. Linux está licenciado bajo la GPL v2 y está desarrollado por colaboradores de todo el mundo. El desarrollo del día a día tiene lugar en la Linux Kernel Mailing List.

El núcleo Linux fue concebido por el entonces estudiante de ciencias de la computación finlandés, Linus Torvalds, en 1991. Linux consiguió rápidamente desarrolladores y usuarios que adoptaron códigos de otros proyectos de software libre para su uso en el nuevo sistema operativo. El núcleo Linux ha recibido contribuciones de miles de programadores. Normalmente Linux se utiliza junto a un empaquetado de software, llamado distribución Linux.

Actualmente Linux es un núcleo monolítico híbrido. Los controladores de dispositivos y las extensiones del núcleo normalmente se ejecutan en un espacio privilegiado conocido como anillo 0 (ring 0), con acceso irrestricto al hardware, aunque algunos se ejecutan en espacio de usuario. A diferencia de los núcleos monolíticos tradicionales, los controladores de dispositivos y las extensiones al núcleo se pueden cargar y descargar fácilmente como módulos, mientras el sistema continúa funcionando sin interrupciones. También, a diferencia de los núcleos monolíticos tradicionales, los controladores pueden ser prevolcados (detenidos momentáneamente por actividades más importantes) bajo ciertas condiciones. Esta habilidad fue agregada para gestionar correctamente interrupciones de hardware, y para mejorar el soporte de multiprocesamiento simétrico.

El kernel de Linux es la capa más interna del sistema operativo. Una fina capa de software que está entre las aplicaciones y el hardware, esa cosa que llamamos más acertadamente «Linux». Cuando arranque el equipo, la BIOS inicia el programa cargador, el programa crgador toma el control del kernel, y el kernel hace el resto. Inicia los sistemas del núcleo: comprueba, identifica y habilita el hardware, e inicia los scripts de arranque. Tras arrancar, el kernel administra todos los recursos y tareas, proporciona los módulos y las aplicaciones mediante una interfaz uniforme para servicios como el encendido, la señalización, los dispositivos de entrada/salida, la administración de la memoria, etc.

Consultar versión actual del kernel en GNU Linux Debian

Para consultar la versión actual del kernel de GNU Linux abriremos una ventana de terminal y ejecutaremos el comando linux:

uname -a

Devolverá algo así:

Linux pcdebian 2.6.32-5-686 #1 SMP Fri Dec 10 16:12:40 UTC 2010 i686 GNU/Linux

En este caso, la versión actual del kernel es la 2.6.32-5-686.

El siguiente comando linux devolverá únicamente la versión del kernel (núcleo) de Linux:

uname -r

También es posible ver la versión actual del kernel si tenemos la opción activa del GRUB correspondiente, al arrancar el equipo nos mostrará la versión actual del sistema y nos permitirá, además, seleccionar la opción de arrancar en una versión anterior del kernel:

Consultar versión actual del kernel, cómo se actualiza en GNU Linux Debian

Otra forma de mostrar la versión del núcleo de Linux es abriendo el Monitor del sistema, desde una ventana de terminal, ejecutando el comando:

sudo gnome-system-monitor

O desde el modo gráfico, desde «Aplicaciones» – «Herramientas del sistema» – «Monitor del sistema», en la pestaña «Sistem», mostrará la versión del núcleo de Linux, la versión de GNOME y otros datos:

Consultar versión actual del kernel, cómo se actualiza en GNU Linux Debian

Para mostrar todos los kernel (núcleos) disponibles en nuestro sistema (el actual y los anteriores) ejecutaremos el siguiente comando linux:

sudo dpkg -l | grep linux-image

Devolverá algo así:

ii linux-image-2.6-686 2.6.32+28 Linux 2.6 for modern PCs (meta-package)
ii linux-image-2.6.26-2-686 2.6.26-26lenny1 Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4
ii linux-image-2.6.32-5-686 2.6.32-29 Linux 2.6.32 for modern PCs

Eliminar versiones de kernel antiguas en equipo con GNU Linux Debian (válido para Ubuntu)

Recomendaciones antes de realizar el proceso de eliminación de las versiones del kernel antiguas

Antes de proceder con la eliminación de núcleos antiguos de Linux Debian, conviene hacer copia de seguridad e los datos y, también, es recomendable dejar la penúltima versión del kernel, por si hay algún problema con el actual. De esta forma podremos arrancar el sistema operativo GNU Linux Debian (o la distribución que usemos) con la versión anterior del kernel (núcleo).

Desinstalar versiones antiguas del kernel núcleo de GNU Linux Debian

A continuación desinstalaremos todos las versiones de los kernel de Linux salvo el que estamos usando, en nuestro caso el 2.6.32-5-686. Para ello ejecutaremos el siguiente comando comando linux:

sudo apt-get purge linux-image-2.6.26-2-686

Desinstalar versiones antiguas del kernel núcleo de GNU Linux Debian

Nota: cambiaremos la versión «2.6.26-2-686» por la correspondiente al kernel que queramos eliminar.

El comando anterior devolverá algo así.

Repetiremos el proceso con el resto de kernel (núcleos) antiguos a eliminar, en nuestro caso sólo tenemos uno.

Desinstalar las cabeceras (headers) de los kernel antiguos eliminados

Además de los kernel antiguos, podremos eliminar también las cabeceras «headers». En primer lugar comprobaremos las que hay actualmente, para ello ejecutaremos el comando linux:

sudo dpkg -l | grep linux-headers

Si el comando anterior devuelve alguna cabecera, podremos eliminar las que consideremos obsoletas (correspondientes a las versiones del kernel eliminadas anteriormente) con el comando linux:

sudo apt-get purge linux-headers-XXX

(donde XXX será la versión de la cabecera a eliminar)

Eliminar las entradas del GRUB correspondientes a los kernel desinstalados

También es muy conveniente eliminar las entradas del GRUB que hagan referencia a todos los kernel (núcleos) eliminados en pasos anteriores. Si no se eliminan del GRUB seguirán apareciendo en el arranque de GNU Linux Debian pero en realidad no estarán disponibles.

Para eliminar las entradas ejecutaremos el comando linux:

sudo grub-mkconfig

El comando anterior devolverá algo así.

Eliminar paquetes no necesarios del repositorio local (caché)

Si además de liberar espacio desinstalando y limpiando versiones anteriores del núcleo (kernel) de nuestro sistema operativo Linux queremos también liberar espacio de paquetes descargados con apt-get install que en teoría no son necesarios, podremos seguir los siguientes pasos:

1. En primer lugar ejecutaremos un «autoclean» que borra el repositorio local de paquetes descargados. Sólo borrará aquellos paquetes que ya no se pueden descargar, o que son claramente inservibles. Hay que tener en cuenta que «autoclean» no desinstala aplicaciones instaladas, sólo elimina paquetes de instalación descargados de la caché. Para ello ejecutaremos el siguiente comando linux:

sudo apt-get autoclean

El comando anterior devolverá algo así.

2. Ejecutaremos también el siguiente comando, un poco más «delicado» pues sí desinstala paquetes que considera innecsarios, suelen ser librerías y demás paquetes huérfanos, que ya no sirven. «autoremove» se usa para desinstalar paquetes que se instalaron automáticamente para satisfacer las dependencias de algún paquete, pero que ya no son necesarios:

sudo apt-get autoremove

El comando anterior devolverá algo así.

3. Si queremos eliminar todos los paquetes de la caché del repositorio, en vez de sólo los claramente inservibles, utilizaremos «clean» en lugar de «autoclean». La diferencia entre autoclean y clean es que autoclean sólo borrará aquellos paquetes que ya no se pueden descargar, o que son claramente inservibles. En cambio «clean» eliminará todos los paquetes de instalación la caché. Y, repetimos, ni «clean» ni «autoclean» desinstalan aplicaciones o paquetes:

sudo apt-get clean

«clean» borra totalmente el repositorio local que contiene los ficheros de los paquetes descargados. Borra todo excepto el fichero de bloqueo de los directorios /var/cache/apt/archives y /var/cache/apt/archives/partial.

Consideraciones y pruebas finales

Tras realizar todos los pasos habremos liberado algo de espacio en el disco duro, en función del número de versiones del kernel desinstaladas. Para comprobar que ya no están instaladas podremos volver a ejecutar el comando:

sudo dpkg -l | grep linux-image

Y, además, en el arranque de Linux, tampoco deberían aparecer:

Eliminar versiones de kernel antiguas en equipo con GNU Linux Debian

En nuestro caso sólo aparece «Debian GNU/Linux, with Linux 2.6.32-5-686», tanto en el arranque normal con en el modo de recuperación: «Debian GNU/Linux, with Linux 2.6.32-5-686 (recovery mode)».

Lo explicado en este manual es válido para otras distribuciones de GNU Linux como Ubuntu, puede que varíen las versiones de los kernel (núcles) y del GRUB, pero el proceso es similar.

Anexo

  • Resultado de la ejecución del comando sudo apt-get purge linux-image-2.6.26-2-686:

proyectoa@pcdebian:~$ sudo apt-get purge linux-image-2.6.26-2-686
[sudo] password for proyectoa :
Leyendo lista de paquetes… Hecho
Creando árbol de dependencias
Leyendo la información de estado… Hecho
The following packages were automatically installed and are no longer required:
libswfdec-0.6-90 libepc-ui-1.0-1 libtalloc1 libmtp7 libneon27 libepc-1.0-1 libmalaga7 libgksu1.2-0 libsensors3
Utilice «apt-get autoremove» para eliminarlos.
Los siguientes paquetes se ELIMINARÁN:
linux-image-2.6.26-2-686*
0 actualizados, 0 se instalarán, 1 para eliminar y 0 no actualizados.
Se liberarán 59,2 MB después de esta operación.
¿Desea continuar [S/n]? s
(Leyendo la base de datos … 126887 ficheros o directorios instalados actualmente.)
Desinstalando linux-image-2.6.26-2-686 …
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 2.6.26-2-686 /boot/vmlinuz-2.6.26-2-686
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 2.6.26-2-686 /boot/vmlinuz-2.6.26-2-686
Generating grub.cfg …
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-2.6.32-5-686
Found initrd image: /boot/initrd.img-2.6.32-5-686
done
The link /vmlinuz.old is a damaged link
Removing symbolic link vmlinuz.old
Found linux image: /boot/vmlinuz-2.6.32-5-686
Found initrd image: /boot/initrd.img-2.6.32-5-686
done

  • Resultado de la ejecución del comando: sudo grub-mkconfig

proyectoa@pcdebian:~$ sudo grub-mkconfig
Generating grub.cfg …
# DO NOT EDIT THIS FILE
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
load_env
fi
set default=»0″
if [ «${prev_saved_entry}» ]; then
set saved_entry=»${prev_saved_entry}»
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z «${boot_once}» ]; then
saved_entry=»${chosen}»
save_env saved_entry
fi
}
function load_video {
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
}
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)’
search –no-floppy –fs-uuid –set 2dcb9cb2-af47-46eb-9ce0-095b12b0abc0
if loadfont /usr/share/grub/unicode.pf2 ; then
set gfxmode=640×480
load_video
insmod gfxterm
fi
terminal_output gfxterm
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)’
search –no-floppy –fs-uuid –set 2dcb9cb2-af47-46eb-9ce0-095b12b0abc0
set locale_dir=($root)/boot/grub/locale
set lang=es
insmod gettext
set timeout=5
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/05_debian_theme ###
/etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
done

  • Resultado: sudo apt-get autoclean

proyectoa@pcdebian:~$ sudo apt-get autoclean
[sudo] password for proyectoa:
Leyendo lista de paquetes… Hecho
Creando árbol de dependencias
Leyendo la información de estado… Hecho

  • Resultado: sudo apt-get autoremove

proyectoa@pcdebian:~$ sudo apt-get autoremove Leyendo lista de paquetes… Hecho Creando árbol de dependencias Leyendo la información de estado… Hecho Los siguientes paquetes se ELIMINARÁN:
  arj at-spi cpp-4.3 dhcdbd djvulibre-desktop epiphany-gecko finger
  gnome-app-install gnome-spell gnome-utils gnome-vfs-obexftp gs-common hal
  hal-info libapm1 libatspi1.0-0 libavahi-compat-libdnssd1 libavahi-core5
  libbind9-50 libbluetooth2 libcamel1.2-11 libcdio7 libcucul0 libcupsys2
  libcurl3 libdirectfb-1.0-0 libdvdread3 libedata-cal1.2-6 libedataserver1.2-9
  libeel2-2.20 libeel2-data libepc-1.0-1 libepc-ui-1.0-1
ERROR: There is no such extension deployed: org.openoffice.da.writer2latex.oxt
unopkg failed.
ERROR: There is no such extension deployed: org.openoffice.da.writer2latex.oxt
Exception details:
(com.sun.star.lang.IllegalArgumentException) { { Message = «There is no such extension deployed: org.openoffice.da.writer2latex.oxt»,
Context = (com.sun.star.uno.XInterface) @8655840 }, ArgumentPosition =
(short) -1 }
unopkg failed.
Desinstalando openssl-blacklist …
Desinstalando p7zip …
Desinstalando python-4suite-xml …
Desinstalando python-cupsutils …
Desinstalando python-eggtrayicon …
Desinstalando python-gtkmozembed …
Desinstalando svgalibg1 …
Desinstalando totem-gstreamer …
Desinstalando w3c-dtd-xhtml …
Desinstalando wodim …
Desinstalando zip …