Ich möchte Dateien per SCP machineA
in mein Verzeichnis übertragen machineB
und mache das folgendermaßen: Ich kopiere mehrere Dateien nacheinander von primary
Ordner machineA
zu primary
Ordner machineB
und secondary
von Ordner machineA
zu secondary
Ordner machineB
.
trinity@machineB:~$ scp trinity@machineA:/data01/primary/* /data01/primary/
trinity@machineB:~$ scp trinity@machineA:/data02/secondary/* /data02/secondary/
Gibt es eine Möglichkeit, mehrere Dateien parallel zu kopieren? Etwa fünf Dateien gleichzeitig aus einem Ordner? Anstatt also jeweils eine Datei zu kopieren, möchte ich fünf Dateien aus primären bzw. sekundären Ordnern kopieren?
machineA
Grundsätzlich möchte ich alles, was sich in primären und sekundären Ordnern befindet, parallel kopieren machineB
.
Ich habe auch GNU Parallel auf meiner Box installiert, falls ich das verwenden kann. Ich habe den folgenden Befehl ausprobiert, aber er funktioniert nicht. Ich hatte erwartet, dass er 5 Dateien gleichzeitig parallel kopieren sollte, bis alles aus diesem Ordner kopiert ist.
parallel -j 5 scp trinity@machineA:/data01/primary/* /data01/primary/
Stimmt etwas mit meiner parallelen Syntax nicht? Wie kann ich am besten fünf Dateien parallel aus einem Remote-Ordner kopieren, bis alles daraus kopiert ist?
Antwort1
Warum glauben Sie, dass die parallele Verbindung es schneller machen würde? SCP ist ein sehr einfaches Tool zum Übertragen einiger kleiner Dateien, nichts für Durchsatz und Leistung. Das Ausführen von mehreren parallelen Prozessen könnte es etwas schneller machen, aber nicht wesentlich. Was Sie auf die andere Weise tun können, ist:
- Verwenden Sie
sftp
, um einen besseren Durchsatz und intelligenteres Kopieren zu erreichen (sollte ausreichen), beispielsweise durch-r
- Verwenden Sie diese Option
ControlMaster
, um den Overhead paralleler TCP-Verbindungen zu vermeiden. - Verwenden Sie die richtigen Parameter für die
parallel
Ich würde mit Folgendem beginnen sftp
:
sftp -r trinity@machineA:/data01/primary/ /data01/primary/
Antwort2
Die *-Erweiterung muss auf der Remote-Seite erfolgen:
ssh machineA 'parallel -j 5 scp {} machineB:/data01/primary/ ::: /data01/primary/*'