initrd(4) | Device Drivers Manual | initrd(4) |
initrd - disco-RAM inicializado por el gestor de arranque
El dispositivo de bloques /dev/initrd es de sólo lectura, al que se le asigna como número mayor 1 y como número menor 250. En general, /dev/initrd es propiedad de root:disk con modo 0400 (con acceso de lectura sólo para el 'root'). Si el sistema Linux no tuviese ya creado /dev/initrd, puede crearse con las siguientes órdenes:
mknod -m 400 /dev/initrd b 1 250 chown root:disk /dev/initrd
También, el soporte tanto para "disco RAM" y "disco RAM Inicial" (p.ej. CONFIG_BLK_DEV_RAM=y y CONFIG_BLK_DEV_INITRD=y) debe ser compilado directamente en el núcleo de Linux para utilizar /dev/initrd. Cuando se usa /dev/initrd, el controlador del disco RAM no se puede cargar como módulo.
El archivo especial dev/initrd es un dispositivo de bloques de sólo lectura. El dispositivo /dev/initrd es un disco RAM que es inicializado (es decir, cargado) por el gestor de arranque antes de cargar e iniciar el núcleo del sistema. Así, el núcleo puede utilizar el contenido del dispositivo /dev/initrd para el inicio del sistema en dos fases.
En la primera fase del inicio, el núcleo pone en marcha y monta un sistema de ficheros raíz a partir del contenido de /dev/initrd (o sea, el disco-RAM inicializado por el gestor de arranque). En la segunda fase, se cargan controladores adicionales u otros módulos desde el contenido del dispositivo raíz inicial. Tras cargar los módulos adicionales, se monta un nuevo sistema de ficheros raíz (es decir, el sistema de ficheros raíz habitual) desde un dispositivo diferente.
Cuando se arranca el sistema con initrd, ocurre lo siguiente:
Las siguientes opciones del gestor de arranque, cuando se utilizan con initrd, alteran el proceso de puesta en marcha del núcleo:
Por defecto, las opciones establecidas del núcleo (p. ej. establecidas en el fichero del núcleo mediante rdev(8) o compiladas dentro del mismo), o el establecimiento de opciones del 'boot loader' se utiliza para los sistemas de ficheros normales. Para un sistema de archivos raíz montado como NFS, debemos utilizar las opciones de arranque nfs_root_name y nfs_root_addrs para proporcionar/establecer las opciones de NFS. Para más información sobre sistemas raíz montados como NFS, vea el fichero de documentación del núcleo Documentation/filesystems/nfs/nfsroot.txt (o Documentation/filesystems/nfsroot.txt antes de Linux 2.6.33). Para más información sobre el establecimiento del sistema de archivos raíz, vea también la documentación de LILO y LOADLIN.
También es posible para el ejecutable de /linuxrc cambiar el dispositivo raíz por defecto. Para que /linuxrc cambie este dispositivo, /proc debe estar montado. Tras montar /proc, /linuxrc cambia el disp. raíz habitual escribiendo en los ficheros /proc/sys/kernel/real-root-dev, /proc/sys/kernel/nfs-root-name, y /proc/sys/kernel/nfs-root-addrs. Para un dispositivo raíz físico, éste se cambia haciendo que /linuxrc escriba el nuevo número de sistema de ficheros en /proc/sys/kernel/real-root-dev. Para un sistema raíz NFS, el disp. raíz se cambia haciendo que /linuxrc escriba la opción de NFS en los ficheros /proc/sys/kernel/nfs-root-name y /proc/sys/kernel/nfs-root-addrs y después escriba 0xff (p.ej. el número de pseudo-dispositivo-NFS) en el fichero /proc/sys/kernel/real-root-dev.Por ejemplo, la siguiente línea de órdenes del shell cambiaría el disp. raíz a /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
Nota: el empleo de /proc/sys/kernel/real-root-dev para modificar el sistema de archivos raiz está obsoleto. Consulte el archivo Documentation/admin-guide/initrd.rst (o Documentation/initrd.txt antes de Linux 4.10) asi como pivot_root(2) y pivot_root(8) para ver un método más reciente de hacerlo.
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:
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.
/dev/initrd
/dev/ram0
/linuxrc
/initrd
chown(1), mknod(1), ram(4), freeramdisk(8), rdev(8)
Documentation/admin-guide/initrd.rst (o Documentation/initrd.txt antes de Linux 4.10) en la documentación del núcleo de Linux , la documentación de LILO, de LOADLIN y de SYSLINUX.
La traducción al español de esta página del manual fue creada por Julio González Durán <jugonzalez@mx3.redestb.es>, Juan Piernas <piernas@ditec.um.es> y Marcos Fouces <marcos@debian.org>
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.
5 Febrero 2023 | Páginas de manual de Linux 6.03 |