Was ist der Unterschied zwischen:
ln -s /mnt/extra/home /
und
mkdir /home
mount --rbind /mnt/extra/home /home
symbolic-link
NerdOfLinux
quelle
quelle
ln
macht Links; insbesondereln -s
macht symbolische Verknüpfungen.mount
Hängt ein Dateisystem in ein Verzeichnis ein. Sie haben nichts gemeinsam.mount --rbind /mnt/extra/home
Antworten:
mount --rbind
macht einen rekursiven Bind-Mount; Das heißt, auf die angehängte Dateisystemhierarchie/mnt/extra/home
kann auch über zugegriffen werden/home
.In der Praxis besteht der Hauptunterschied zwischen der
ln -s
Lösung und dermount --rbind
Lösung darin, dass withln -s
/home
ein Symlink ist, während withmount --rbind
ein Verzeichnis ist. dies wirkt sich Werkzeuge wiefind
,df
,test
/[
usw.Die auch
ln -s
fehl , wenn/home
vorhanden, währendmount --rbind
fehlschlägt, wenn es nicht vorhanden ist , oder es ist kein leeres Verzeichnis.Marks Kommentar unten ist ebenfalls wichtig:
ln -s
Benötigt ein beschreibbares Dateisystem, auf dem der Symlink erstellt werden kann.quelle
ln -s
das Dateisystem geändert wird, diesmount --rbind
jedoch 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.--bind
und es ist--rbind
mir egal, ob meine Zielverzeichnisse leer sind. Sie werden einfach "über" den vorhandenen DateienIn 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).
quelle
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 --rbind
verhä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 vsftpdchroot
s in das Ausgangsverzeichnis des FTP-Benutzerkontos, in dem Sie sich anmelden. Wenn Sie also einen Symlink in dieses Verzeichnis einfügen,vsftpd
kann er nicht dereferenziert werden, und das Ziel ist daher nicht über FTP erreichbar. Wenn Sie dies stattdessen tunmount --rbind
,vsftpd
greifen Sie einfach auf diesen Teilbaum zu, als wäre er wirklich vorhanden, ähnlich wie wenn Sie dort eine Datei fest verknüpft hätten.quelle