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, mtab
dice 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 /dev
nodo 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 decirrootdev
una 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 root
parámetro en la línea de cm, luego lo init/systemd
vuelve a montar de acuerdo con el fstab
, ¿correcto? Si es así, supongo que se Noté que en init
mantiene mtab
. Si mi teoría es correcta, ¿cómo puedo init
escribir en el nodo del dispositivo raíz real mtab
? /etc/mtab
realidad es un enlace simbólico /proc/mounts
, lo que significaría que mtab
el 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
, mtab
contenga el nodo del dispositivo real?
fuente
mount
darootfs 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 ./dev/root
es 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/…Gentoo tiene un parche que hace exactamente esto (asegura que se muestre el dispositivo raíz real). Puede encontrarlo aquí: https://lkml.org/lkml/2013/1/31/574
fuente
En Linux,
/dev/root
si está presente, es un enlace simbólico al dispositivo real creado en el momento del arranque.Puede usar
readlink /dev/root
ocat /proc/cmdline
para ver elroot
parámetro del núcleo arrancado, y así descubrir el dispositivo real detrás de él.Del hombre
dracut(8)
fuente
/dev/root
es un artefacto de las distribuciones basadas en RedHat./dev/root/
. En un viejo CentOS parece ser un nodo de dispositivo real en lugar de un enlace simbólico.base-files
receta de OpenEmbeddedfstab
menciona/dev/root
, por lo que no solo las distribuciones originadas en Red Hat lo están usando.