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 usr
no 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 --detail
ou 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/md2
está nos dispositivos /dev/sda3
e /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.
df
era tão amável.
lvdisplay
ou lvs
será 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/mapper
conté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.
df
ainda exibirá o mapper
caminho.
findmnt -T /work