Jak znaleźć, na którym urządzeniu fizycznym znajduje się folder?


Odpowiedzi:


148

df(1)Komenda powie urządzenie, że plik lub katalog jest na:

df /work

Pierwsze pole zawiera urządzenie, na którym znajduje się plik lub katalog.

na przykład

$ df /root
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              1043289    194300    795977  20% /

Jeśli urządzenie jest woluminem logicznym, musisz określić, które urządzenia blokowe są włączone. W tym celu możesz użyć lvs(8)polecenia:

# 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)

Ostatnia kolumna mówi, że wolumin logiczny usrw grupie woluminów orthanc( /dev/mapper/orthanc-usr) znajduje się na urządzeniu /dev/sda3. Ponieważ grupa woluminów może obejmować wiele woluminów fizycznych, może się okazać, że na liście znajduje się wiele urządzeń.

Innym rodzajem logicznego urządzenia blokowego jest urządzenie md (Multiple Devices, a kiedyś tak zwane meta-disk), takie jak /dev/md2. Aby spojrzeć na komponenty urządzenia MD, możesz użyć mdadm --detaillub zajrzeć/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

Widać /dev/md2to na urządzeniach /dev/sda3i /dev/sdb3.

Istnieją inne metody zagnieżdżania urządzeń blokowych (bezpieczniki, systemy plików z pętlą zwrotną), które będą miały własne metody określania leżących u ich podstaw urządzeń blokowych, a nawet zagnieżdżanie wielu warstw, więc trzeba będzie zejść na dół. Musisz wziąć każdą skrzynkę, jak tylko się pojawi.


4
+1. Ciekawy. Nie wiedziałem, że dfbył tak przychylnie nastawiony.
Faheem Mitha

OK, zrobiłem to i dostałem / dev / mapper / fun-root jako mój system plików. Co teraz? (Mój komputer nazywa się „zabawa”)
ripper234

1
Więc może używasz LVM? lvdisplaylub lvsbędzie twoim przyjacielem.
phunehehe

5
Tak byłem pod wrażeniem tej odpowiedzi, że użyłem jej jako podstawy polecenia „rawdev”, które zwraca podstawowe urządzenia ścieżki lub partycji, nawet w przypadkach zagnieżdżenia LVM i / lub MD. Jest dostępny na Github: github.com/BMDan/rawdev .
BMDan,

5

Do skryptu możesz użyć:

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

Jest to zgodne z POSIX.


Działa przez większość czasu, jednak jeśli <pathname> znajduje się w migawce btrfs, zgłasza „-”.
Eliptyczny widok

1

W nowoczesnych dystrybucjach Ubuntu istnieje dodatkowa warstwa (mapowanie urządzeń) między twoim plikiem / katalogiem a urządzeniem. /dev/mapperzawiera dowiązania symboliczne wskazujące rzeczywiste urządzenia specjalne. Na przykład próbowanie w bieżącym katalogu:

$ 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

Aby programowo uzyskać pełną ścieżkę urządzenia, możesz użyć:

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

Jakie są moje wydruki:

/dev/dm-1

realpath jest częścią jądra GNU.


Fajnie, ale kiedy przydatna jest pełna ścieżka? dfnadal wyświetla mapperścieżkę.
Dan Dascalescu

@DanDascalescu fair point. Może być przydatny, gdy / jeśli chcesz poznać rzeczywiste urządzenie sprzętowe, którego szukałem, gdy zadałem to pytanie.
arielf
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.