1/09/2011


Explicamos en este artículo cómo eliminar las versiones del kernel de GNU Linux Debian antiguas 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.



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:
AjpdSoft 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:
AjpdSoft 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

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
AjpdSoft 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í.

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:
AjpdSoft Eliminar versiones de kernel antiguas en equipo con GNU 
Linux Debian
En nuestro caso sól oaparece "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, puede que varíen las versiones de los kernel (núcles) y del GRUB, pero el proceso es similar.
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 podremos seguir las recomendaciones del siguiente post de nuestro foro Linux:

Anexo

  • Resultado de la ejecución del comando sudo apt-get purge linux-image-2.6.26-2-686:
ajpdsoft@pcdebian:~$ sudo apt-get purge linux-image-2.6.26-2-686
[sudo] password for ajpdsoft:
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
libraw1394-8 libavahi-compat-libdnssd1 djvulibre-desktop libicu38 libgda3-common libgksuui1.0-1 libosp5 libgail-common
libmagick++10 libexchange-storage1.2-3 libgtksourceview1.0-0 w3c-dtd-xhtml libnm-util0 libjaxp1.3-java-gcj libmagick10
libapm1 libpisock9 libcamel1.2-11 openssl-blacklist libpt-1.10.10-plugins-alsa libtrackerclient0
openoffice.org-writer2latex libggzmod4 libtotem-plparser10 swfdec-gnome libservlet2.4-java libedata-cal1.2-6 libsmbios2
libpt-1.10.10 libsoup2.2-8 libsuitesparse-3.1.0 libgpod3 libisccc50 libxerces2-java-gcj libcdio7 libxxf86misc1
libmysqlclient15off libeel2-data libdirectfb-1.0-0 python-gtkmozembed libsexy2 p7zip gnome-utils libhesiod0
libgnome-pilot2 finger libatspi1.0-0 libparted1.8-10 arj dhcdbd liblwres50 libgnomeprint2.2-data libkpathsea4 gs-common
libcurl3 hal python-eggtrayicon gnome-spell libnm-glib0 libggz2 libssh2-1 at-spi libpoppler3 wodim
libgtksourceview-common libbind9-50 libxerces2-java libbluetooth2 libxtrap6 gnome-app-install python-cupsutils
libeel2-2.20 libgtkhtml2-0 libopal-2.2 totem-gstreamer libxalan2-java libdvdread3 libgnomevfs2-bin libiw29
libedataserver1.2-9 libmozjs1d libmpfr1ldbl libisccfg50 zip python-4suite-xml libxklavier12 libgucharmap6 libgda3-3
libpq5 svgalibg1 libpt-1.10.10-plugins-v4l libggzcore9 libgmyth0 libzephyr3 cpp-4.3 libvoikko1 hal-info libcupsys2
libnautilus-burn4 libgnomeprint2.2-0 libgraphviz4 epiphany-gecko libgnome-desktop-2 libavahi-core5 libgnomeprintui2.2-0
libcucul0 libgnomeprintui2.2-common libxalan2-java-gcj libltdl3 libpoppler-glib3 libgnomecups1.0-1 libpisync1
libgdl-1-common libfaad0 gnome-vfs-obexftp
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
Unless you used the optional flag in lilo,
you may need to re-run your boot loader[lilo]
The link /initrd.img.old is a damaged link
Removing symbolic link initrd.img.old
Unless you used the optional flag in lilo,
you may need to re-run your boot loader[lilo]
Purgando ficheros de configuración de 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
  • Resultado de la ejecución del comando: sudo grub-mkconfig
ajpdsoft@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=640x480
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 ###
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2dcb9cb2-af47-46eb-9ce0-095b12b0abc0
Found background image: /usr/share/images/desktop-base/desktop-grub.png
insmod png
if background_image /usr/share/images/desktop-base/spacefun-grub.png; then
set color_normal=light-gray/black
set color_highlight=white/black
else
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
fi
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
Found linux image: /boot/vmlinuz-2.6.32-5-686
Found initrd image: /boot/initrd.img-2.6.32-5-686
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2dcb9cb2-af47-46eb-9ce0-095b12b0abc0
echo 'Loading Linux 2.6.32-5-686 ...'
linux /boot/vmlinuz-2.6.32-5-686 root=UUID=2dcb9cb2-af47-46eb-9ce0-095b12b0abc0 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32-5-686
}
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2dcb9cb2-af47-46eb-9ce0-095b12b0abc0
echo 'Loading Linux 2.6.32-5-686 ...'
linux /boot/vmlinuz-2.6.32-5-686 root=UUID=2dcb9cb2-af47-46eb-9ce0-095b12b0abc0 ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32-5-686
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /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

 

Artículos relacionados

Créditos

Artículo realizado por Alonsojpd miembro fundador del proyecto AjpdSoft, con la ayuda y consejos de Antonio RS de RN.

No hay comentarios: