Mount --bind im selben Dateisystem, verschiebt Dateien wie im selben Dateisystem

Mount --bind im selben Dateisystem, verschiebt Dateien wie im selben Dateisystem

Wenn ich mount --bind /aeingebe /bund wenn ich mv /a/bigfile /b/eingebe, wird es sehr lange dauern (wenn die Quelldatei groß ist). Dadurch wird die Datei tatsächlich kopiert und dann die Quelldatei gelöscht, anstatt einfach die Dateitabelle des Dateisystems zu aktualisieren.

Ich verstehe, wie und warum mount --bindes funktioniert. Wie andere bereits angemerkt haben, gibt es dazu einige gute Erklärungen:

Gibt es eine Möglichkeit, mount mitzuteilen, dass sich a mount --bindim selben Dateisystem befindet, sodass Vorgänge wie dieser (Verschieben) durch die tatsächliche Aktualisierung der Dateitabelle des Dateisystems durchgeführt werden?

Ich frage, wie man dieses Problem löst und nicht, wie man es versteht: Vielleicht ist bereits ein Kernel-Patch verfügbar, von dem ich nichts weiß, oder es fehlt ein Parameter, den ich noch nicht gefunden habe (usw.).

Warum: In meinem aktuellen Setup gibt es einen Dienst (Nextcloud), der nur das unterstützt mount --bind. Ich kann keine symbolischen Links verwenden. Wenn ich beispielsweise in jedem Nextcloud-Konto einen freigegebenen Ordner haben muss, muss dies mit Bind geschehen. Ich kann jede Lösung akzeptieren, die mit Nextcloud funktioniert, wenn sie auf Dateisystem-/Kernelebene erstellt wird. Dies liegt daran, dass das aktuelle Setup auch den Zugriff auf diese Dateien auf andere Weise, beispielsweise per SSH, ermöglicht. Mit anderen Worten, ich möchte eine Datei wie im Beispiel mit jedem beliebigen Befehl oder jeder beliebigen Anwendung verschieben können.

Antwort1

Offenbar nicht, diemanpagerename(2)erwähnt dies:

EXDEV alter PfadUndneuer Wegbefinden sich nicht auf demselben gemounteten Dateisystem. (Linux erlaubt das Mounten eines Dateisystems an mehreren Punkten, rename()funktioniert aber nicht über verschiedene Mount-Punkte hinweg, selbst wenn an beiden das gleiche Dateisystem gemountet ist.

Wenn ich mich recht erinnere, ist ein Bind-Mount dasselbe wie das mehrmalige Mounten desselben Dateisystems, d. h. es gibt im Nachhinein keine „Quelle“ und kein „Ziel“ für das Bind.

Es gibt noch eine andereAntwortzu einer anderen Frage zum gleichen Thema von vor ein paar Monaten. Diese enthält Hinweise auf eine Diskussion darüber mit den Kernel-Entwicklern. Also stimmen Sie dafür.

Antwort2

ich habe das gleiche Problem mit Nextcloud und Samba in Docker-Containern. Ich habe es gelöst, indem ich alle Daten in Nextcloud verschoben und sie von anderen per Bind-Mount von diesem Volume aus mounten ließ.

Aus Sicht aller Dienste befindet sich ein MV daher immer nur innerhalb einer Bind-Einbindung.

bin mir aber nicht sicher, ob dir das hilft

Antwort3

Verwenden Sie rsyncstattdessen mvsollte das Problem gelöst sein. Versuchen Sie es mit dem folgenden Befehl

rsync -avP /a/bigfile /b/bigfile

Das Problem liegt darin, dass der Ansichtspunkt von mount --bindim Kernel liegt und vor Programmen höherer Ebene wie verborgen ist mv. Im Gegensatz mvzu rsyncverschiebt nur die geänderten Teile einer Datei.

Dies erklärt etwamount --bind Was ist eine Bind-Mount?

verwandte Informationen