Verschieben Sie Dateien zwischen zwei Windows-Dateifreigaben auf demselben Server.

Verschieben Sie Dateien zwischen zwei Windows-Dateifreigaben auf demselben Server.

Ich verwende Windows 7 und habe einen Server mit freigegebenen Ordnern eingerichtet. Wenn ich einen davon öffne, eine Datei nehme und sie in einen Unterordner verschiebe, geschieht dies sofort – die Datei wird offensichtlich nur auf dem Server verschoben. Dasselbe gilt für zwei Fenster, in denen derselbe freigegebene Ordner geöffnet ist.

Wenn ich andererseits einen anderen freigegebenen Ordner auf demselben Server öffne und eine Datei zwischen ihnen verschiebe, dauert dies sehr lange – so, als würde ich die Datei von der ersten Freigabe auf meinen Computer in einen temporären Ordner herunterladen und sie dann in die andere Freigabe hochladen.

Gibt es eine Möglichkeit, Dateien zwischen verschiedenen Freigaben wie dieser zu verschieben, ohne dass mein Computer sie zwischendurch herunterlädt? Ich möchte etwas Geschwindigkeit, weil es sich oft um ziemlich große Dateien handelt.

Antwort1

Wenn Sie „einen anderen freigegebenen Ordner“ sagen, meinen Sie dann „einen Ordner in einer anderen Dateifreigabe (d. h. ein anderes zugeordnetes Laufwerk)“? Wenn ja, ist das das Problem, und es gibt keine einfache, magische Lösung. Wenn Siebewegeneine Datei von einem Ordner in einen anderenauf dem gleichen Volumenmuss das Betriebssystem lediglich einen neuen Verzeichniseintrag in den Zielordner schreiben und den alten Verzeichniseintrag im Quellordner löschen – auf die Dateidaten muss nicht zugegriffen werden. Wenn SieKopiereneine Datei, muss das Betriebssystem jeden Datenblock lesen und an einen neuen Ort schreiben. Und eine Verschiebung zwischen Datenträgern kann genauso gut eine Verschiebung zwischen physisch getrennten Datenträgern sein – sie muss als Kopie gefolgt von einem Löschen der Quelldatei behandelt werden –, da Verzeichniseinträge nicht auf Datenblöcke auf einem anderen Datenträger verweisen können.

PS Ironischerweise könnte eine Verschiebung zwischen physisch getrennten Festplatten sogarSchnellerals eine Verschiebung zwischen Partitionen (Volumes oder „Shares“) auf derselben Festplatte, weil im letzteren Fall die Festplatten-E/A-Köpfe zwischen dem/den Quellzylinder(n) und dem/den Zielzylinder(n) hin- und herspringen müssen.

Antwort2

Auch wenn ich zu spät zum Fest komme, hier ist das Rezept, und ich glaube, es ist einpraktische Methode, mit einigen Voraussetzungen.

  • Die Kernideeweist den Server an, die Objekte an einem bestimmten Ort (der sich natürlich in einer Samba-Freigabe befindet) zu verschieben nachein andererStandort (der natürlich inein anderer(Samba-Freigabe).

  • inotifywaitist der Küchenchef, mit den Kochern while, read, und mv. Das ist das Team für unser Abendessen.

  • Und die Küche (oder vielleicht das Esszimmer) sieht so aus:

Samba shares ├─share.1 │ ├─recv │ ├─to.share.2 │ ├─to.share.3 │ └─[...] ├─share.2 │ ├─recv │ ├─to.share.1 │ ├─to.share.3 │ └─[...] ├─share.3 │ ├─recv │ ├─to.share.1 │ ├─to.share.2 │ └─[...] └─[...]

Ein Benutzer meldet sich beispielsweise bei share.x an. Wenn der Benutzer etwas von share.x nach share.y verschieben/kopieren möchte, ist dies die Vorgehensweise:

  1. Wählen Sie die Objekte in share.x aus und verschieben/kopieren Sie sie nach share.x/to.share.y.

  2. Der Server überwacht diese to.share.*Ordner mit inotifywaitund weiß daher, dass es Zeit zum Arbeiten ist.

  3. Der Server verschiebt die Objekte darin share.x/to.share.ynach share.y/recv.

  4. Erledigt!

Zu den Voraussetzungen gehören eine bestimmte Ordnerstruktur wie oben und ein auf dem Server ausgeführter Job/Dienst/Skript, um den eigentlichen mvVorgang durchzuführen.

Ich kann Ihnen zwar meinen eigenen Skriptcode zur Verfügung stellen, es besteht jedoch noch erheblicher Verbesserungsbedarf:

inotifywait -m "$source_dir" --format '%w%f' -e moved_to,create,modify | while read file; do mv -v "$file" "$dest_dir"; done

Ändern Sie diese $source_dir, $dest_dirdamit sie Ihren eigenen Anforderungen entsprechen.

Ich supervisorverwende eine Reihe von Skripten wie die oben genannten, um meine "Samba-Teleportation" durchzuführen. Wenn Sie nicht damit vertraut sind supervisor, lesen Sie bittehttp://supervisord.org/und weitere Antworten dazu.

Antwort3

Der einfachste/schnellste und unkomplizierteste Weg wäre, dies entweder vom Server selbst aus zu tun oder eine Freigabe zu erstellen, die beide Zielfreigaben als Unterordner hat (z. B. \\servername\c$).

verwandte Informationen