ln -s vs mount --bind

19

Gibt es einen praktischen Unterschied zwischen der Verwendung von ln -soder mount --bind?

Ich möchte einige Ordner auf eine andere Partition verschieben, ohne die Dämoneinstellungen zu ändern, und überlege, wie ich vorgehen soll.

Ich bevorzuge es, ln -sda es ein Minimum an Setup erfordert (keine /etc/fstabÄnderungen), aber vielleicht gibt es einen Grund, warum es nicht üblich ist?

SyRenity
quelle

Antworten:

25

Auf jedenfall. Wenn Sie den Befehl ausführen ln -s, erstellen Sie eine symbolische Verknüpfung, bei der es sich um eine Inode handelt, die auf ein bestimmtes Dateisystemobjekt verweist. Daher können Symlinks Dateisysteme durchqueren und Hardlinks nicht: Hardlinks haben keine eigene Inode.

Wenn Sie ein Dateisystem mit bereitstellen --bind, erstellen Sie einen zweiten Bereitstellungspunkt für ein Gerät oder Dateisystem.

Wenn Sie sich einen Symlink als Umleitung vorstellen, stellen Sie sich ein bereitgestelltes --bindDateisystem als ein weiteres Gateway für Daten vor.

Symlinks und Bind Mounts sind ein ganz anderes Ballspiel.

Die --bindMontierung scheint mir ein bisschen robuster zu sein und ist wahrscheinlich ein bisschen schneller als die Arbeit mit einem Symlink. Auf der anderen Seite gibt es keine gravierenden Nachteile bei der Verwendung des Symlinks, da der Leistungseinbruch gering sein wird (falls überhaupt vorhanden).

Edit : Ich habe darüber nachgedacht, und der Performance-Hit könnte ein bisschen größer sein, als ich ursprünglich dachte. Wenn Sie eine Anwendung haben, die viele verschiedene Dateien liest, ist für jede neu geöffnete Datei ein zusätzlicher Lesevorgang erforderlich. Einige Nachforschungen legen nahe, dass meine Annahme richtig ist. Wenn Sie also eine IO-lastige Anwendung haben, die dort ausgeführt wird, ziehen Sie die --bindOption in Betracht , über der Symlink-Lösung zu mounten.

Der Grund, warum dies nicht häufig vorkommt, ist wahrscheinlich die Tatsache, dass ein Symlink in einem sichtbar ist ls, wohingegen ein Bindungs-Mount nur sichtbar ist, wenn Sie sich / proc / mounts oder / etc / mtab ansehen (was der Befehl mount auch tut, wenn er es ist) ohne Parameter ausgeführt). Abgesehen davon glaube ich nicht, dass es irgendwelche Probleme gibt. Es würde mich allerdings interessieren, ob es welche gibt.

Zusatz : Ein weiteres Problem ln -sbesteht darin, dass bei einigen Anwendungen der Pfad dereferenziert wird und die Anwendung blockiert, wenn bestimmte Elemente an bestimmten Stellen "erwartet" werden.

wzzrd
quelle
Danke für die durchgehende Erklärung! Eine kleine Folgefrage - was macht eigentlich der Parameter --rbind und wie kann er verwendet werden? Aus dem Handbuch geht hervor, dass der Parameter das Mounten der Submounts im gemounteten Baum unterstützt. Ist das richtig? Ist auch nur --rbind genug, oder muss ich --bind dann --rebind tun? Danke noch einmal.
SyRenity
2
mountGibt beim Aufruf ohne Argumente den Inhalt von aus /etc/mtab, der geringfügig andere Informationen enthält als /proc/mounts. (Insbesondere zeigt /proc/mounts(symlink to /proc/self/mounts) immer die Mountpunkte an, die für den Prozess, der es liest, sichtbar sind.)
grawity
1
@wzzrd - aus der FAQ "Das Beste von allem - bearbeite und verbessere die bestehenden Fragen und Antworten!" :) ..dies ist keineswegs eine Kleinigkeit für Ihre Antwort - es ist eine kleine Verbesserung mit zusätzlichen Informationen, für die Sie zusätzliche Repräsentanten erhalten, wenn / wenn es gewählt wird :)
warren
1
@ Warren, egal, ich bin nicht sauer :) Es ist nur, dass Sie etwas hinzugefügt haben, von dem ich keine Ahnung habe, so dass es sich etwas seltsam
anfühlte
2
@wzzrd - wollte nicht auf die Zehen treten :) ..das app-spezifische Problem ist etwas, auf das ich mit dem Hauptprodukt gestoßen bin, das ich verwende
warren
6

Einer der großen Unterschiede zwischen ln -seinem Bind-Mount besteht darin, dass Sie einen Bind-Mount verwenden können, um ein schreibgeschütztes Dateisystem zu "modifizieren". Wenn zum Beispiel eine CD eingelegt /mnt/applicationist und Sie diese durch /mnt/application/badconfigfile.confeine korrekte Version ersetzen möchten, können Sie dies tun:

mount -o bind /path/to/correct/file.conf /mnt/application/badconfigfile.conf

Dieselbe Änderung kann nicht über einen Symlink beeinflusst werden, da Sie das Zieldateisystem nicht ändern können.

Dies kann auch von Vorteil sein, wenn Sie eine gemeinsame Software-Suite über NFS (oder ein Cluster-Dateisystem) verteilt haben und hostspezifische Änderungen auf einem System vornehmen möchten. Sie können einfach einen Bind-Mount auf dem Zielsystem verwenden, um die Dateien oder Verzeichnisse nach Bedarf zu überschreiben.

larsks
quelle
Kopfschmerzen sparen! (seltener Fall, aber es lohnt sich, sich für diesen besonderen Moment zu erinnern)
Jonathan Komar
2

Praktischer Unterschied # 1 für mich zwischen ln-s und mount --bind:

vsftpd erlaubt nicht das Durchsuchen eines Verzeichnisses über einen symbolischen Link, erlaubt jedoch das Mounten.

Ich weiß nicht, welchen Dämon Sie verwenden, aber er kann sich ähnlich verhalten.

petrus
quelle
1

Man könnte bemerken, dass als Folge der Bindung an ein Mount, das selbst eine Bindung ist, die später erneut gebunden wird, die ursprüngliche Bindung intakt bleibt, vorausgesetzt, dass alles physisch in Verbindung bleibt.

Das heißt, wenn Sie A an B binden und B an C binden und dann D an B binden, wird C immer noch an A gebunden. Wenn man möchte, dass C B folgt, muss man die gleichen Ziele verwenden, dh mount -o remount B Coder --rbindstattdessen verwenden. Es gibt keine --rebindOption.

Wiley
quelle