¿Por qué necesito initramfs?

¿Por qué necesito initramfs?

Descubrí que si elijo jffso sdcomo sistema de archivos (y no initramfs), el tamaño del kernel será muy pequeño (1,4 MB en comparación con initramfs3,4 MB). Significa que initramfsocupa un espacio considerablemente grande. Entonces, si puedo, lo eliminaré por completo y así tendré un núcleo muy pequeño, que es lo que quiero.

La pregunta básica que me viene a la mente es: ¿Por qué necesito initramfs? ¿No puede arrancar un kernel de Linux sin tener ningún sistema de archivos inicial?

Mi aplicación final solo realizará cálculos y comunicaciones, sin almacenamiento alguno. Entonces, un sistema operativo sin sistema de archivos tiene sentido, al menos para mi aplicación.

Respuesta1

El aumento de tamaño al tener un initramfs no se debe al controlador ramfs (son solo unos pocos kB y, de todos modos, son necesarios para otras cosas), sino al propio initramfs. El initramfs contiene programas que son necesarios para ensamblar y montar el sistema de archivos raíz real.

Initramfs hace que sea mucho más fácil, y en algunos casos posible (por ejemplo, cifrado /), iniciar el sistema. Se recomienda encarecidamente mantenerlo en hardware tipo PC con muchos periféricos conectables en caliente. Por otro lado, tiene mucho sentido arrancar un dispositivo integrado sin ningún initramfs, con un kernel que solo admita la configuración de hardware particular para la que está diseñado.

Por supuesto, el kernel necesita arrancar en un sistema de archivos: tiene que haber alguna forma de cargar cualquier aplicación que desee ejecutar. Si no va a ejecutar nada, también puede mantener la máquina apagada.

Si no desea utilizar initramfs, simplemente dígale a su gestor de arranque que no pase uno. Tampoco incluya uno en la salida de la compilación del kernel, por supuesto; cómo sucede esto si depende de la arquitectura y del gestor de arranque: por ejemplo, vmlinuxy bzImageno incluya initramfs (son el kernel sin formato y comprimido respectivamente). ), pero uImage(para U-Boot) incluye tanto el kernel como el initramfs, si lo hay.

(Técnicamente, comomikeservnotas, siempre hay un initramfs, pero de forma predeterminada, es un archivo vacío de 134 bytes. Lo que está viendo, y de lo que desea deshacerse, es un initramfs "verdadero" no vacío creado por su proceso de compilación y que contiene herramientas que luego se utilizan para montar el sistema de archivos raíz).

Eso sí, un initramfs puede ser una forma razonable de crear un sistema de aplicación única sin datos persistentes: coloque todas sus aplicaciones en initramfs, inícielo y consérvelo. Esto hace que sea más fácil organizar su almacenamiento persistente o su imagen de arranque (todo lo que necesita es el kernel e initramfs, que se pueden empaquetar). Sin embargo, este enfoque tiene desventajas: todos los datos en initramfs se almacenarán en la RAM de forma permanente y no podrá modificar fácilmente los archivos en la imagen de arranque, deberá reconstruir el archivo.

Respuesta2

DeLFS:

El único propósito de initramfs es montar el sistema de archivos raíz. initramfs es un conjunto completo de directorios que encontrará en un sistema de archivos raíz normal. Está incluido en un único archivo cpio y comprimido con uno de varios algoritmos de compresión.

...

Sólo hay cuatro razones principales para tener un initramfs en el entorno LFS: cargar el rootfs desde una red, cargarlo desde un volumen lógico LVM, tener un rootfs cifrado donde se requiere una contraseña, o por la conveniencia de especificar el rootfs como un ETIQUETA o UUID. Cualquier otra cosa suele significar que el kernel no se configuró correctamente.

...

Para la mayoría de las distribuciones, los módulos del kernel son la razón principal para tener un initramfs. En una distribución general, existen muchas incógnitas, como los tipos de sistemas de archivos y la distribución de los discos. En cierto modo, esto es lo opuesto a LFS, donde se conocen las capacidades y el diseño del sistema y normalmente se construye un kernel personalizado. En esta situación, rara vez se necesita un initramfs.

Otra fuentewww.kernel.org

Además de esto, hay muchos sistemas Linux a los que les gustan los enrutadores que no usan initramfs.

Respuesta3

Necesita un initramfs para configuraciones más complejas, como arranque de red, lvm o raid, ya que requieren algunas utilidades en modo de usuario para configurar el acceso al root fs. Para una partición simple y convencional en un disco, siempre que tenga los controladores de disco integrados en el kernel y especifique el argumento raíz por ruta del dispositivo en lugar de UUID, entonces puede prescindir de initramfs. Por supuesto, la ruta del dispositivo está sujeta a cambios, dependiendo de qué dispositivos plug and play (es decir, USB) haya conectado, o incluso simplemente variaciones de tiempo aleatorias, razón por la cual casi todo el mundo usa uuids e initramfs para mayor confiabilidad.

Respuesta4

Si su partición raíz está en un disco que usa una tabla de particiones MBR y desea un nombre de dispositivo de bloque persistente como root=parámetro para el kernel, necesita usar initramfs. /dev/sdXno es persistente, PARTUUID=es una característica exclusiva de GPT y LABEL=no UUID=es visible para el kernel en las primeras etapas del arranque. Un initramfs puede cargar los controladores del sistema de archivos y de almacenamiento de manera que LABEL=sean UUID=visibles para el kernel.

información relacionada