Como encontro em qual dispositivo físico uma pasta está localizada?

95

Especificamente: eu fiz sudo mkdir /work e gostaria de verificar se ele realmente está no meu disco rígido e não mapeado para outra unidade.

Como posso verificar onde esta pasta está fisicamente localizada?

    
por ripper234 14.04.2011 / 12:21

3 respostas

131

O comando df(1) informará o dispositivo em que um arquivo ou diretório está:

df /work

O primeiro campo tem 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, você precisará determinar em qual (is) dispositivo (s) de bloco o volume lógico está ligado. Para isso, você pode usar o comando lvs(8) :

# 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 descobrir que possui vários dispositivos listados.

Outro tipo de dispositivo de bloco lógico é um dispositivo md (Dispositivos Múltiplos, e costumava ser chamado de disco meta), como /dev/md2 . Para ver os componentes de um dispositivo md, você pode usar mdadm --detail ou procurar em /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 que os dispositivos de bloco podem ser aninhados (fusível, sistemas de arquivos de loopback) que terão seus próprios métodos para determinar o dispositivo de bloco subjacente, e você pode até aninhar várias camadas para que você tenha que trabalhar. Você terá que tomar cada caso como se trata.

    
por 14.04.2011 / 12:28
3

Para um script, você pode usar:

$ df -P <pathname> | awk 'END{print $1}'

Isso é compatível com POSIX.

    
por 05.01.2018 / 06:27
0

Nas distribuições modernas do Ubuntu, há uma camada adicional (mapeador de dispositivos) entre o 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

Para obter o caminho completo do dispositivo programaticamente, você pode usar:

$ echo $(realpath $(df . | grep '^/' | cut -d' ' -f1))

Qual é o meu caso impressões:

/dev/dm-1

realpath faz parte do GNU coreutils.

    
por 23.11.2018 / 23:52