Was ist der Unterschied zwischen ln -s und mount --bind?


36

Ich versuche den Unterschied zwischen der Verwendung von ln -sund zu verstehen mount --bind. Im Basisszenario kann ich beide verwenden, um von einem anderen Ort auf ein Verzeichnis zuzugreifen. In welchen Szenarien verhalten sich die beiden unterschiedlich?


7
Ich sollte davor warnen , rm -rauf ein mount --bind. Mit a lnwird die Verknüpfung entfernt, während für a --bindderselbe Effekt wie beim Ausführen von rm -rauf dem Ziel erzielt wird. Nicht gut, wie ich kurz vor dem Wiederaufbau eines meiner Server fand ...
Mark K Cowan

@ MarkKCowan Das ist wahr, es sei denn, Sie haben einen festen Link erstellt .
JohnnyQ

@JohnnyQ Verzeichnisse können nicht fest verknüpft werden
Mark K Cowan

Antworten:


33

Sie werden sich in mindestens zwei Fällen unterschiedlich verhalten:

  • Wenn sich das Linkziel in einer Chroot außerhalb der Chroot befindet, ist der Link tot. Ein Bindemount ist weiterhin verfügbar.
  • Mehrere Programme können zwischen symbolischen Links und tatsächlichen Verzeichnissen oder Dateien unterscheiden. Nur wenige (falls vorhanden) können zwischen einem Verzeichnis oder einer Datei und dem darauf gemounteten Verzeichnis unterscheiden. Dies erstreckt sich auch auf symbolische Verknüpfungen zu etwas ( A), auf dem etwas anderes ( B) montiert ist. Der Link zeigt den Inhalt von mount target ( B) anstelle des Originals ( A).

Sie können auch binden, dass ein Verzeichnis oder eine Datei in ein vorhandenes Verzeichnis oder eine Datei eingebunden wird, wodurch der ursprüngliche Inhalt maskiert wird (sodass auf den ursprünglichen Inhalt nur zugegriffen werden kann, wenn das Original an einer anderen Stelle eingebunden wurde). Für eine symbolische Verknüpfung muss das Original verschoben oder gelöscht werden.


16

Nun, ln -serzeugt einen symbolischen Link, während mount --bindschafft eine Halterung.

Eine symbolische Verknüpfung ist ein besonderer Dateityp. Wenn Sie dies tun ln -s /var/target /var/link, /var/linkwird eine Datei erstellt, die den Pfad " /var/target" enthält. Der einzige Unterschied zwischen einer symbolischen Verknüpfung und einer normalen Datei besteht darin, dass bei dem Versuch eines Programms, eine Operation an einer symbolischen Verknüpfung auszuführen, die Operation normalerweise auf dem Ziel anstatt auf der Datei ausgeführt wird. Wenn Sie dies jetzt tun ls /var/link, lsversucht das Programm, eine Verzeichnisliste für abzurufen /var/link, erhält jedoch /var/targetstattdessen eine Verzeichnisliste für .

Symbolische Links sind jedoch immer noch nur Dateien. Sie können umbenannt und gelöscht werden und der ganze Jazz. Beachten Sie, dass Sie keine symbolische Verknüpfung (oder eine normale Datei) erstellen können, die aufgerufen wird, /var/linkwenn bereits eine Datei aufgerufen wurde /var/link. Sie müssten es zuerst loswerden.

Ein Mount ist keine Datei; Es ist eine Aufzeichnung, die der Kernel im Gedächtnis behält. Wenn Sie dies tun mount --bind /var/target /var/mount, wird der Kernel die Tatsache aufzeichnen, dass /var/mountjetzt ein neuer Name für ist /var/target. (Ich kenne die Details nicht; insbesondere weiß ich nicht, ob beim Mounten von etwas in einem Unterverzeichnis von /var/targetauch etwas angezeigt wird /var/mount, oder warum oder warum nicht. Änderungen an dieser Antwort wären wünschenswert.) Also jetzt Wenn Sie dies tun ls /var/mount, geschieht dasselbe wie bei Ihnen ls /var/target, weil /var/mountund /var/targetdasselbe Verzeichnis.

Reittiere sind keine Dateien. Ich weiß nicht, was passieren würde, wenn Sie versuchen, umzubenennen oder zu löschen /var/mount. Beachten Sie, dass Sie nichts anhängen können, es /var/mount sei denn, es gibt bereits ein Verzeichnis unter /var/mount.


1
Ich habe mount --bind nicht verwendet, aber ich bezweifle, dass es das Verhalten eines Symlinks wie replizieren kann ln -s ../../myfile .. Wenn Sie das in ein anderes Verzeichnis verschieben, verweist es auf einen anderen Ort, da es sich um einen relativen Link handelt. Dies kann nützlich sein, wenn Sie einen Unterbaum sichern müssen und die Verknüpfungen in der Sicherung weiterhin funktionieren.
Joe

10

Zusätzlich würde ln -s einen Neustart überleben. mount --bind würde dies nicht tun, es sei denn, Sie bearbeiten / etc / fstab, um es dauerhaft zu machen.


2

Neben den anderen Antworten. Das System erlaubt keine feste Verbindung zum Verzeichnis:

# ln mydir mpoint
ln: `mydir': hard link not allowed for directory

Mit dem Mount können Sie hard link-like machen, dh zwei oder mehr Namen für dieselbe Inode :

# mount -B mydir/ mpoint/
# ls -d -i *
807175  mpoint/  807175  mydir/

(Man findet es hilfreich für Snapshot-Backups mit der alten Version von rsync.)

Beachten Sie außerdem, dass diese Bereitstellung nicht vollständig ist:

# mount -B -oro mydir/ mpoint/
mount: warning: mpoint/ seems to be mounted read-write.
# mount | grep mpoint
/root/learn/mydir on /root/learn/mpoint type none (rw,bind)

Daher kann der Mount immer noch gelesen und geschrieben werden, auch wenn ich nach der Option ro gefragt habe (schreibgeschützt).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.