¿Por qué en algunos sistemas Linux, el sistema de archivos raíz aparece como / dev / root en lugar de / dev / <dispositivo real> en mtab?

11

He visto en varios sistemas Linux donde, en lugar del nodo del dispositivo real (por ejemplo:) /dev/sda1, el dispositivo raíz aparece como /dev/root, o en lugar del sistema de archivos real, mtabdice que es un sistema de archivos llamado rootfs(que aparece como un sistema de archivos real /proc/filesystems, pero no tiene código <linux-kernel-source-tree>/fs) Se han hecho varias utilidades para usar ciertos atributos para determinar el nodo del dispositivo raíz real (como rdev y el rootdev del sistema operativo Chromium). No puedo encontrar ninguna explicación lógica para esto que no sea leer en algún lugar que los dispositivos integrados muy pequeños no siempre tienen que tener un /devnodo de dispositivo para su dispositivo raíz. (¿Es esto cierto, y si es así, es esa la respuesta a mi pregunta?) ¿Por qué mtab a veces dice /dev/root(y creo que podría haberlo visto decirrootdevuna vez) en lugar del nodo del dispositivo real, y ¿cómo puedo hacer que siempre diga el nodo del dispositivo real? El núcleo primero monta el dispositivo raíz siguiendo el rootparámetro en la línea de cm, luego lo init/systemdvuelve a montar de acuerdo con el fstab, ¿correcto? Si es así, supongo que se initmantiene mtab. Si mi teoría es correcta, ¿cómo puedo initescribir en el nodo del dispositivo raíz real mtab? Noté que en /etc/mtabrealidad es un enlace simbólico /proc/mounts, lo que significaría que mtabel núcleo lo mantiene. Entonces, ¿cómo configuro / parcheo un núcleo para que, en lugar de decir que la ruta del nodo del dispositivo raíz sea /dev/root, mtabcontenga el nodo del dispositivo real?

Porra
fuente

Respuestas:

4

Esto es generalmente un artefacto de usar un initramfs.

De la documentación del kernel ( https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

¿Qué es rootfs?

Rootfs es una instancia especial de ramfs (o tmpfs, si está habilitado), que siempre está presente en los sistemas 2.6. No puede desmontar rootfs por aproximadamente el mismo motivo por el que no puede eliminar el proceso de inicio; en lugar de tener un código especial para verificar y manejar una lista vacía, es más pequeño y simple para el núcleo asegurarse de que ciertas listas no puedan quedar vacías.

La mayoría de los sistemas simplemente montan otro sistema de archivos sobre rootfs y lo ignoran. La cantidad de espacio que ocupa una instancia vacía de ramfs es pequeña.

Por rootfslo tanto, es el sistema de archivos raíz que se creó para initramfs y no se puede desmontar.

En lo que respecta a /dev/root, estoy menos seguro de esto, pero si recuerdo correctamente, /dev/rootse crea al usar un initrd (no es lo mismo que un initramfs).

Patricio
fuente
mountda rootfs on / type rootfs (rw)para initrd y /dev/root on / type ext2 (rw,relatime,block_validity,barrier,user_xattr)para disco duro ext2 con esta configuración .
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
/dev/rootes utilizado por algunas implementaciones de initramfs pero no por otras, en estos casos no se debe al kernel. Cuando no se utiliza un initramfs, parece ser un valor de marcador de posición utilizado por el núcleo. (Tal vez podría eliminarse en alguna versión posterior del kernel). stackoverflow.com/questions/37310046/…
sourcejedi
2

En Linux, /dev/rootsi está presente, es un enlace simbólico al dispositivo real creado en el momento del arranque.

Puede usar readlink /dev/rooto cat /proc/cmdlinepara ver el rootparámetro del núcleo arrancado, y así descubrir el dispositivo real detrás de él.

Del hombre dracut(8)

Sin embargo, para continuar con un arranque exitoso, el objetivo es localizar su volumen raíz y crear un enlace simbólico / dev / root que apunte al sistema de archivos.

Rui F Ribeiro
fuente
No estoy completamente seguro de si /dev/rootes un artefacto de las distribuciones basadas en RedHat.
Rui F Ribeiro
Bueno, mi Debian 8 no tiene /dev/root/. En un viejo CentOS parece ser un nodo de dispositivo real en lugar de un enlace simbólico.
ilkkachu
1
Bueno, la base-filesreceta de OpenEmbeddedfstab menciona /dev/root, por lo que no solo las distribuciones originadas en Red Hat lo están usando.
ack