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

8

Was ist der Unterschied zwischen:

ln -s /mnt/extra/home /

und

mkdir /home
mount --rbind /mnt/extra/home /home
NerdOfLinux
quelle
1
lnmacht Links; insbesondere ln -smacht symbolische Verknüpfungen. mountHängt ein Dateisystem in ein Verzeichnis ein. Sie haben nichts gemeinsam.
AlexP
mount --rbind /mnt/extra/home
Ist
Geben

Antworten:

13

mount --rbindmacht einen rekursiven Bind-Mount; Das heißt, auf die angehängte Dateisystemhierarchie /mnt/extra/homekann auch über zugegriffen werden /home.

In der Praxis besteht der Hauptunterschied zwischen der ln -sLösung und der mount --rbindLösung darin, dass with ln -s /homeein Symlink ist, während with mount --rbindein Verzeichnis ist. dies wirkt sich Werkzeuge wie find, df, test/ [usw.

Die auch ln -sfehl , wenn /homevorhanden, während mount --rbindfehlschlägt, wenn es nicht vorhanden ist , oder es ist kein leeres Verzeichnis.

Marks Kommentar unten ist ebenfalls wichtig: ln -sBenötigt ein beschreibbares Dateisystem, auf dem der Symlink erstellt werden kann.

AlexP
quelle
7
Der große Unterschied besteht darin, dass ln -sdas Dateisystem geändert wird, dies mount --rbindjedoch nicht. Dies bedeutet, dass Sie das Home-Verzeichnis auf einem schreibgeschützten Stammverzeichnis (z. B. einer Boot-CD) bereitstellen können, jedoch keinen symbolischen Link darauf erstellen können.
Mark
3
--bindund es ist --rbindmir egal, ob meine Zielverzeichnisse leer sind. Sie werden einfach "über" den vorhandenen Dateien
bereitgestellt
7

In diesem Fall funktionieren sowohl ein Bind Mount als auch ein symbolischer Link für die meisten Zwecke ähnlich, sie weisen jedoch wichtige Unterschiede auf.

Eine symbolische Verbindung ist etwas leichter. Sie können Hunderte oder Tausende von symbolischen Links haben, ohne dass dies ein großes Verwaltungsproblem darstellt. Sie befinden sich im Dateisystem und erfordern keine spezielle Einrichtung auf Systemebene.

Symbolische Links können mit Tools wie cp und rsync gesichert und korrekt kopiert werden. Das heißt, die Tools können die symbolische Verknüpfung erkennen und kopieren, um sicherzustellen, dass bei der Wiederherstellung an einer anderen Stelle die Verknüpfung wiederhergestellt wird und auf das richtige Ziel verweist. Es wird alles standardmäßig "richtig" funktionieren. Im Gegensatz dazu wird beim Sichern oder Kopieren eines Bind-Mount das Mount transparent behandelt, wodurch die Dateien selbst kopiert werden. Dies kann zu Duplikaten führen, wenn Sie dieselben Dateien auch an ihrem anderen Speicherort erhalten, und erfordert zusätzliche Arbeit, wenn Sie möchten um den Bind Mount am Ziel zu replizieren.

Symbolische Links können von jedem Benutzer geändert oder gelöscht werden, der Zugriff auf den Link hat. Daher ist es einfach, ihn nur als Superuser zu verwenden oder für einen bestimmten Benutzer zu öffnen. Bindungshalterungen können nur vom Superuser eingerichtet oder geändert werden.

Wenn dies wie eine leuchtende Bestätigung symbolischer Links klingt, ist es dies. Sie sind eine einfachere Möglichkeit, Dateien und Verzeichnisse zu verknüpfen. Sie würden Bindungs-Mounts nur für Situationen verwenden, in denen eine symbolische Verknüpfung nicht funktioniert. Dies sind möglicherweise weniger Situationen als Sie denken. Die meisten Tools, einschließlich Sicherungs- und Synchronisierungstools, weisen ein sinnvolles Standardverhalten für symbolische Links auf, und ihre Behandlung symbolischer Links kann möglicherweise konfiguriert werden. Bindungs-Mounts sind für solche Tools transparent, sodass Sie diese Flexibilität verlieren und möglicherweise das sinnvolle Verhalten verlieren (z. B. wie oben erwähnt, Duplizieren von Verzeichnissen in Ihren Backups).

thomasrutter
quelle
0

Ein weiterer Unterschied besteht darin, dass die symbolische Verknüpfung symbolisch ist , dh nur auf einen Pfad verweist - eine Zeichenfolge - und jedes Mal dereferenziert wird, wenn Sie ein Unterverzeichnis / eine Datei im Zielpfad öffnen. Im Gegensatz dazu mount --rbindverhält es sich eher wie eine feste Verbindung, bei der der Pfad nicht bei jeder Dereferenzierung neu bewertet wird.

Dies macht einen Unterschied in einigen Szenarien wie chroot. ZB vsftpd chroot s in das Ausgangsverzeichnis des FTP-Benutzerkontos, in dem Sie sich anmelden. Wenn Sie also einen Symlink in dieses Verzeichnis einfügen, vsftpdkann er nicht dereferenziert werden, und das Ziel ist daher nicht über FTP erreichbar. Wenn Sie dies stattdessen tun mount --rbind, vsftpdgreifen Sie einfach auf diesen Teilbaum zu, als wäre er wirklich vorhanden, ähnlich wie wenn Sie dort eine Datei fest verknüpft hätten.

Ruslan
quelle