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).
9
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.dat
und sich nur die Hälfte davon im aktuellen Verzeichnis befindet, können Sie fortfahren:curl -C - -O "file:///media/CORSAIR/somefile.dat"
quelle
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
-a
Option (Archivieren) verwenden, um Dateiattribute (Zeiten, Eigentümer, Dauerwellen usw.) beizubehalten.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.quelle
Der Befehl, den Sie wollen, wird so etwas wie sein
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.
quelle
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