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:
File: ‘/etc/issue’
Size: 65 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 1610916043 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
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ść:
major minor #blocks name
8 16 234431064 sdb
8 17 33554432 sdb1
8 18 200875608 sdb2
8 0 500107608 sda
8 1 500106584 sda1
Z danych wyjściowych wynika raczej, że major 8, minor 1 to sda1. Możemy to potwierdzić za pomocą ls -l / dev / sda1
brw-rw---- 1 root disk 8, 1 May 8 05:33 /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ą:
mknod /dev/aardvark b 8 18
Następnie mógłbym łatwo go zamontować:
mount /dev/aardvark /mnt
a jeśli spojrzymy na wynik polecenia mount lub zawartość / proc / mounts i zobaczymy:
/dev/aardvark on /mnt type xfs (rw,relatime,attr2,inode64,noquota)
df -h pokazuje:
/dev/aardvark 192G 154G 38G 81% /mnt
... 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:
mkdir /mnt1 /mnt2 /foo
mount /dev/aardvark /mnt1
mount /dev/sdb2 /mnt2
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.
mkdir /mnt1/somedir
mkdir /foo/left /foo/right
mount -o bind /mnt1/somedir /foo/left
mount -o bind /mnt2/somedir /foo/right
Teraz, jeśli sprawdzimy / proc / mounts, zobaczymy:
/dev/aardvark /mnt1 xfs rw,relatime,attr2,inode64,noquota 0 0
/dev/sdb2 /mnt2 xfs rw,relatime,attr2,inode64,noquota 0 0
/dev/aardvark /foo/left xfs rw,relatime,attr2,inode64,noquota 0 0
/dev/sdb2 /foo/right xfs rw,relatime,attr2,inode64,noquota 0 0
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.
$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.