Next: , Previous: , Up: Configuración del sistema   [Contents][Index]


12.13 Disco en RAM inicial

Para el propósito del arranque inicial, se le proporciona al núcleo Linux-libre un disco inicial en RAM, o initrd. Un initrd contiene un sistema de archivos raíz temporal así como un guión de inicialización. Este último es responsable del montaje del sistema de archivos raíz real, así como de la carga de cualquier módulo del núcleo que pueda ser necesario para esta tarea.

El campo initrd-modules de una declaración operating-system le permite especificar qué módulos del núcleo Linux-libre deben estar disponibles en el initrd. En particular, aquí es donde se debe enumerar los módulos que controlen realmente el disco duro donde su partición raíz se encuentre—aunque el valor predeterminado de initrd-modules debería cubrir la mayor parte de casos de uso. Por ejemplo, en caso de necesitar el módulo megaraid_sas además de los módulos predeterminados para poder acceder a sistema de archivos raíz, se podría escribir:

(operating-system
  ;; …
  (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
Variable Scheme: %base-initrd-modules

Esta es la lista de módulos del núcleo que se incluyen en el initrd predeterminado.

Más allá, si necesita personalizaciones de un nivel más bajo, el campo initrd de una declaración operating-system le permite especificar qué initrd desea usar. El módulo (gnu system linux-initrd) proporciona tres formas de construir un initrd: el procedimiento de alto nivel base-initrd y los procedimientos de bajo nivel raw-initrd y expression->initrd.

El procedimiento base-initrd está pensado para cubrir la mayor parte de usos comunes. Por ejemplo, si desea añadir algunos módulos del núcleo que deben cargarse durante el arranque, puede definir el campo initrd de la declaración de sistema operativo de esta forma:

(initrd (lambda (sistemas-de-archivos . resto)
          ;; Crea un initrd estándar pero configura la red
          ;; con los parámetros que QEMU espera por omisión.
          (apply base-initrd sistemas-de-archivos
                 #:qemu-networking? #t
                 resto)))

El procedimiento base-initrd también maneja casos de uso comunes que implican el uso del sistema en un anfitrión QEMU, o como un sistema “live” con un sistema de archivos raíz volátil.

The base-initrd procedure is built from raw-initrd procedure. Unlike base-initrd, raw-initrd doesn’t do anything high-level, such as trying to guess which kernel modules and packages should be included to the initrd. An example use of raw-initrd is when a user has a custom Linux kernel configuration and default kernel modules included by base-initrd are not available.

El disco inicial en RAM producido por base-initrd o raw-initrd inspecciona varias opciones proporcionadas por la línea de órdenes al núcleo Linux (esto es, argumentos pasados a través de la orden linux de GRUB, o de la opción -append de QEMU), notablemente:

gnu.load=boot

Indica al disco de RAM inicial que cargue arranque, un archivo que contiene un programa Scheme, una vez haya montado el sistema de archivos raíz.

Guix usa esta opción para proporcionar el control a un programa de arranque que ejecuta los programas de activación de servicios y lanza GNU Shepherd, el sistema de inicialización.

root=root

Monta raíz como el sistema de archivos raíz. raíz puede ser un nombre de dispositivo como /dev/sda1, una etiqueta del sistema de archivos o un UUID del sistema de archivos. Si no se proporciona se usa el nombre del sistema de archivos raíz de la declaración del sistema operativo.

rootfstype=type

Set the type of the root file system. It overrides the type field of the root file system specified via the operating-system declaration, if any.

rootflags=options

Set the mount options of the root file system. It overrides the options field of the root file system specified via the operating-system declaration, if any.

fsck.mode=mode

Whether to check the root file system for errors before mounting it. mode is one of skip (never check), force (always check), or auto to respect the root <file-system> object’s check? setting (see Sistemas de archivos) and run a full scan only if the file system was not cleanly shut down.

auto is the default if this option is not present or if mode is not one of the above.

fsck.repair=level

The level of repairs to perform automatically if errors are found in the root file system. level is one of no (do not write to root at all if possible), yes (repair as much as possible), or preen to repair problems considered safe to repair automatically.

preen is the default if this option is not present or if level is not one of the above.

gnu.system=system

Hace que /run/booted-system y /run/current-system apunten a sistema.

modprobe.blacklist=módulos

Indica al disco inicial en RAM así como a la orden modprobe (del paquete kmod) que deben negarse a cargar módulos. módulos debe ser una lista separada por comas de nombres de módulos—por ejemplo, usbkbd,9pnet.

gnu.repl

Inicia una sesión interactiva (REPL) desde el disco inicial en RAM antes de que intente cargar los módulos del núcleo y del montaje del sistema de archivos raíz. Nuestro departamento comercial lo llama arranca-en-Guile. Como amante de Scheme, lo adorará. See Using Guile Interactively in GNU Guile Reference Manual, para más información sobre sesiones interactivas Guile.

Una vez conocidas todas las características que proporcionan los discos iniciales en RAM que producen base-initrd y raw-initrd, a continuación veremos cómo usarlas y personalizarlos más aún.

Procedimiento Scheme: raw-initrd sistemas-de-archivos [#:linux-modules '()] [#:pre-mount #t] [#:mapped-devices '()] [#:keyboard-layout #f] [#:helper-packages '()]  [#:qemu-networking? #f]

[#:volatile-root? #f] Return a derivation that builds a raw initrd. file-systems is a list of file systems to be mounted by the initrd, possibly in addition to the root file system specified on the kernel command line via root. linux-modules is a list of kernel modules to be loaded at boot time. mapped-devices is a list of device mappings to realize before file-systems are mounted (see Dispositivos traducidos). pre-mount is a G-expression to evaluate before realizing mapped-devices. helper-packages is a list of packages to be copied in the initrd. It may include e2fsck/static or other packages needed by the initrd to check the root file system.

Cuando su valor es verdadero, keyboard-layout es un registro <keyboard-layout> que denota la distribución de teclado en consola deseada. Esto se realiza previamente a que los dispositivos configurados en mapped-devices se inicien y antes de que los sistemas de archivos en file-systems se monten, de manera que, en caso de que la usuaria tuviese que introducir una contraseña o usar la sesión interactiva, esto suceda usando la distribución de teclado deseada.

Cuando qemu-networking? es verdadero, configura la red con los parámetros QEMU estándar. Cuando virtio? es verdadero, carga módulos adicionales para que la imagen en RAM pueda ser usada como un sistema virtualizado por QEMU con controladores paravirtualizados de E/S.

Cuando volatile-root? es verdadero, el sistema de archivos raíz tiene permisos de escritura pero cualquier cambio realizado se perderá.

Procedimiento Scheme: base-initrd sistemas-de-archivos [#:mapped-devices '()] [#:keyboard-layout #f]  [#:qemu-networking? #f]

[#:volatile-root? #f]  [#:linux-modules ’()] Return as a file-like object a generic initrd, with kernel modules taken from linux. file-systems is a list of file-systems to be mounted by the initrd, possibly in addition to the root file system specified on the kernel command line via root. mapped-devices is a list of device mappings to realize before file-systems are mounted.

Cuando su valor es verdadero, keyboard-layout es un registro <keyboard-layout> que denota la distribución de teclado en consola deseada. Esto se realiza previamente a que los dispositivos configurados en mapped-devices se inicien y antes de que los sistemas de archivos en file-systems se monten, de manera que, en caso de que la usuaria tuviese que introducir una contraseña o usar la sesión interactiva, esto suceda usando la distribución de teclado deseada.

qemu-networking? y volatile-root? funcionan como en raw-initrd.

El initrd incorpora automáticamente todos los módulos del núcleo necesarios para sistemas-de-archivos y para las opciones proporcionadas. Módulos del núcleo adicionales pueden proporcionarse a través de linux-modules. Se añadirán al initrd y se cargarán en tiempo de arranque en el orden que aparezcan.

No es necesario decir que los initrd que producimos y usamos embeben un Guile enlazado estáticamente, y que el programa de inicialización es un programa Guile. Esto proporciona mucha flexibilidad. El procedimiento expression->initrd construye un initrd de ese tipo, una vez proporcionado el programa a ejecutar en dicho initrd.

Procedimiento Scheme: expression->initrd exp [#:guile %guile-static-stripped] [#:name "guile-initrd"] Return as a

file-like object a Linux initrd (a gzipped cpio archive) containing guile and that evaluates exp, a G-expression, upon booting. All the derivations referenced by exp are automatically copied to the initrd.


Next: Configuración del gestor de arranque, Previous: Selector de servicios de nombres, Up: Configuración del sistema   [Contents][Index]