Scroll to navigation

INITRD(4) Manual del Programador de Linux INITRD(4)

NOMBRE

initrd - disco-RAM inicializado por el gestor de arranque

CONFIGURACIÓN

/dev/initrd is a read-only block device assigned major number 1 and minor number 250. Typically /dev/initrd is owned by root:disk with mode 0400 (read access by root only). If the Linux system does not have /dev/initrd already created, it can be created with the following commands:


mknod -m 400 /dev/initrd b 1 250
chown root:disk /dev/initrd

Also, support for both "RAM disk" and "Initial RAM disk" (e.g., CONFIG_BLK_DEV_RAM=y and CONFIG_BLK_DEV_INITRD=y) must be compiled directly into the Linux kernel to use /dev/initrd. When using /dev/initrd, the RAM disk driver cannot be loaded as a module.

DESCRIPCIÓN

The special file /dev/initrd is a read-only block device. This device is a RAM disk that is initialized (e.g., loaded) by the boot loader before the kernel is started. The kernel then can use /dev/initrd's contents for a two-phase system boot-up.

In the first boot-up phase, the kernel starts up and mounts an initial root filesystem from the contents of /dev/initrd (e.g., RAM disk initialized by the boot loader). In the second phase, additional drivers or other modules are loaded from the initial root device's contents. After loading the additional modules, a new root filesystem (i.e., the normal root filesystem) is mounted from a different device.

Boot-up operation

Cuando se arranca el sistema con initrd, ocurre lo siguiente:

1.
El gestor de arranque ('boot loader') carga el núcleo y el contenido de /dev/initrd en memoria.
2.
En la puesta en marcha del núcleo, éste descomprime y copia el contenido del dispositivo /dev/initrd en el dispositivo /dev/ram0 y a continuación libera la memoria utilizada por /dev/initrd.
3.
Seguidamente, el núcleo monta el dispositivo /dev/ram0 en modo lectura/escritura como el sistema de ficheros raíz inicial.
4.
Si el sistema de ficheros raíz habitual indicado coincide con el sistema de ficheros raíz inicial (por ejemplo, /dev/ram0) entonces el núcleo salta directamente al último paso para la secuencia de arranque habitual.
5.
Si el fichero ejecutable /linuxrc está presente en el sistema de ficheros raíz inicial, se ejecuta con UID (identificador de usuario) 0. (El fichero /linuxrc debe tener permiso de ejecución. El fichero /linuxrc puede ser cualquier ejecutable válido, incluyendo los guiones de cualquier procesador de órdenes -'shell scripts'.)
6.
Si no se ejecuta /linuxrc o cuando /linuxrc termina, se monta el sistema de ficheros raíz habitual. (Si /linuxrc termina con algún sistema de ficheros montado en el raíz inicial, entonces el comportamiento del núcleo es INDETERMINADO. (Vea la sección OBSERVACIONES para consultar el comportamiento actual del núcleo.)
7.
Si el sistema de ficheros 'habitual' contiene el directorio /initrd, el dispositivo /dev/ram0 se mueve desde / a /initrd. En otro caso, si el directorio /initrd no existe, el dispositivo /dev/ram0 se desmonta. (Cuando es movido desde / a /initrd, /dev/ram0 no se desmonta, y por tanto los procesos pueden permanecer funcionando desde /dev/ram0. Si el directorio /initrd no existe en el sistema de ficheros raíz habitual y queda algún proceso en funcionamiento sobre /dev/ram0 cuando /linuxrc termina, el comportamiento del núcleo es INDETERMINADO. Vea la sección de OBSERVACIONES para consultar el comportamiento actual del núcleo.)
8.
La secuencia de arranque/inicio habitual (por ejemplo, la ejecución de /sbin/init) se realiza en el sistema de ficheros habitual.

Opciones

Las siguientes opciones del gestor de arranque, cuando se utilizan con initrd, alteran el proceso de puesta en marcha del núcleo:

Especifica el fichero a cargar como el contenido de /dev/initrd. Para LOADLIN esta es una opción de línea de órdenes. Para LILO tiene que utilizar este orden en el fichero de configuración de LILO, /etc/lilo.config. El nombre de fichero indicado con esta opción será normalmente una imagen del sistema de ficheros comprimida con GZip.
Esta opción de arranque deshabilita la operación de arranque en dos fases. El núcleo realiza la secuencia de arranque habitual como si /dev/initrd no hubiera sido inicializado. Con esta opción, cualquier contenido de /dev/initrd cargado en la memoria por el 'boot loader' es preservado. Esta opción permite que /dev/initrd contenga cualquier clase de datos y no esté limitado a una imagen de sist. de ficheros. De todas formas, el dispositivo /dev/initrd es de sólo-lectura y puede ser leído sólo una vez tras la puesta en marcha del sistema.
Especifica el dispositivo que será utilizado como sistema de ficheros normal (raíz). Para LOADLIN esta es una opción de línea de órdenes. Para LILO esta es una opción para el momento de arranque o puede utilizarse como línea de opción en el fichero de configuración de LILO, /etc/lilo.config. El dispositivo indicado por la opción debe ser un dispositivo 'montable', y contener un sistema de ficheros raíz adecuado.

Changing the normal root filesystem

By default, the kernel's settings (e.g., set in the kernel file with rdev(8) or compiled into the kernel file), or the boot loader option setting is used for the normal root filesystems. For an NFS-mounted normal root filesystem, one has to use the nfs_root_name and nfs_root_addrs boot options to give the NFS settings. For more information on NFS-mounted root see the kernel documentation file Documentation/filesystems/nfs/nfsroot.txt (or Documentation/filesystems/nfsroot.txt before Linux 2.6.33). For more information on setting the root filesystem see also the LILO and LOADLIN documentation.

It is also possible for the /linuxrc executable to change the normal root device. For /linuxrc to change the normal root device, /proc must be mounted. After mounting /proc, /linuxrc changes the normal root device by writing into the proc files /proc/sys/kernel/real-root-dev, /proc/sys/kernel/nfs-root-name, and /proc/sys/kernel/nfs-root-addrs. For a physical root device, the root device is changed by having /linuxrc write the new root filesystem device number into /proc/sys/kernel/real-root-dev. For an NFS root filesystem, the root device is changed by having /linuxrc write the NFS setting into files /proc/sys/kernel/nfs-root-name and /proc/sys/kernel/nfs-root-addrs and then writing 0xff (e.g., the pseudo-NFS-device number) into file /proc/sys/kernel/real-root-dev. For example, the following shell command line would change the normal root device to /dev/hdb1:


echo 0x365 >/proc/sys/kernel/real-root-dev

Como ejemplo para sistemas NFS, las siguientes líneas de órdenes cambiarían el dispositivo raíz al directorio NFS /var/nfsroot en un servidor NFS local con dirección IP 193.8.232.7 para un sistema con dirección 193.8.232.2 llamado 'idefix':


echo /var/nfsroot >/proc/sys/kernel/nfs-root-name
echo 193.8.232.2:193.8.232.7::255.255.255.0:idefix \

>/proc/sys/kernel/nfs-root-addrs echo 255 >/proc/sys/kernel/real-root-dev

Note: The use of /proc/sys/kernel/real-root-dev to change the root filesystem is obsolete. See the Linux kernel source file Documentation/admin-guide/initrd.rst (or Documentation/initrd.txt before Linux 4.10) as well as pivot_root(2) and pivot_root(8) for information on the modern method of changing the root filesystem.

Modo de empleo

La principal motivación para implementar initrd fue la de permitir una configuración modular del núcleo en el momento de la instalación.

Aquí se describe un posible escenario de la instalación del sistema:

1.
El programa cargador arranca desde disquete u otro medio con un núcleo mínimo(p.ej. con soporte para /dev/ram, /dev/initrd, y el sistema de ficheros ext2) y carga /dev/initrd con una versión comprimida (con gzip) del sistema de ficheros inicial.
2.
El ejecutable /linuxrc determina lo que se necesita para montar, mount(1), el sistema de ficheros raíz normal (p.ej. tipo de dispositivo, controladores, sistema de ficheros) y (2) el formato 'de distribución' (p.ej. CD-ROM, red, cinta, ...). Esto se puede hacer preguntando al usuario, tanteando/probando automáticamente, o mediante una aproximación mixta.
3.
El ejecutable /linuxrc carga los módulos necesarios desde el sistema de ficheros inicial.
4.
El ejecutable /linuxrc crea y 'expande' el sistema de ficheros raíz. (En esta etapa, el sistema raíz no tiene por qué ser aún un sistema completo.)
5.
El ejecutable /linuxrc establece /proc/sys/kernel/real-root-dev, desmonta /proc, el sistema de ficheros raíz y cualquier otro sist. de ficheros que hubiese montado, y entonces termina.
6.
El núcleo entonces monta el sistema de ficheros definitivo.
7.
Ahora que el sist. de ficheros está accesible e intacto, el gestor de arranque puede ser instalado.
8.
El gestor de arranque está configurado para cargarse en /dev/initrd, un sistema de ficheros con el conjunto de módulos que fue utilizado para poner en marcha el sistema. (p.ej. El dispositivo /dev/ram0 puede ser modificado, después desmontado, y finalmente, la imagen es escrita desde /dev/ram0 a un fichero.)
9.
El sistema es ahora capaz de arrancar, y se pueden abordar nuevas tareas de la instalación.

El papel clave de /dev/initrd en el proceso es el de reutilizar los datos de configuración durante el funcionamiento habitual del sistema sin que se requiera una selección inicial del núcleo, o un núcleo genérico demasiado grande, o recompilarlo.

Un segundo escenario se presenta para instalaciones en las que Linux corre en sistemas con diferentes configuraciones 'hardware' en una misma red. En estos casos, puede ser deseable utilizar sólo un pequeño conjunto de núcleos (idealmente, uno) y mantener la parte específica de la configuración de cada sistema tan pequeña como sea posible. En este caso, se crea un fichero común con todos los módulos requeridos.Entonces, sólo el fichero /linuxrc o un fichero ejecutado por /linuxrc sería diferente.

Un tercer ejemplo es más conveniente para discos 'de rescate'. Debido a que cierta información como la localización de la partición del sistema de ficheros raíz no se necesita en el momento del arranque, el sistema cargado desde /dev/initrd puede utilizar un diálogo y/o autodetección seguido posiblemente de un chequeo a este sistema de ficheros.

Por último, pero no menos importante, las distribuciones de Linux en CD-ROM pueden utilizar initrd para facilitar la instalación desde el CD-ROM. La distribución puede utilizar LOADLIN para cargar directamente /dev/initrd desde el CD-ROM sin necesitar ningún disquete. La distribución podría también utilizar un disco de arranque con LILO y después cargar un disco-RAM más grande a través de /dev/initrd desde el CD-ROM.

ARCHIVOS

/dev/initrd
/dev/ram0
/linuxrc
/initrd

NOTAS

1.
Con el núcleo actual, cualquier sistema de ficheros que permanezca montado cuando /dev/ram0 es movido desde / a /initrd continúa siendo accesible. Sin embargo, la información en /proc/mounts no es actualizada.
2.
Con el núcleo actual, si el directorio /initrd no existe, entonces /dev/ram0 no será completamente desmontado si /dev/ram0 está siendo utilizado por algún proceso o mantiene algún sistema de ficheros montado en él. Si no se desmonta completamente /dev/ram0, entonces /dev/ram0 permanecerá en memoria.
3.
Los usuarios de /dev/initrd no deberían depender del comportamiento indicado en las notas anteriores. Este comportamiento puede cambiar en futuras versiones del núcleo de Linux.

VÉASE TAMBIÉN

chown(1), mknod(1), ram(4), freeramdisk(8), rdev(8)

Documentation/admin-guide/initrd.rst (or Documentation/initrd.txt before Linux 4.10) in the Linux kernel source tree, the LILO documentation, the LOADLIN documentation, the SYSLINUX documentation

COLOFÓN

Esta página es parte de la versión 5.10 del proyecto Linux man-pages. Puede encontrar una descripción del proyecto, información sobre cómo informar errores y la última versión de esta página en https://www.kernel.org/doc/man-pages/.

TRADUCCIÓN

La traducción al español de esta página del manual fue creada por Julio González Durán <jugonzalez@mx3.redestb.es> y Juan Piernas <piernas@ditec.um.es>

Esta traducción es documentación libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.

Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org>..

6 Marzo 2019 Linux