Die genaueste Methode, die mir bekannt ist, ist die Verwendung der Ausgabe des Systemaufrufs lstat (). Insbesondere das Feld st_dev. Es gibt ein Befehlszeilendienstprogramm, stat (1), mit dem diese Informationen angezeigt werden können. Zum Beispiel die Ausgabe von "stat / etc / issue" auf meinem Laptop:
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)
Beachten Sie die dritte Zeile im ersten Feld "Gerät". Hier sind 801h aufgelistet. Dieser Wert kann in zwei Bytes (8 und 1) unterteilt werden. Das erste Byte ist als Hauptzahl bekannt, das zweite Byte als Nebenzahl. Der nächste Schritt ist also herauszufinden, welches Gerät Major 8, Moll 1 ist.
Ich finde Consulting / Proc / Partitions am schnellsten. In meinem Fall hat / proc / partitions den Inhalt:
major minor #blocks name
8 16 234431064 sdb
8 17 33554432 sdb1
8 18 200875608 sdb2
8 0 500107608 sda
8 1 500106584 sda1
Aus dieser Ausgabe geht ziemlich klar hervor, dass Dur 8, Moll 1 sda1 ist. Wir können dies mit ls -l / dev / sda1 bestätigen
brw-rw---- 1 root disk 8, 1 May 8 05:33 /dev/sda1
Beachten Sie die 8, 1 vor dem Datumsstempel.
Es ist wichtig zu verstehen, dass der Name einer Gerätedatei wie / dev / sda1 nur eine Bezeichnung ist. Die Haupt- und Nebenzahlen sind die signifikanten, wichtigen Werte der Gerätedatei. Wenn Sie neugierig werden, schauen Sie sich das Dienstprogramm mknod (1) an, mit dem Sie Gerätedateien erstellen. Ich könnte einen neuen / dev-Eintrag namens aardvark mit Dur 8, Moll 18 mit der folgenden Syntax erstellen:
mknod /dev/aardvark b 8 18
Dann könnte ich es leicht montieren:
mount /dev/aardvark /mnt
Und wenn wir uns die Ausgabe des Befehls mount oder den Inhalt von / proc / mounts ansehen und Folgendes sehen:
/dev/aardvark on /mnt type xfs (rw,relatime,attr2,inode64,noquota)
df -h zeigt:
/dev/aardvark 192G 154G 38G 81% /mnt
... Auf jeden Fall geht es darum zu veranschaulichen, dass die wichtigsten Details zur Identifizierung eines Blockgeräts die Major- und Minor-Nummern sind - nicht die Bezeichnung der Gerätedatei - und dass die Verwendung des Systemaufrufs lstat () der beste Weg dazu ist Fragen Sie diese Werte ab.
Als letzten Kommentar habe ich Ihre Frage noch einmal gelesen, um sicherzugehen, dass ich sie beantwortet habe, und festgestellt, dass Sie gefragt haben, welche Bezeichnung für das Quellgerät in / proc / mounts für ein Bind-Mount angezeigt werden soll. Dies wäre die gleiche Bezeichnung für das Quellgerät, die im ursprünglichen Aufruf von mount (2) für die Dateisystem-Mountpoint-Quelle für den Bind-Mount verwendet wurde. Vielleicht würde ein Beispiel helfen:
Ich habe / dev / sdb2 und / dev / aardvark (das gleiche wie oben). Sie sind beide Dur 8, Moll 18. Beachten Sie, dass ich das gleiche Dateisystem zweimal mounten werde. Ich mache folgendes:
mkdir /mnt1 /mnt2 /foo
mount /dev/aardvark /mnt1
mount /dev/sdb2 /mnt2
Beachten Sie, dass ich das Verzeichnis somedir in / mnt1 mache. Da für / mnt1 und / mnt2 dasselbe Dateisystem aktiviert ist, ist somedir auch über / mnt2 erreichbar.
mkdir /mnt1/somedir
mkdir /foo/left /foo/right
mount -o bind /mnt1/somedir /foo/left
mount -o bind /mnt2/somedir /foo/right
Wenn wir nun / proc / mounts überprüfen, sehen wir:
/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
Die Bezeichnung des Quellgeräts in den Bindungs-Mounts / foo / ... entspricht dem Wert, der ursprünglich im Dateisystem-Mount (2) -Aufruf angegeben wurde. Denken Sie daran, dass / dev / aardvark und / dev / sdb2 in meinem Beispiel dasselbe Gerät sind.
Mir ist klar, dass ich gerade einen Roman geschrieben habe und die erste Hälfte Ihre Frage nicht wirklich beantwortet hat, aber es schien mir eine Verschwendung, ihn zu löschen. Vielleicht hilft es jemand anderem.
Viel Glück.
PS Denken Sie daran, dass einige Dateisysteme netzwerkbasiert sind (z. B. NFS oder CIFS) oder virtuell (z. B. procfs oder sysfs) und über kein Quellblockgerät verfügen. Ich weiß nicht, was als Gerät in der Statistikausgabe zurückgegeben wird, nur für das, was es wert ist.
$PWD
(das ist, was ich einhänge) in einer Reihe von Symlinks, Bindungs-Reittieren usw. begraben ist, müsste ich den Pfad rekursiv auf Einhängepunkte untersuchen.