Initrd (reloaded)

Los ficheros initrd(initial ramdisk) contienen un pequeño sistema con los ficheros básicos que permitan iniciar un kernel de Linux en memoria RAM al arrancar nuestro sistema. A partir de él, ya se puede montar el directorio raíz e ir cargando el resto de módulos del núcleo que configuran nuestro hardware.

Aunque ya hemos hablado aquí sobre cómo examinar el contenido de uno de estos ficheros, quería mejorar la entrada, porque no suelo usar aquel procedimiento, sino este otro que quiero contar hoy que me resulta menos litúrgico, y que he tenido que usar demasiado a menudo en los últimos meses, porque ando editando el arranque de distribuciones LiveCD como Clonezilla, Trinity Rescue, y otras tantas que finalmente no cuajan porque no me sirven.
Como ya comentamos en aquella entrada encontramos dos tipos de ficheros initrd:

  • Initrd, en kernel anteriores a 2.6.13, almacena la imagen de un sistema de ficheros (que podía venir comprimido), habitualmente ext2 (el driver ext2 debía estar incluído en el kernel y no como módulo), aunque otros como Debian usaban cramfs.Este sistema de archivos se ponía disponible al montarlo sobre un dispositivo /dev/ram, como sistema raíz inicial, para justo después ejecutar /linuxrc . Cuando este programa finalizaba, se ejecutaba /sbin/init que ya se encargaría de iniciar el espacio de usuario.Para examinar su contenido, podemos ejecuar...
    cp initrd.original  initrd.paramodificar.gz

    mkdir contenido-initrd
    gunzip initrd.paramodificar.gz
    mount -o loop initrd.paramodificar contenido-initrd
  • Initramfs, aparece a partir del kernel 2.6.13 y mejora sustancialmente a su predecesor, ya que no se tiene que montar sobre un disco virtual, y tampoco es necesario parchear el kernel para incluir el soporte básico que permite descomprimir y montar el propio initrd. En definitiva, se consigue mayor flexibilidad y facilidad para la administración.Para examinar su contenido, podemos ejecuar...
    mkdir contenido-initrd

    cd contenido-initrd
    gzip -S img -dc ../initrd | cpio -id

En cualquier caso, si ejecutamos estos comandos tendremos su contenido en el subdirectorio contenido-initrd, y podremos modificar los archivos que necesitemos con nuestro editor faVorIto. Luego podremos volver a su forma natural ejecutando...
 cd contenido-initrd
find ./ | cpio -H newc -o | gzip -c > ../initrd

si se trata de un fichero initramfs, y si fuera un initrd, tendremos que desmontar y volver a comprimir...
cd
umount contenido-initrd
cat initrd.paramodificar | gzip -c > initrd

No hay comentarios: