¿Cómo se determina el dispositivo raíz si falta /dev/root?

¿Cómo se determina el dispositivo raíz si falta /dev/root?

En la distribución que estoy usando ahora, Arch Linux ARM, Linux se inicia sin un disco RAM inicial, lo que significa que el kernel hace todo el trabajo de montar el sistema de archivos raíz. Este sistema está instalado en una tarjeta SD y tiene un script que necesita determinar el nodo del dispositivo del sistema de archivos en el que reside. Este nodo de dispositivo puede cambiar dependiendo de cómo inicio el dispositivo (por ejemplo, lo conecto a otro dispositivo que ya se está ejecutando).

Puedo determinar el punto de montaje usando df -k --output=target ${0} | sed "1d". Para determinar el dispositivo fuente, ejecuto df -k --output=source ${0} | sed "1d". Si inicié Arch Linux, el resultado de ese último comando dice /dev/root:que no existe. Claro, en algunos sistemas, udev creará un enlace simbólico desde /dev/rootel dispositivo raíz real, pero el mío no hace eso. Ipodríamire el contenido de /proc/cmdlinepero permanece igual durante el tiempo de actividad del kernel, lo que significa que no es confiable.

Cuando obtengo /dev/root, ¿cómo puedo determinar el dispositivo de bloque subyacente real que representa?

Respuesta1

Respuesta delos comentarios aquíes muy simple. Solo llama:

findmnt -n -o SOURCE /

Siempre que findmntesté presente...

Respuesta2

El mountcomando lo mostrará:

mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p'

Respuesta3

encontréesta publicación de blogmuy útil para encontrar el dispositivo raíz y el disco principal en Linux.

Necesitará lsblkinstalar la utilidad, que se proporciona util-linuxen CentOS/RHEL. Por ejemplo, esta variante le dará el nombre del disco del dispositivo raíz:

lsblk -oMOUNTPOINT,PKNAME -rn | awk '$1 ~ /^\/$/ { print $2 }'
sda3

findmntdel mismo paquete le dará el nombre real del dispositivo raíz subyacente:

findmnt -oTARGET,SOURCE -rn /
/ /dev/mapper/vg01-lv_root

El indicador -Ppara ambas utilidades le proporcionará la misma información en el formato adecuado para evalel shell:

findmnt -oTARGET,SOURCE -Pn /
TARGET="/" SOURCE="/dev/mapper/vg01-lv_root"

lsblk -oMOUNTPOINT,PKNAME -Pn | grep 'MOUNTPOINT="/"'
MOUNTPOINT="/" PKNAME="sda3"

Respuesta4

Puede usar stat /e inspeccionar el número mayor/menor del dispositivo o, con la ayuda del rdevcomando, interpretarlo automáticamente.

información relacionada