it-swarm.com.de

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

Was ist der Unterschied zwischen:

ln -s /mnt/extra/home /

und

mkdir /home
mount --rbind /mnt/extra/home /home
8
NerdOfLinux

mount --rbind macht ein rekursives Bind-Mount; Das heißt, auf die auf /mnt/extra/home bereitgestellte Dateisystemhierarchie kann auch über /home zugegriffen werden.

In der Praxis besteht der Hauptunterschied zwischen der ln -s-Lösung und der mount --rbind-Lösung darin, dass mit ln -s/home ein Symlink und mit mount --rbind ein Verzeichnis ist. Dies betrifft Werkzeuge wie find, df, test/[ usw.

Außerdem schlägt der ln -s fehl, wenn /home vorhanden ist, während mount --rbind fehlschlägt, wenn er nicht vorhanden ist, oder wenn es sich nicht um ein leeres Verzeichnis handelt.

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

12
AlexP

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

Ein symbolischer Link ist etwas leichter. Sie können Hunderte oder Tausende symbolischer 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 korrekt gesichert und kopiert werden. Das heißt, die Tools können die symbolische Verknüpfung erkennen und kopieren, um sicherzustellen, dass die Verknüpfung bei der Wiederherstellung an einer anderen Stelle wiederhergestellt wird und auf das richtige Ziel verweist. Standardmäßig wird alles "korrekt" funktionieren. Im Gegensatz dazu wird beim Sichern oder Kopieren eines Bindemounts der Mount transparent behandelt, sodass die Dateien selbst kopiert werden. Dies kann zu Duplikaten führen, wenn Sie dieselben Dateien auch an einem anderen Speicherort erhalten, und wenn Sie dies wünschen, ist zusätzliche Arbeit erforderlich um das 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 definieren oder für einen bestimmten Benutzer zu öffnen. Bindungs-Mounts können nur vom Superuser eingerichtet oder geändert werden.

Wenn dies wie eine leuchtende Bestätigung symbolischer Links klingt, ist es das auch. Sie sind eine einfachere Möglichkeit, Dateien und Verzeichnisse zu verknüpfen. Sie würden Bind-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 der Sicherungs- und Synchronisierungstools, weisen ein vernünftiges Standardverhalten für symbolische Links auf, und ihre Behandlung von symbolischen Links kann möglicherweise konfiguriert werden. Bindungsbereitstellungen 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 Sicherungen).

7
thomasrutter

Ein weiterer Unterschied ist, dass der symbolische Link symbolisch ist, dh er verweist nur auf einen Pfad - Eine Zeichenfolge, die bei jedem Öffnen eines Unterverzeichnisses/einer Datei im Zielpfad dereferenziert wird. Im Gegensatz dazu verhält sich mount --rbind eher wie eine feste Verbindung, für die der Pfad nicht bei jeder Dereferenzierung neu ausgewertet wird.

Dies macht einen Unterschied in einigen Szenarien wie chroot . Z.B. vsftpdchroots in das Ausgangsverzeichnis des von Ihnen angemeldeten FTP-Benutzerkontos. Wenn Sie also einen Symlink in dieses Verzeichnis einfügen, kann vsftpd diesen nicht dereferenzieren, und das Ziel wird es nicht sein über FTP erreichbar. Wenn Sie stattdessen mount --rbind ausführen, greift vsftpd einfach auf diesen Teilbaum zu, als wäre er wirklich vorhanden, ähnlich wie wenn Sie eine Datei dort fest verlinkt hätten.

0
Ruslan