Respostas:
O df(1)comando informará o dispositivo em que um arquivo ou diretório está:
df /work
O primeiro campo possui o dispositivo em que o arquivo ou diretório está.
por exemplo
$ df /root
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 1043289 194300 795977 20% /
Se o dispositivo for um volume lógico, será necessário determinar em quais dispositivos de bloco o volume lógico está ativado. Para isso, você pode usar o 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)
A última coluna informa que o volume lógico usrno grupo de volumes orthanc( /dev/mapper/orthanc-usr) está no dispositivo /dev/sda3. Como um grupo de volumes pode abranger vários volumes físicos, você pode achar que possui vários dispositivos listados.
Outro tipo de dispositivo de bloco lógico é um dispositivo md (Multiple Devices, e costumava ser chamado de meta-disco, eu acho), como o /dev/md2. Para examinar os componentes de um dispositivo md, você pode usar mdadm --detailou procurar/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
Você pode ver que /dev/md2está nos dispositivos /dev/sda3e /dev/sdb3.
Existem outros métodos para bloquear dispositivos que podem ser aninhados (fusíveis, sistemas de arquivos de loopback) que possuem seus próprios métodos para determinar o dispositivo de bloco subjacente e você pode até aninhar várias camadas para trabalhar o seu caminho. Você terá que aceitar cada caso como ele vem.
dfera tão amável.
lvdisplayou lvsserá seu amigo.
Para um script, você pode usar:
$ df -P <pathname> | awk 'END{print $1}'
Isso é compatível com POSIX.
Nas distribuições modernas do Ubuntu, há uma camada adicional (mapeador de dispositivos) entre seu arquivo / diretório e o dispositivo. /dev/mappercontém links simbólicos apontando para os dispositivos especiais reais. Por exemplo, tentando no diretório atual:
$ 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
Portanto, para obter o caminho completo do dispositivo programaticamente, você pode usar:
$ realpath $(df . | grep '^/' | cut -d' ' -f1)
Qual é o meu caso imprime:
/dev/dm-1
realpath faz parte do GNU coreutils.
dfainda exibirá o mappercaminho.
findmnt -T /work