¿Initramfs usa / etc / fstab?

20

Según tengo entendido, initramfs es responsable de cargar el sistema de archivos raíz "real".

Ahora, hay dos lugares donde definimos esa raíz. Primero ponemos una entrada /etc/fstab. En segundo lugar, colocamos el dispositivo en los comandos de arranque del núcleo, por ejemplo root=/dev/sda1.

¿Cuál usa initramfs para determinar dónde está el sistema de archivos raíz? Si utiliza el parámetro del núcleo raíz, ¿por qué tenemos una entrada /etc/fstab? La segunda opción, (se lee /etc/fstab), es bastante ilógica porque el /etc/fstabarchivo está en el dispositivo raíz que initramfs está tratando de montar en primer lugar.

Cosas muy confusas.

Ahmed Ghonim
fuente

Respuestas:

14

Como usted dijo, el propósito de initramfs es lograr que se monte el sistema de archivos raíz "real" (también puede hacer otras cosas, pero esta es la tarea común).

Sin un initramfs, el núcleo normalmente montará una partición como solo lectura y luego pasará el control a /sbin/init. Un initramfs simplemente se hace cargo de esta tarea desde el núcleo, generalmente cuando el sistema de archivos raíz no es una partición normal (mdraid, lvm, encriptada, etc.).

Ahora, aparte del fondo en initramfs, tu /etc/fstabreside en tu sistema de archivos raíz. Como tal, cuando se inicia initramfs, ese sistema de archivos raíz no está allí, por lo que no puede llegar al fstab (problema de huevo y gallina).
En cambio, tenemos que pasar un parámetro a los argumentos de arranque del núcleo para que los use initramfs. Normalmente esto es algo así root=/dev/sdX. Sin embargo, también podría hacer algo para descubrir automáticamente dónde está su dispositivo raíz, por lo que no hay ningún parámetro. Dado que es solo software (generalmente un script), realmente puede hacer lo que quiera para montar el dispositivo raíz.

Ahora, como se indicó anteriormente, el núcleo montará la raíz real como solo lectura. Los initramfs deberían hacer exactamente esto. Una vez que se hace initramfs, el sistema continúa arrancando exactamente como si no hubiera initramfs y se /sbin/initinicia. Este init luego inicia todos sus scripts de arranque normales, y es el trabajo de uno de estos scripts leer /etc/fstab, cambiar de raíz a lectura-escritura y montar todos los demás sistemas de archivos.

Patricio
fuente
Entonces, ¿estás diciendo que / sbin / init dentro del sistema de archivos raíz real volvería a montar root usando las opciones en / etc / fstab?
Ahmed Ghonim
3
Si. Por lo general a través de un simple mount -o remount,rw /. No cambiará el dispositivo que está montado, pero cambiará las opciones en el soporte. Desde la página del manual:After this call mount reads fstab (or mtab) and merges these options with options from command line
Patrick
¿Cómo pasamos un parámetro a los argumentos de arranque del kernel si estamos usando la línea de comando grub2? Mi sistema no muestra el menú de grub por alguna razón.
intuido
@intuited Deberías hacer una nueva pregunta. Los comentarios no son el lugar para preguntas y respuestas
Patrick
lsinitramfs /boot/initrd* | fgrep fstaby sorpresa, initramfs sí contiene el archivo fstab, al menos para mí.
youfu
2

Puede que sí o puede que no. Como Initramfs se puede construir de varias maneras (el núcleo simplemente lo carga y ejecuta lo /initque hace lo que sea). Sin embargo, el uso de un parámetro es más común, ya que permite una mayor flexibilidad, es decir, si algo cambia, puede editar la entrada de arranque y las cosas seguirán funcionando. Con una raíz codificada incorporada, esto no sería necesariamente posible.

La entrada fstab aún puede ser necesaria de cualquier manera, ya que también determina otras cosas, como las opciones de montaje (algunas de las cuales se pueden cambiar sobre la marcha) y el fsckorden. Además, incluso si fuera completamente superfluo (y si el Initramfs lo maneja, puede funcionar sin él), todavía mantendría la entrada allí simplemente por el bien de la integridad.

Frostschutz
fuente
1

Puede considerar / etc / fstab como montaje estático, es solo una forma de realizar dicha tarea, pero no es el único, de hecho, ejecuta el comando mount, y ve muchos sistemas de archivos que faltan en fstab. Servicio como udev y udisk gestionan gran parte del "montaje automático" ignorando el archivo / etc / fstab ...

Entonces, si algo está montado o no con frecuencia, no tiene nada que ver con / etc / fstab.

initramfs es solo un rootfs temporal utilizado durante el proceso de arranque hasta que se monte el rootfs "verdadero", entonces ¿por qué initramfs debería estar en / etc / fstab?

sebelk
fuente