Respuestas:
El df(1)
comando le dirá al dispositivo que hay un archivo o directorio en:
df /work
El primer campo tiene el dispositivo en el que se encuentra el archivo o directorio.
p.ej
$ df /root
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 1043289 194300 795977 20% /
Si el dispositivo es un volumen lógico, deberá determinar en qué dispositivo (s) de bloque está el volumen lógico. Para esto, puede usar el lvs(8)
comando:
# df /usr
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/orthanc-usr
8256952 4578000 3259524 59% /usr
# lvs -o +devices /dev/mapper/orthanc-usr
LV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices
usr orthanc -wi-ao 8.00g /dev/sda3(0)
La última columna le dice que el volumen lógico usr
en el grupo de volúmenes orthanc
( /dev/mapper/orthanc-usr
) está en el dispositivo /dev/sda3
. Dado que un grupo de volúmenes puede abarcar múltiples volúmenes físicos, es posible que tenga varios dispositivos en la lista.
Otro tipo de dispositivo de bloque lógico es un dispositivo md (dispositivos múltiples, y solía llamarse meta-disco, creo), como /dev/md2
. Para ver los componentes de un dispositivo md, puede usar mdadm --detail
o mirar/proc/mdstat
# df /srv
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/md2 956626436 199340344 757286092 21% /srv
# mdadm --detail /dev/md2
...details elided...
Number Major Minor RaidDevice State
0 8 3 0 active sync /dev/sda3
1 8 19 1 active sync /dev/sdb3
Puede ver que /dev/md2
está en los dispositivos /dev/sda3
y /dev/sdb3
.
Hay otros métodos que pueden anidar dispositivos de bloque (sistemas de archivos de fusibles, bucle invertido) que tendrán sus propios métodos para determinar el dispositivo de bloque subyacente, e incluso puede anidar varias capas para que tenga que trabajar hacia abajo. Tendrás que tomar cada caso como viene.
df
fuera tan complaciente.
lvdisplay
o lvs
será tu amigo
Para un script, puede usar:
$ df -P <pathname> | awk 'END{print $1}'
Esto es compatible con POSIX.
En las distribuciones modernas de Ubuntu hay una capa adicional (mapeador de dispositivos) entre su archivo / directorio y el dispositivo. /dev/mapper
contiene enlaces simbólicos que apuntan a los dispositivos especiales reales. Por ejemplo, probando el directorio actual:
$ df . | grep '^/' | cut -d' ' -f1
/dev/mapper/kubuntu--vg-root
$ ls -l /dev/mapper/kubuntu--vg-root
lrwxrwxrwx 1 root root 7 Nov 22 18:02 /dev/mapper/kubuntu--vg-root -> ../dm-1
Entonces, para obtener la ruta completa del dispositivo mediante programación, puede usar:
$ realpath $(df . | grep '^/' | cut -d' ' -f1)
¿Cuál es mi caso imprime:
/dev/dm-1
realpath
es parte de GNU coreutils.
df
aún mostrará el mapper
camino.
findmnt -T /work