Wenn ich Ihre Frage verstehe, möchten Sie wissen, welches Gerät für ein bestimmtes Mount verwendet wurde. Hierzu können Sie den df
Befehl verwenden:
$ 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
Um herauszufinden, auf welchem Gerät sich eine bestimmte Datei / ein bestimmtes Verzeichnis befindet, geben Sie die Datei als Argument an df
. Verwenden Sie Ihr Beispiel:
$ df -h /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 477M 99M 349M 23% /
Sie können auch den folgenden mount
Befehl verwenden:
$ 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)
Das für jedes Gerät gemountete Verzeichnis ist das dritte Argument in der obigen Ausgabe. Also für Gerät /dev/sda1
wäre /boot
. Die anderen Geräte verwenden LVM (Logical Volume Management) und müssen weiter abgefragt werden, um zu wissen, welches tatsächliche Gerät von LVM verwendet wird.
$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./proc/mounts
dem "Ding" auftaucht , das gemountet wird, zumindest in meinem Kopf, nicht das Gerät, sondern das Verzeichnis / die Datei.readlink -f /mnt
zeigt?readlink -f /mnt
gibt/mnt
Unter Linux haben wir
findmnt
vonutil-linux
genau dafür gemachtDer Vorteil gegenüber anderen Lösungen besteht darin, dass sie weiterhin funktionieren, wenn Pfade durch Symlinks oder doppelte Bindungsbereitstellungen verdeckt werden.
quelle
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:
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:
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
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:
Dann könnte ich es leicht montieren:
Und wenn wir uns die Ausgabe des Befehls mount oder den Inhalt von / proc / mounts ansehen und Folgendes sehen:
df -h zeigt:
... 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:
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.
Wenn wir nun / proc / mounts überprüfen, sehen wir:
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.
quelle
Angesichts der folgenden typischen Mountpunkte:
stat --format %m <path>
Gibt nur den Einhängepunkt in runder Form aus (obwohl Sie den Exit-Code überprüfen müssen, um einen Berechtigungsfehler eindeutig zu erkennen; hier gewinnen die Einhängepunkt-Ansätze):Symlinks sind wie gewohnt vorsichtig:
Und denken Sie natürlich daran, beim Schreiben von Skripten Anführungszeichen zu verwenden. Betrachten Sie einen Mountpoint-Pfad mit Leerzeichen und so weiter:
Wie groß bist du
Die Tab-Vervollständigung meiner Distribution macht dies nicht einmal richtig. Deshalb werden wir diesen Beispiel-Mountpoint mit Zeilenumbrüchen, Zeilenvorschüben und Leerzeichenfolgen als Platzhalter verwenden:
quelle