¿Existe un comando simple que tome el nodo del dispositivo de un disco como entrada y me diga dónde (y si) está montado ese disco? ¿Es posible obtener el punto de montaje por sí mismo, para poder pasarlo a otro comando?
Estoy trabajando en un sistema en vivo Debian Squeeze con una instalación mínima (puedo instalar paquetes adicionales si es necesario).
Respuesta aceptada:
Bajo Linux, puede obtener información del punto de montaje directamente desde el kernel en /proc/mounts
. El mount
programa registra información similar en /etc/mtab
. Las rutas y opciones pueden ser diferentes, como /etc/mtab
representa lo que mount
pasado al núcleo mientras que /proc/mounts
muestra los datos como se ve dentro del kernel. /proc/mounts
siempre está actualizado mientras que /etc/mtab
podría no serlo si /etc
era de solo lectura en algún momento que no esperaban los scripts de arranque. El formato es similar a /etc/fstab
.
En ambos archivos, el primer campo separado por espacios en blanco contiene la ruta del dispositivo y el segundo campo contiene el punto de montaje.
awk -v needle="$device_path" '$1==needle {print $2}' /proc/mounts
o si no tienes awk:
grep "^$device_path " /proc/mounts | cut -d ' ' -f 2
Hay una serie de casos extremos en los que es posible que no obtenga lo que espera. Si el dispositivo se montó a través de una ruta diferente en /dev
que designa el mismo dispositivo, no lo notará de esta manera. En /proc/mounts
, los montajes de unión son indistinguibles del original. Puede haber más de una coincidencia si un punto de montaje sombrea a otro (esto es inusual).
En /proc/self
o /proc/$pid
, hay un mounts
por proceso archivo que imita el archivo global. La información de montaje puede variar entre procesos, por ejemplo debido a chroot
. Hay un archivo adicional llamado mountinfo
que tiene un formato diferente e incluye más información, en particular los números mayor y menor del dispositivo. De la documentación:
36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue
(1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11)
(1) mount ID: unique identifier of the mount (may be reused after umount)
(2) parent ID: ID of parent (or of self for the top of the mount tree)
(3) major:minor: value of st_dev for files on filesystem
(4) root: root of the mount within the filesystem
(5) mount point: mount point relative to the process's root
(6) mount options: per mount options
(7) optional fields: zero or more fields of the form "tag[:value]"
(8) separator: marks the end of the optional fields
(9) filesystem type: name of filesystem of the form "type[.subtype]"
(10) mount source: filesystem specific information or "none"
(11) super options: per super block options
Entonces, si está buscando un dispositivo por número, puede hacerlo así:
awk -v dev="$major:minor" '$3==dev {print $5}'
awk -v dev="$(stat -L -c %t:%T /dev/block/something)" '$3==dev {print $5}'