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:
File: ‘/etc/issue’
Size: 65 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 1610916043 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
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:
major minor #blocks name
8 16 234431064 sdb
8 17 33554432 sdb1
8 18 200875608 sdb2
8 0 500107608 sda
8 1 500106584 sda1
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
brw-rw---- 1 root disk 8, 1 May 8 05:33 /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:
mknod /dev/aardvark b 8 18
Entonces, podría montarlo fácilmente:
mount /dev/aardvark /mnt
y, si miramos la salida del comando mount o el contenido de / proc / mounts y vemos:
/dev/aardvark on /mnt type xfs (rw,relatime,attr2,inode64,noquota)
df -h muestra:
/dev/aardvark 192G 154G 38G 81% /mnt
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:
mkdir /mnt1 /mnt2 /foo
mount /dev/aardvark /mnt1
mount /dev/sdb2 /mnt2
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.
mkdir /mnt1/somedir
mkdir /foo/left /foo/right
mount -o bind /mnt1/somedir /foo/left
mount -o bind /mnt2/somedir /foo/right
Ahora, si verificamos / proc / monturas, vemos:
/dev/aardvark /mnt1 xfs rw,relatime,attr2,inode64,noquota 0 0
/dev/sdb2 /mnt2 xfs rw,relatime,attr2,inode64,noquota 0 0
/dev/aardvark /foo/left xfs rw,relatime,attr2,inode64,noquota 0 0
/dev/sdb2 /foo/right xfs rw,relatime,attr2,inode64,noquota 0 0
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.
$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.