En Linux, puede obtener información del punto de montaje directamente desde el núcleo /proc/mounts
. El mount
programa registra información similar en /etc/mtab
. Las rutas y opciones pueden ser diferentes, ya que /etc/mtab
representa lo que mount
pasó al núcleo mientras que /proc/mounts
muestra los datos tal como se ven dentro del núcleo. /proc/mounts
siempre está actualizado, mientras que /etc/mtab
podría no serlo si /etc
fuera de solo lectura en algún momento que los scripts de arranque no esperaban. 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 varios 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 /dev
que designa el mismo dispositivo, no lo notará de esta manera. En /proc/mounts
, las monturas de unión no se pueden distinguir 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
archivo por proceso 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 mayores y menores 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}'
Gilles 'SO- deja de ser malvado'
fuente
udisks
enlace simbólico (en / dev / disk / by-label / ...). Pero puedo resolver a un nodo de dispositivo usandoreadlink -f
. Me gusta la/proc/mounts
idea, creo que podría ser un poco más confiable que/etc/mtab
.mountinfo
. Llamestat
para obtener los números de dispositivo (vea mi respuesta actualizada, olvidé incluir el comando anteriormente).-d " "
opcióncut
en esegrep
comando.findmnt
ylsblk
comandos dedicados que hacen el trabajo duro (con mayor fuerza) para ustedEn Linux, ahora puede usar el
findmnt
comando desdeutil-linux
(desde la versión 2.18):O
lsblk
(también deutil-linux
, desde 2.19):Ese también es útil para encontrar todo el sistema de archivos montado bajo un dispositivo específico (disco o partición ...):
Para obtener solo el punto de montaje:
Lo anterior
findmnt
vuelve con un estado de salida de falla si el dispositivo no está montado, nolsblk
.Asi que:
fuente
El
mount
comando sin argumentos enumerará todos los sistemas de archivos actualmente montados; puedegrep
hacerlo para el disco que desea (ogrep
/etc/mtab
, que es el archivomount
lee la información de):fuente
grep ${NODE} /etc/mtab | cut -d ' ' -f 2
debería hacerlo.grep ^"${NODE}[[:space:]]\+" /etc/mtab | cut -d ' ' -f 2"
es mucho menos frágil ...Sí. Puede ver Mostrar solo puntos de montaje interesantes / Filtrar tipos no interesantes o Directorios de listados debajo de
/
No están bajo el mismo punto de montaje para algún uso de ejemplo, pero también hay un breve resumen a continuación. El comando que está preguntando esfindmnt
(aunquelsblk
también podría servir) :Ahora, como puedes ver,
/dev/sda1
está montado/esp
. Me pregunto si también está montado en otro lugar.Ajá. Veo. También se
--bind
monta una subcarpeta sobre el arranque. Okay...Nada. ¿Que demonios?
Ohhh ... Bueno, eso está bien. Hmmm ...
Oh, sí, eso es realmente lindo.
Ahora volvamos a colocar sda1 donde pertenece e intentemos eso de nuevo ...
¿Pero dónde encontré este comando mágico?
fuente
No conozco una manera limpia y simple de detectar si un nodo de dispositivo
/dev
está montado o no . Sin embargo, esto es lo que puedo ofrecer. Maneja dispositivos montados directamente (/dev/sda1
) y dispositivos montados por UUID (/dev/disk/by-uuid/aa4e7b08-6547-4b5a-85ad-094e9e1af74f
). Se rompe si los nombres de sus dispositivos contienen espacios en blanco.La función escribe la entrada desde
/proc/mounts
en stdout si se encuentra, también establece el estado de salida en 0. De lo contrario, el estado de salida es 1.fuente
Simplemente ejecute el siguiente comando:
fuente