Abgebrochenen Dateitransfer fortsetzen

Wer kennt das nicht? Man möchte eine große Datei zwischen zwei Computersystemen transportieren und auf einmal bricht die Verbindung ab. SCP bietet leider keine Möglichkeit den Datentransfer einfach fort zu setzen. Man wäre also gezwungen, den Transfer neu zu starten. In diesem Tutorial wird ein Workaround vorgestellt, mit dem man abgebrochene Datenübertragungen ganz einfach fortsetzen kann.

Den meisten ist folgende Situation wohl sehr bekannt. Der Transfer einer großen Datei läuft seit einiger Zeit und wird aus irgendeinem Grund unterbrochen.

user@hostA:~$ scp hostB:/home/user/ssh_doku.avi .
user@hostB's password:
ssh_doku.avi 56%  397MB   0.0KB/s - stalled -Read from remote host hostB: Connection reset by peer
lost connection

user@hostA:~$

Leider liefert die SSH-Suite keinen passenden Lösungsansatz für dieses Problem. Daher müssen wir uns mit einem anderen kleinen Tool namens "rsync" behelfen. Mit Hilfe dieses Kommandos ist es möglich, einen Datentransfer an der Stelle weiter zu führen, an dem er abgebrochen war.

rsync --partial --progress hostB:/home/user/ssh_doku.avi ./ssh_doku.avi

Dieses Verfahren hat jedoch einen immensen Nachteil. rsync bietet standardmäßig keinerlei Sicherheitsfeatures. Die Daten werden also unverschlüsselt von A nach B gesendet. Hier kommt nun die SSH wieder ins Spiel. Mit einem einfachen Paramter bringen wir rsync dazu, SSH als sogenannte Remoteshell zu benutzen, wodurch der Datentransfer auf gewohnte Weise mit Hilfe von SSH verschlüsselt wird.

rsync --partial --progress --rsh=ssh hostB:/home/user/ssh_doku.avi ./ssh_doku.avi

Damit wir nicht immer wieder diesen langen Befehl manuell eingeben müssen machen wir nun einen Aliaseintrag für unsere Shell (Beispiel bash: ~/.bashrc).

alias scpresume="rsync --partial --progress --rsh=ssh"

Damit können wir nun einfach mit folgendem Aufruf einen abgebrochenen Datentransfer fortsetzen.

scpresume hostB:/home/user/ssh_doku.avi ./ssh_doku.avi