Loading AI tools
De Wikipedia, la enciclopedia libre
El disco RAM inicial o initrd
(de initial ramdisk), por sus siglas en inglés es un sistema de ficheros temporal usado por el núcleo Linux durante el inicio del sistema.
Es usado típicamente para hacer los arreglos necesarios antes de que el sistema de ficheros raíz pueda ser montado.
El sistema operativo GNU/Linux, al igual que otros sistemas Unix, consiste en un núcleo, Linux, que es cargado inicialmente en memoria, y que permanece de manera residente durante el funcionamiento del sistema, así como aplicaciones — software que se ejecuta en el espacio de usuario, bajo el control del núcleo.
Para minimizar la cantidad de código que se carga en memoria, y para una modularidad máxima, el núcleo Linux omite mucho código necesario para cargar el sistema operativo. Parte de este código se encuentra en módulos del núcleo, mientras que el resto son aplicaciones en el espacio de usuario.
Para realizar un sistema de arranque que pueda servir para hardware variado, o que pueda ser cargado a partir de distintos medios incluyendo medios virtuales y transitorios como los provistos por una conexión de red, suele ser necesario para el núcleo acceder al espacio de usuario y quizás a módulos del núcleo de manera que pueda obtener los datos y rutinas necesarias para acceder al almacén de datos principal. No tiene por qué ocurrir con todas las posibles configuraciones, aunque suele darse el caso.
El sistema de arranque initrd ha sido la principal solución a este problema desde hace mucho tiempo Archivado el 13 de enero de 2008 en Wayback Machine., aunque el recientemente desarrollado initramfs introducido en el núcleo Linux 2.6 contiene importantes mejoras.
En el sistema initrd, los ficheros que necesitan ser accedidos por el núcleo durante el arranque se almacenan en un disco RAM, cuyos contenidos se encuentran en un sistema de ficheros sobre un archivo montado como un dispositivo de bucle, o más históricamente, en un pequeño dispositivo montable como un disquette, y ocupa generalmente entre 1,4 MB y 4 MB. El sistema de ficheros está comprimido con gzip. La localización de la imagen de este disco RAM se da al núcleo en la carga por el cargador de arranque (generalmente o LILO o GRUB).
El sistema initrd emplea ciertos "trucos" y tiene algunos inconvenientes, desde el punto de vista de un administrador. Crear o editar una imagen de un sistema de ficheros de un disco RAM requiere privilegios de administrador para montar la imagen del sistema de ficheros para realizar cambios, y/o para inicializar la estructura del sistema de ficheros (dar formato) en el dispositivo virtual. Además, el sistema de ficheros utilizado en la imagen del disco RAM debe ser uno que no vaya a utilizarse en el núcleo, y el código para acceder al sistema de ficheros debe estar programado en el núcleo, lo que implica que no puede ser descargado más adelante de la misma manera que se puede hacer cuando el código es cargado a partir de módulos del núcleo.
Los discos RAM son de tamaño fijo, por lo que suelen utilizar más espacio del necesario, y también limitan la cantidad de espacio de trabajo disponible una vez que el sistema está arrancado. De hecho el enfoque de initrd no permite descargar nada de la memoria utilizada por éste sin reiniciar.
Sin embargo, pese a estos problemas, dado que desde hace años el sistema se ha venido utilizando casi de forma universal, aún tiene un amplio uso.
En comparación, initramfs es un sistema más conveniente y simple para gestionar por los administradores que los sistemas previos basados en discos RAM, ya que el código externo alojado en el disco RAM inicial puede ser editado fácilmente sin privilegios de administrador, y ya que hay una menor indirección: no hay necesidad de hacer un disco virtual, formatearlo y proveer al núcleo con capacidad para manejar sistemas de archivos más allá de los requisitos mínimos para leer un archivo cpio comprimido.
Desde que el sistema original basado en discos RAM se popularizó, un nuevo sistema de ficheros basado en memoria RAM más flexible, conocido como tmpfs o shmfs, se ha convertido en un componente estándar del núcleo. Este sistema es mucho más flexible y eficiente que el disco RAM de tamaño fijo original en muchos aspectos: no requiere formateo, y utiliza tanta memoria como se necesite para contener los datos.
También se usaba otro sistema similar, ramfs, que da al sistema initramfs su nombre. Actualmente los usuarios pueden elegir qué sistema de ficheros dinámico en RAM utilizar.
Además del código para tmpfs, que se utiliza en el núcleo para casi todas las configuraciones de Linux, el único requisito para hacer un disco virtual desde el que arrancar era añadir la posibilidad de descomprimir un paquete de archivos (los desarrolladores del núcleo escogieron utilizar el formato de archivo cpio). Los archivos descomprimidos se almacenan en un sistema de ficheros parecido a tmpfs. Este sistema se conoce como initramfs.
Así como para cargar el código necesario para preparar el arranque del sistema, un disco RAM (ya sea initrd o initramfs) puede ser útil como disco de rescate, para utilizar en actualizaciones de seguridad, copias de seguridad de archivos, realizar análisis forenses, depurar problemas de hardware, u obviar un disco duro, por ejemplo para arrancar imágenes del sistema operativo por red o desde un medio lento como un CD-ROM.
Muchas distribuciones Linux llevan una única imagen genérica del núcleo destinada a arrancar en la mayor variedad posible de hardware. Los controladores incluidos con esta imagen genérica del núcleo deben ser modulares, ya que no es posible compilar todo de forma estática en el núcleo sin hacerlo demasiado grande para arrancar en ordenadores con poca memoria o desde medios de baja capacidad como disquetes.
Esto a su vez conlleva el problema de detectar y cargar los módulos necesarios para montar el sistema de ficheros raíz en el arranque (o deducir qué sistema de ficheros es o dónde se encuentra).
Para complicar aún más las cosas, el sistema de ficheros raíz puede estar en un volumen RAID por software, LVM, un sistema de ficheros por red de algún tipo (NFS es común en ordenadores sin discos) o en una partición cifrada. Todos ellos requieren preparaciones especiales para montar.
La imagen del núcleo y la del initrd, deben ser guardadas en algún lugar accesible por el firmware de arranque del ordenador o el software de arranque, como por ejemplo Grub. En PC, esto es generalmente:
El cargador de arranque cargará en memoria el núcleo y la imagen initrd, y luego ejecutará el núcleo, pasando la dirección de memoria del initrd. Al final de su secuencia de arranque, el núcleo intenta determinar el formato de la imagen de sus primeros bloques de datos:
Dependiendo de los algoritmos que se hayan compilado estáticamente en él, el núcleo puede descomprimir imágenes initrd/initramfs comprimidas con gzip, bzip2, LZMA, XZ, LZO, LZ4 y zstd.
Algunas distribuciones de GNU/Linux, generan un initrd personalizado que consiste sólo en las partes necesarias para arrancar esa computadora en particular, como módulos del núcleo para ATA, SCSI y sistemas de archivos. Estos típicamente incluyen la ubicación y el tipo del sistema de ficheros raíz.
Otras, como Fedora y Ubuntu, crean un initrd más genérico. Estas comienzan sólo con el nombre del dispositivo del sistema de ficheros raíz (o su UUID) y deben descubrir todo lo demás en el momento del arranque. En este caso, una compleja sucesión de tareas debe realizarse para lograr montar el sistema de ficheros raíz:
El sistema de ficheros raíz final no puede montarse sobre "/", ya que eso dejaría los scripts y las herramientas en el sistema de archivo raíz inicial inaccesible para cualquier tarea de limpieza final. En su lugar es montado en un punto de montaje temporal y cambiado a su lugar con pivot_root(2) (que fue introducido específicamente para este propósito). Esto deja el sistema raíz inicial en un punto de montaje (como "/initrd") donde los scripts de inicio normal pueden posteriormente desmontarlo para liberar memoria ocupada por el initrd.
La mayoría de los sistemas de ficheros raíz implementan "/linuxrc" o "/init" como un script de shell y por lo tanto incluyen un shell mínimo (usualmente /bin/bash) junto con otras utilidades esenciales (usualmente Busybox). Para ahorrar un poco más de espacio, la shell, las utilidades y sus bibliotecas necesarias usualmente son compiladas con optimizaciones de espacio habilitadas (como por ejemplo la opción de gcc -Os) y enlazadas contra versiones reducidas de la biblioteca de C como dietlibc o klibc.
Algunas distribuciones (notablemente SUSE y Ubuntu) además usan el initrd para mostrar una imagen gráfica durante el proceso de arranque.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.