Provided by:
manpages-es_1.55-8_all 
NOMBRE
initrd - disco-RAM inicializado por el gestor de arranque
DESCRIPCIÓN
El fichero 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 un arranque del sistema
en dos fases.
En la primera fase del arranque, el núcleo pone en marcha y monta un
sistema de ficheros raíz inicial 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.
FUNCIONAMIENTO DEL ARRANQUE
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 disp. /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:
initrd=nombre_de_fichero
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.
noinitrd
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.
root=nombre-de-dispositivo
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.
CAMBIAR EL SISTEMA DE FICHEROS RAÍZ HABITUAL
Por defecto, las opciones establecidas del núcleo (p. ej. establecidas
en el fichero del núcleo mediante rdev 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 fich. 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 nfsroot.txt. Para más información sobre el
establecimiento del sistema de ficheros raíz, vea también la doc. 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 ser 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.7 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
UTILIZACIÓN
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.
CONFIGURACIÓN
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. Típicamente
/dev/initrd es propiedad de root:disk con modo 0400 (con acceso de
lectura sólo para el ’root’). Si el sistema no tiene creado
/dev/initrd todavía, 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.
FICHEROS
/dev/initrd
/dev/ram0
/linuxrc
/initrd
VÉASE TAMBIÉN
chown(1), mknod(1), /dev/ram(4), freeramdisk(8), rdev(8), El fichero de
documentación initrd.txt en el paquete de los fuentes del núcleo, la
documentación de LILO, la documentación de LOADLIN, la documentación de
SYSLINUX.
OBSERVACIONES
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.
AUTOR
El código del núcleo para el dispositivo initrd ha sido escrito por
Werner Almesberger <almesber@lrc.epfl.ch> y Hans Lermen
<lermen@elserv.ffm.fgan.de>. El código para initrd se añadió al código
básico del núcleo en la versión de desarrollo 1.3.73.