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


Respostas:


148

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.


4
+1. Interessante. Eu não sabia que dfera tão amável.
Faheem Mitha

OK, fiz isso e obtive / dev / mapper / fun-root como meu sistema de arquivos. O que agora? (O nome do meu computador é 'diversão')
ripper234

11
Então, talvez você esteja usando LVM? lvdisplayou lvsserá seu amigo.
phunehehe

5
Fiquei tão impressionado com essa resposta que a usei como base para um comando "rawdev", que retorna o (s) dispositivo (s) subjacente (s) de um caminho ou partição, mesmo nos casos em que o LVM e / ou o MD estão aninhados. Está disponível no Github: github.com/BMDan/rawdev .
BMDan

5

Para um script, você pode usar:

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

Isso é compatível com POSIX.


Funciona na maioria das vezes, no entanto, se o <pathname> estiver em um instantâneo btrfs, esse relatório será '-'.
Visualização elíptica

1

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.


Bom, mas quando o caminho completo é útil? dfainda exibirá o mappercaminho.
Dan Dascalescu

@DanDascalescu fair point. Pode ser útil quando / se você quiser conhecer o dispositivo de hardware real que eu procurava ao responder a essa pergunta.
arielf 30/01
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.