
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/root
el dispositivo raíz real, pero el mío no hace eso. Ipodríamire el contenido de /proc/cmdline
pero 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 findmnt
esté presente...
Respuesta2
El mount
comando 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á lsblk
instalar la utilidad, que se proporciona util-linux
en 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
findmnt
del mismo paquete le dará el nombre real del dispositivo raíz subyacente:
findmnt -oTARGET,SOURCE -rn /
/ /dev/mapper/vg01-lv_root
El indicador -P
para ambas utilidades le proporcionará la misma información en el formato adecuado para eval
el 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 rdev
comando, interpretarlo automáticamente.