Frage ln -s vs mount --bind


Gibt es einen praktischen Unterschied zwischen der Verwendung? ln -s oder mount --bind?

Ich möchte einige Ordner auf eine andere Partition verschieben, ohne ihre Daemon-Einstellungen zu ändern, und mich fragen, welchen Ansatz ich wählen sollte.

ich bevorzuge ln -s wie es minimale Einrichtung erfordert (Nr /etc/fstab Modifikationen), aber vielleicht gibt es einen Grund, warum es nicht üblich ist?


19
2017-12-31 12:51


Ursprung




Antworten:


Auf jedenfall. Wenn Sie das ausführen ln -s Sie erstellen einen symbolischen Link, der ein ist Inode verweist auf ein bestimmtes Dateisystemobjekt, weshalb Symlinks Filesysteme durchqueren können und Hardlinks nicht: Hard Links haben keinen eigenen Inode.

Wenn Sie ein Dateisystem mit mounten --bind, du kreierst eine Sekunde Einhängepunkt für ein Gerät oder Dateisystem.

Wenn Sie sich einen Symlink als Redirect vorstellen, stellen Sie sich a --bind eingehängten Dateisystem als ein weiteres Gateway zu Daten erstellen.

Symlinks und Bind Mounts sind ein ganz anderes Ballspiel.

Das --bind mount scheint mir ein bisschen robuster zu sein und es ist wahrscheinlich ein bisschen schneller als mit einem symlink zu arbeiten. Auf der anderen Seite gibt es keine ernsthaften Nachteile bei der Verwendung des Symlinks, da der Performance-Hit klein ist (wenn es überhaupt existiert).

Bearbeiten: 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, benötigt jede neue Datei, die geöffnet wird, einen zusätzlichen Lesevorgang. Einige Recherchen Hier schlägt vor, dass meine Annahme richtig ist. Wenn Sie also eine IO - Anwendung ausführen, sollten Sie die --bind Option zum Anhängen über die Symlink-Lösung.

Der Grund, warum es nicht üblich ist, ist wahrscheinlich die Tatsache, dass ein Symlink in einem sichtbar ist ls, während ein bind mount nur sichtbar ist, wenn man / proc / mounts oder / etc / mtab betrachtet (was der Mount-Befehl tut, wenn er ohne Parameter ausgeführt wird). Ansonsten denke ich, dass es keine Probleme gibt. Ich würde mich allerdings dafür interessieren.

Zusatz: ein weiteres Problem mit ln -s Ist der Pfad für einige Anwendungen dereferenziert, kann dies dazu führen, dass die Anwendung abstürzt, wenn bestimmte Elemente an bestimmten Stellen "erwartet" werden.


25
2017-12-31 13:02



Danke für die durchgehende Erklärung! Eine kleine Nachfolgefrage - was --rbind Parameter tatsächlich macht und wie er genutzt werden kann? Aus dem Handbuch scheint der Parameter unterstützt die Montage der Sub-Mounts in den montierten Baum ist das korrekt? Auch, ist nur - genug, oder muss ich tun - binden dann --rebind? Danke noch einmal. - SyRenity
mount, wenn ohne Argumente aufgerufen, druckt den Inhalt von /etc/mtab, die etwas andere Informationen hat als /proc/mounts. (Im Speziellen, /proc/mounts (Symlink zu /proc/self/mounts) zeigt immer die für den Prozess sichtbaren Mountpoints an. - grawity
@wzzrd - von der FAQ "Das Beste von allem - bearbeite und verbessere die bestehenden Fragen und Antworten!" :) ..dies ist auf keinen Fall eine leichte Antwort - es ist eine kleine Verbesserung mit zusätzlichen Informationen, für die Sie zusätzliche Rep erhalten, wenn / wenn es abgestimmt wird :) - warren
@warren, macht nichts, ich bin nicht sauer :) es ist nur du hast etwas hinzugefügt, von dem ich keine Ahnung habe, also fühlte sich das etwas merkwürdig an;) - wzzrd
@wzzrd - wollte nicht auf irgendwelche Zehen treten :) ..Das App-spezifische Problem ist etwas, das ich mit dem Hauptprodukt, das ich benutze, angetroffen habe - warren


Einer der großen Unterschiede zwischen ln -s und ein Bind-Mount ist, dass Sie ein Bind-Mount verwenden können, um ein schreibgeschütztes Dateisystem zu "modifizieren". Zum Beispiel, wenn eine CD eingelegt ist /mnt/applicationund du wolltest ersetzen /mnt/application/badconfigfile.conf mit einer korrekten Version könnten Sie dies tun:

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

Es wäre nicht möglich, dieselbe Änderung mithilfe eines Symlinks zu beeinflussen, da Sie das Zieldateisystem nicht ändern können.

Dies kann auch gut genutzt werden, wenn Sie eine gemeinsame Software-Suite über NFS (oder eine Art Cluster-Dateisystem) verteilen und hostspezifische Änderungen auf einem System vornehmen möchten. Sie können einfach ein Binde-Mount auf dem Zielsystem verwenden, um die Dateien oder Verzeichnisse nach Bedarf zu überschreiben.


6
2018-02-11 14:39



Kopfschmerzschoner! (seltener Fall, aber erinnernswert für diesen besonderen Moment) - Jonathan Komar


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

vsftpd erlaubt nicht das Durchsuchen eines Verzeichnisses über eine symbolische Verbindung, sondern erlaubt es, wenn es angehängt ist.

Ich weiß nicht, welchen Daemon Sie verwenden, aber es kann sich ähnlich verhalten.


2
2018-02-11 14:31





Man könnte anmerken, dass als Konsequenz der Bindung an ein Reittier, das selbst eine Bindung ist, das spätere Zurückprallen, die ursprüngliche Bindung intakt bleibt, vorausgesetzt, dass alles physisch verbunden 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. Das könnte sein, was Sie wollen oder nicht. Wenn man möchte, dass C B folgt, dann unter Verwendung der gleichen Ziele, d.h. mount -o remount B Coder verwenden --rbind stattdessen. Es gibt kein --rebind Möglichkeit.


1
2018-02-02 07:07