Fortsetzen der Dateikopie Linux

9

Wie setze ich eine Kopie einer großen Datei unter Linux fort? Ich habe eine riesige Datei (mehrere Gigabyte), die teilweise auf ein Netzwerklaufwerk kopiert wurde, und es hat lange gedauert. Sie wurde meistens ausgeführt, bevor der Kopiervorgang aufgrund eines Netzwerkproblems gestoppt wurde, das jetzt behoben ist. Wie setze ich die Dateikopie fort? Ich möchte kein ineffizientes Skript und ecp hat nicht funktioniert (es scheint nicht für große Dateien zu funktionieren).


quelle

Antworten:

4

Ich würde es versuchen rsync -a /from/file /dest/file.

Gonzalo
quelle
1
und während wir über rsync sprechen, beachten Sie, dass Sie mit rsync -az -e ssh / from / file [email protected]: / full / dest / path
Mikeage
2
Wow. Wenn Sie rsync so ohne Optionen ausführen, wird / dest / file gelöscht und das gesamte Ding erneut übertragen. Wie wurde das abgestimmt?
Justin
1
Wie hilft das Beibehalten von Dateiattributen (-a)? Sollte dies - anhängen?
Malvineous
3

Wenn Sie wissen, dass Sie nur an die lokale Datei anhängen müssen und rsync nicht verwenden möchten (was bei der Berechnung von Prüfsummen möglicherweise lange dauern kann), können Sie curl verwenden. Wenn Sie beispielsweise eine große Datei auf einem langsam entfernbaren USB-Stick installiert haben /media/CORSAIR/somefile.datund sich nur die Hälfte davon im aktuellen Verzeichnis befindet, können Sie fortfahren:

curl -C - -O "file:///media/CORSAIR/somefile.dat"

user48985
quelle
Vielen Dank für den Tipp, ich musste diesen Tipp verwenden, da ich von einem Windows SMB-Server kopiert habe (also kein Rsync), als die langsame Verbindung unterbrochen wurde, und ich wollte die 500 MB nicht von Anfang an herunterladen.
MiKy
2

Ja, rsync ist der richtige Weg. Für mich haben wir über 100 GB Daten über rsync + ssh übertragen. Wenn Sie nach einer echten Sicherungskopie suchen, stellen Sie sicher, dass Sie die -aOption (Archivieren) verwenden, um Dateiattribute (Zeiten, Eigentümer, Dauerwellen usw.) beizubehalten.

host1> rsync -aP file user@host2:/path/to/new/dir/

Dies ist auch nützlich, um große Dateien zu kopieren, die sich im Verlauf einer Migration ändern können. Sie können die Daten vorab in das Ziel laden und, sobald sie für die endgültige Kopie bereit sind, erneut ausführen, jedoch nur für einen Bruchteil der Zeit. Sie können tatsächliche Ausfallzeiten einsparen, indem Sie rsync optimal nutzen.

PS Die Verwendung von v(ausführlich) kann die Übertragung vieler Dateien verlangsamen.

Fliegender Fisch
quelle
2

Der Befehl, den Sie wollen, wird so etwas wie sein

rsync -v --append /path/to/afile /mnt/server/dest/afile

Wenn Sie nicht über ssh auf den Server zugreifen und rsync auf diese Weise ausführen können, ist in diesem Fall der Befehl FlyingFish am besten.

Justin
quelle
0

rsync ist nur dann gut, wenn Sie rsync auf dem Zielserver haben. In diesem Fall ist es in der Tat die beste Lösung.

Aber nicht anders. Da es bei rsync nur darum geht, geänderte Teile in große Dateien zu kopieren, wird davon ausgegangen, dass sich diese geänderten Teile an einer beliebigen Stelle in der Datei befinden können. Dies bedeutet, dass alle bereits kopierten Blöcke überprüft werden. Wenn Sie auf der Remote-Seite kein rsync haben, liest Ihr lokales rsync zunächst alles zurück, was bereits übertragen wurde.

Wenn Ihr Quellcomputer über einen Web- oder FTP-Server verfügt, können Sie wget vom Zielserver mit der Option "--continue" verwenden. (oder locken Sie mit der Option "--continue-at [- | size]").

Wenn Ihr Zielcomputer über einen FTP-Server verfügt, können Sie Curl auf dem Quellcomputer mit der Option --append verwenden.

Als letzten Ausweg können Sie dd mit den Argumenten "bs =" (Blockgröße), "skip =" und "seek =" verwenden. Zum Beispiel:

Nehmen wir an, Sie können 2048-Byte-Blöcke verwenden. Wenn Ihre Zieldatei derzeit 2'048'000'000 Bytes (2 GB) umfasst, sind dies 1'000'000 Blöcke mit 2048 Bytes. Sie können den Rest Ihrer Quelldatei an das Ziel anhängen

dd if = Quelldatei von = Zieldatei bs = 2048 skip = 1000000 seek = 1000000

Möglicherweise können Sie eine größere Blockgröße verwenden, um die Übertragungsgeschwindigkeit zu verbessern. Denken Sie daran, die Blockgröße mit bs = anzugeben und anzugeben, dass der zum Überspringen und Suchen angegebene Wert in Blöcken und nicht in Bytes angegeben ist.


quelle
Was Sie über rsync gesagt haben, ist falsch. Mann rsync, lesen Sie, was die Option --append bewirkt.
Justin