Si entiendo su pregunta, desea saber qué dispositivo se utilizó para un montaje determinado. Para esto puedes usar el df
comando:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/fedora_greeneggs-root 50G 21G 27G 44% /
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.8G 14M 3.8G 1% /dev/shm
tmpfs 3.8G 984K 3.8G 1% /run
tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
tmpfs 3.8G 3.4M 3.8G 1% /tmp
/dev/sda1 477M 99M 349M 23% /boot
/dev/mapper/fedora_greeneggs-home 402G 184G 198G 49% /home
Para encontrar en qué dispositivo se encuentra un archivo / directorio en particular, proporcione el archivo como argumento para df
. Usando tu ejemplo:
$ df -h /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 477M 99M 349M 23% /
También puedes usar el mount
comando:
$ mount | grep '^/dev'
/dev/mapper/fedora_greeneggs-root on / type ext4 (rw,relatime,seclabel,data=ordered)
/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered)
/dev/mapper/fedora_greeneggs-home on /home type ext4 (rw,relatime,seclabel,data=ordered)
El directorio montado para cada dispositivo es el tercer argumento en la salida anterior. Entonces, para el dispositivo /dev/sda1
sería /boot
. Los otros dispositivos están haciendo uso de LVM (Logical Volume Management) y tendrían que ser consultados para saber qué dispositivo real está utilizando LVM.
$PWD
(que es lo que estoy montando) está enterrado en una serie de enlaces simbólicos, montajes de enlace, etc., entonces necesitaría examinar recursivamente la ruta para ver los puntos de montaje./proc/mounts
la "cosa" que está montada, al menos en mi mente, no es el dispositivo, es el directorio / archivo.readlink -f /mnt
muestra?readlink -f /mnt
da/mnt
En Linux hemos
findmnt
deutil-linux
hecho exactamente para esteLa ventaja de otras soluciones es que aún funciona si las rutas están oscurecidas por enlaces simbólicos o montajes de enlace duplicados.
fuente
El método más preciso que conozco es utilizar la salida de la llamada al sistema lstat (). Específicamente, el campo st_dev. Hay una utilidad de línea de comando, stat (1) que se puede usar para ver esta información. Por ejemplo, la salida de "stat / etc / issue" en mi computadora portátil:
Observe la tercera línea, primer campo, "Dispositivo". Aquí enumera 801h. Ese valor se puede separar en dos bytes, 8 y 1. El primer byte se conoce como el número mayor, el segundo byte es el número menor. Entonces, el siguiente paso es descubrir qué dispositivo es el mayor 8, el menor 1.
Encuentro consultoría / proc / particiones para ser el más rápido. En mi caso, / proc / partitions tiene el contenido:
Está bastante claro a partir de esa salida que el mayor 8, el menor 1 es sda1. Podemos confirmar esto con un ls -l / dev / sda1
Observe el 8, 1 antes del sello de fecha.
Es importante entender / recordar que el nombre de un archivo de dispositivo como / dev / sda1 es solo una etiqueta. Los números mayores y menores son los valores significativos e importantes del archivo del dispositivo. Si siente curiosidad, consulte la utilidad mknod (1) utilizada para crear archivos de dispositivo. Podría crear una nueva entrada / dev llamada aardvark con mayor 8, menor 18 con la siguiente sintaxis:
Entonces, podría montarlo fácilmente:
y, si miramos la salida del comando mount o el contenido de / proc / mounts y vemos:
df -h muestra:
De todos modos, el objetivo de todo esto es ilustrar que los detalles importantes para identificar un dispositivo de bloque son los números mayores y menores, no la etiqueta del archivo del dispositivo, y que usar la llamada al sistema lstat () es la mejor manera de consultar esos valores.
Como último comentario, acabo de volver a leer su pregunta para asegurarme de que la estaba respondiendo y me di cuenta de que estaba preguntando qué etiqueta de dispositivo fuente aparecería en / proc / montes para un montaje de enlace. Esa sería la misma etiqueta del dispositivo fuente que se usó en la llamada original mount (2) para la fuente del punto de montaje del sistema de archivos para el montaje de enlace. Quizás un ejemplo ayudaría:
Tengo / dev / sdb2 y / dev / aardvark (lo mismo que arriba). Ambos son principales 8, menores 18. Nota, montaré el mismo sistema de archivos dos veces. Hago lo siguiente:
Observe que hago el directorio somedir en / mnt1. Pero como / mnt1 y / mnt2 tienen el mismo sistema de archivos montado, también se podrá acceder a somedir a través de / mnt2.
Ahora, si verificamos / proc / monturas, vemos:
La etiqueta del dispositivo de origen en los montajes de enlace / foo / ... es el mismo que el valor suministrado originalmente en la llamada mount (2) del sistema de archivos. Recuerde, / dev / aardvark y / dev / sdb2 en mi ejemplo son el mismo dispositivo.
Me doy cuenta de que acabo de escribir una novela y la primera mitad realmente no responde a tu pregunta, pero me pareció un desperdicio eliminarla. Quizás ayude a alguien más.
Buena suerte.
PD Tenga en cuenta que algunos sistemas de archivos se basan en la red, como NFS o CIFS, o son virtuales, como procfs o sysfs y no tienen un dispositivo de bloque de origen. No sé qué se devolverá como dispositivo en la salida de estadísticas, solo por lo que vale.
fuente
Dados los siguientes puntos de montaje típicos:
stat --format %m <path>
imprimirá solo el punto de montaje de forma redonda y atrapable (aunque debe verificar el código de salida para detectar inequívocamente un error de permiso; los enfoques de la tabla de montaje ganan aquí):Los enlaces simbólicos se cuidan un poco como de costumbre:
Y, por supuesto, recuerde usar comillas cuando haga scripts. Considere una ruta de punto de montaje con espacios y tal:
¿Qué tan grande es que?
La finalización de la pestaña de mi distribución ni siquiera lo hace bien, por lo que simplemente pondremos comodín este ejemplo de punto de montaje con retornos de carro y saltos de línea y espacios:
fuente