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

110

W szczególności: zrobiłem to sudo mkdir /worki chciałbym sprawdzić, czy rzeczywiście znajduje się na moim dysku twardym i nie jest mapowany na inny dysk.

Jak sprawdzić, gdzie fizycznie znajduje się ten folder?

ripper234
źródło
patrz unix.stackexchange.com/q/149660/4778 findmnt -T /work
ctrl-alt-delor

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.

camh
źródło
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.

Tom Hale
źródło
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.

arielf
źródło
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