Jeśli rozumiem twoje pytanie, chcesz wiedzieć, które urządzenie zostało użyte dla danego montażu. W tym celu możesz użyć df
polecenia:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/fedora_greeneggs-root 50G 21G 27G 44% /
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.8G 14M 3.8G 1% /dev/shm
tmpfs 3.8G 984K 3.8G 1% /run
tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
tmpfs 3.8G 3.4M 3.8G 1% /tmp
/dev/sda1 477M 99M 349M 23% /boot
/dev/mapper/fedora_greeneggs-home 402G 184G 198G 49% /home
Aby znaleźć urządzenie, na którym znajduje się określony plik / katalog, podaj plik jako argument df
. Na twoim przykładzie:
$ df -h /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 477M 99M 349M 23% /
Możesz także użyć mount
polecenia:
$ mount | grep '^/dev'
/dev/mapper/fedora_greeneggs-root on / type ext4 (rw,relatime,seclabel,data=ordered)
/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered)
/dev/mapper/fedora_greeneggs-home on /home type ext4 (rw,relatime,seclabel,data=ordered)
Katalog zamontowany dla każdego urządzenia jest trzecim argumentem w wynikach powyżej. Tak /dev/sda1
byłoby w przypadku urządzenia /boot
. Inne urządzenia korzystają z LVM (Logical Volume Management) i należy je zapytać, aby dowiedzieć się, które rzeczywiste urządzenie jest używane przez LVM.
$PWD
(to, co montuję) jest pochowany w szeregu dowiązań symbolicznych, powiązań montowań itp., Wtedy musiałbym rekurencyjnie sprawdzać ścieżkę pod kątem punktów montowania./proc/mounts
zamontowanej „rzeczy”, przynajmniej moim zdaniem nie jest to urządzenie, ale katalog / plik.readlink -f /mnt
pokazuje?readlink -f /mnt
daje/mnt
W Linuksie mamy
findmnt
zutil-linux
dokładnie w tej sprawieZaletą innych rozwiązań jest to, że nadal działa, jeśli ścieżki są zasłonięte przez dowiązania symboliczne lub duplikaty montowań powiązań.
źródło
Najdokładniejszą znaną mi metodą jest użycie wyniku wywołania systemowego lstat (). W szczególności pole st_dev. Istnieje narzędzie wiersza poleceń, stat (1), którego można użyć do wyświetlenia tych informacji. Na przykład dane wyjściowe „stat / etc / issue” na moim laptopie:
Zwróć uwagę na trzeci wiersz, pierwsze pole „Device”. Oto lista 801 godzin. Wartość tę można podzielić na dwa bajty, 8 i 1. Pierwszy bajt jest znany jako liczba główna, drugi bajt jest liczbą podrzędną. Kolejnym krokiem jest ustalenie, jakie urządzenie ma numer 8, numer 1.
Uważam, że konsultacje / proc / partycje są najszybsze. W moim przypadku / proc / partitions ma zawartość:
Z danych wyjściowych wynika raczej, że major 8, minor 1 to sda1. Możemy to potwierdzić za pomocą ls -l / dev / sda1
Zwróć uwagę na 8, 1 przed datestamp.
Ważne jest, aby zrozumieć / pamiętać, że nazwa pliku urządzenia, takiego jak / dev / sda1, jest tylko etykietą. Liczby główne i podrzędne są znaczącymi, ważnymi wartościami pliku urządzenia. Jeśli jesteś ciekawy, sprawdź narzędzie mknod (1) używane do tworzenia plików urządzeń. Mógłbym utworzyć nowy wpis / dev o nazwie aardvark z major 8, minor 18 z następującą składnią:
Następnie mógłbym łatwo go zamontować:
a jeśli spojrzymy na wynik polecenia mount lub zawartość / proc / mounts i zobaczymy:
df -h pokazuje:
... W każdym razie celem tego wszystkiego jest zilustrowanie, że ważnymi szczegółami do identyfikacji urządzenia blokowego są liczby główne i podrzędne - nie etykieta pliku urządzenia - i że użycie wywołania systemowego lstat () jest najlepszym sposobem na sprawdzaj te wartości.
Jako ostatni komentarz, po prostu ponownie przeczytałem twoje pytanie, aby upewnić się, że odpowiadam na nie, i zdałem sobie sprawę, że pytasz, jaka etykieta urządzenia źródłowego pojawi się w / proc / mounts dla podłączenia bind. Byłaby to ta sama etykieta urządzenia źródłowego, która została użyta w pierwotnym wywołaniu mount (2) dla źródła punktu montowania systemu plików dla podłączenia bind. Być może przykład pomoże:
Mam / dev / sdb2 i / dev / aardvark (to samo co powyżej). Obie mają główną 8, mniejszą 18. Uwaga, dwa razy podłączę ten sam system plików. Wykonuję następujące czynności:
Zauważ, że tworzę katalog somedir w / mnt1. Ponieważ jednak / mnt1 i / mnt2 mają ten sam system plików, somedir będzie również dostępny przez / mnt2.
Teraz, jeśli sprawdzimy / proc / mounts, zobaczymy:
Etykieta urządzenia źródłowego w mocowaniach powiązań / foo / ... jest taka sama, jak wartość pierwotnie podana w wywołaniu mount (2) systemu plików. Pamiętaj, że / dev / aardvark i / dev / sdb2 w moim przykładzie są tym samym urządzeniem.
Zdaję sobie sprawę, że właśnie napisałem książkę, a pierwsza połowa w ogóle nie odpowiada na twoje pytanie, ale usunięcie go było marnotrawstwem. Być może pomoże to komuś innemu.
Powodzenia.
PS Należy pamiętać, że niektóre systemy plików są oparte na sieci - jak NFS lub CIFS - lub wirtualne - jak procfs lub sysfs i nie mają źródłowego urządzenia blokującego. Nie wiem, co zostanie zwrócone jako urządzenie na wyjściu statystyki, tylko za to, co jest warte.
źródło
Biorąc pod uwagę następujące typowe punkty montowania:
stat --format %m <path>
wypisze tylko punkt montowania w sposób możliwy do zaokrąglenia (chociaż trzeba sprawdzić kod wyjścia, aby jednoznacznie wykryć błąd uprawnień; podejścia do tabeli montowania wygrywają tutaj):Symlinks zachowują ostrożność jak zwykle:
I oczywiście pamiętaj, aby używać skryptów podczas pisania skryptów. Rozważ ścieżkę punktu montowania ze spacjami i takie:
Jak duże są ty?
Uzupełnianie tabulatorów mojej dystrybucji nawet tego nie robi poprawnie, więc po prostu zastosujemy ten przykładowy punkt montowania ze znakami powrotu karetki, znakami linii i ciągami spacji:
źródło