Ich habe viele Dateien und Ordner mit scp
dem folgenden Befehl rekursiv übertragen :
scp -rp /source/folder [email protected]:/destination/folder
Muss ich nach Abschluss der Übertragung überprüfen, ob alle Dateien scp
fehlerfrei übertragen wurden, oder muss ich mich darum kümmern (dh es wird eine Fehlermeldung angezeigt, wenn eine der Dateien nicht korrekt übertragen wurde)?
scp
und eine zugehörige Fehlermeldung an stderr erhalten , hat er alles korrekt und vollständig kopiert.rsync
wenn du kannst. Nachdem eine Transaktion abgeschlossen wurde, werden für jede Datei Überprüfungen kopiert. Es ist daher eine gute Idee, diese zu verwenden, um ein wenig sicherer zu sein.Antworten:
scp
überprüft, ob alle von der anderen Partei gesendeten Daten kopiert wurden. Die Integrität der Übertragung wird durch das kryptografische Kanalprotokoll garantiert. Sie müssen die Integrität also nach der Übertragung nicht überprüfen. Dies wäre redundant und würde wahrscheinlich keinen Hardwarefehler erkennen, da die Daten, mit denen Sie vergleichen, wahrscheinlich aus dem Cache gelesen würden. Eine regelmäßige Überprüfung der Daten kann nützlich sein, eine Überprüfung unmittelbar nach der Übertragung ist jedoch sinnlos.Sie müssen jedoch sicherstellen, dass
scp
Ihnen nicht gesagt wird, dass etwas schief gelaufen ist. Es sollte eine Fehlermeldung angezeigt werden, aber der zuverlässige Indikator ist, dassscp
ein Exit-Code ungleich Null zurückgegeben wird, wenn ein Fehler aufgetreten ist .Genauer gesagt, Sie wissen, dass die Datei korrekt übertragen wurde, wenn
scp
0 zurückgegeben wird (dh der Erfolgsstatuscode). Überprüfen Sie, ob der Beendigungsstatus 0 ist, wenn Sie einen Befehl ausführen. Wennscp
ein Fehlerstatus zurückgegeben wird oder wenn er durch ein Signal getötet wird oder wenn er niemals stirbt, weil das System während des Betriebs abstürzt oder die Stromversorgung verliert, haben Sie keine Garantie. Dascp
die Datei direkt in den endgültigen Namen kopiert wird, können Sie im Falle eines Systemabsturzes eine Teildatei erhalten. Der kopierte Teil ist garantiert korrekt, die Datei wird jedoch möglicherweise abgeschnitten.Verwenden Sie zur Erhöhung der Zuverlässigkeit rsync anstelle von scp. Sofern nicht anders angegeben, schreibt rsync in eine temporäre Datei und verschiebt sie an ihren Platz, sobald sie fertig ist. Wenn also rsync einen Erfolgscode zurückgibt, wissen Sie, dass die Datei vorhanden ist und eine korrekte, vollständige Kopie vorliegt. Wenn rsync keinen Fehlercode zurückgegeben hat, ist keine Datei vorhanden (es sei denn, es gab eine ältere Version der Datei. In diesem Fall wird diese ältere Version nicht geändert).
quelle
Ich hatte noch nie ein Problem mit Korruption, nachdem ich
scp
etwas unternommen habe. Wenn Sie sich darüber Sorgen gemacht haben, können Sie immermd5sum <filename>
auf beiden Systemen ausführen , um sicherzustellen, dass sie gleich sind.quelle
Nach dem Vorschlag von @ david-king handelt es sich hierbei um eine
md5
Lösung, mit der die Integrität von Dateien nach der Übertragung überprüft werden kann. Führen Sie den folgenden Befehl einmal nach demcd
Aufrufen von/source/folder
auf dem lokalen Computer und einmal nach demcd
Aufrufen von/destination/folder
auf dem Remotehost aus:find . -type f -print0 | xargs -0 -I {} md5sum {} | md5sum
. Der resultierende Hash sollte nach einer erfolgreichen Übertragung identisch sein.Aktualisieren:
Laut dieser Antwort auf eine ähnliche Frage zu ServerFault kann(Bitte überprüfen Sie diese Antwort von @Gilles für Details). Alternativ zur Überprüfung von Datei-Hashesscp
die Dateiintegrität nicht garantiert werdenrsync
nach der Übertragung können Sie Dateien übertragen und deren Rückkehrcode überprüfen.Update 2: Im Folgenden wird nur geprüft, ob die Dateien und ihre jeweiligen Größen nach der Übertragung übereinstimmen:
find . -type f -print0 | xargs -0 -I {} stat --printf="%n %s\n" {} | sort | md5sum
quelle
scp
des Rückkehrcodes ist ausreichend und das Überprüfen von Hashes ist nutzlos.scp
Wert 0 zurück es garantiert nicht , dass das Dateisystem der Dinge nicht durcheinander hat, so die Hashes Überprüfung ist immer noch nützlich , um die Integrität von sensiblen Daten zu überprüfen , ob jemand zu verwenden , wählten Siescp
überrsync
.