Risposte:
Il df(1)
comando ti dirà sul dispositivo che è presente un file o una directory:
df /work
Il primo campo ha il dispositivo su cui si trova il file o la directory.
per esempio
$ df /root
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 1043289 194300 795977 20% /
Se il dispositivo è un volume logico, sarà necessario determinare su quale dispositivo di blocco è attivo il volume logico. Per questo, puoi usare il 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)
L'ultima colonna indica che il volume logico usr
nel gruppo di volumi orthanc
( /dev/mapper/orthanc-usr
) si trova sul dispositivo /dev/sda3
. Poiché un gruppo di volumi può estendersi su più volumi fisici, è possibile che siano elencati più dispositivi.
Un altro tipo di dispositivo a blocchi logici è un dispositivo md (Multiple Devices, e un tempo si chiamava meta-disk penso), come /dev/md2
. Per guardare i componenti di un dispositivo md, puoi usare mdadm --detail
o guardare dentro/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
Puoi vedere che /dev/md2
è sui dispositivi /dev/sda3
e /dev/sdb3
.
Esistono altri metodi per annidare i dispositivi a blocchi (fusibili, filesystem di loopback) che disporranno di metodi propri per determinare il dispositivo a blocchi sottostante e puoi anche nidificare più livelli in modo da procedere verso il basso. Dovrai prendere ogni caso così com'è.
df
fosse così accomodante.
lvdisplay
o lvs
sarà tuo amico.
Per uno script, puoi usare:
$ df -P <pathname> | awk 'END{print $1}'
Questo è compatibile con POSIX.
Nelle moderne distribuzioni di Ubuntu c'è un livello aggiuntivo (mappatore del dispositivo) tra il tuo file / directory e il dispositivo. /dev/mapper
contiene collegamenti simbolici che puntano ai dispositivi speciali effettivi. Ad esempio, provando nella directory corrente:
$ 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
Quindi, per ottenere il percorso completo del dispositivo a livello di codice, è possibile utilizzare:
$ realpath $(df . | grep '^/' | cut -d' ' -f1)
Qual è il mio caso:
/dev/dm-1
realpath
fa parte dei coreutils GNU.
df
visualizzerà comunque il mapper
percorso.
findmnt -T /work