Ich musste eine 20-GB- KVM- vdisk-Datei, in der das Root-Dateisystem einer CentOS 6.5-VM gespeichert war, von einem Laborserver auf einen anderen übertragen. Die große Dateigröße und die Tatsache, dass ich eine solche vdisk-Datei einmal auf einige hundert Megabyte komprimiert hatte, ließen mich instinktiv die Komprimierung aktivieren, scp
aber ich war überrascht, eine ziemlich niedrige Übertragungsgeschwindigkeit zu sehen. Dann habe ich es bzip2
in Kombination mit ssh
und versucht cat
und war erschrocken. Hier ist die Zusammenfassung der Methoden und des durchschnittlichen Durchsatzes.
scp -C vm1-root.img [email protected]:/mnt/vdisks/
11 MB / s.bzip2 -c vm1-root.img | ssh -l root 192.168.161.62 "bzip2 -d -c > /mnt/vdisks/vm1-root.img"
5 MB / s. Dieses noch niedrigere Ergebnis führte zur Suche im Internet.scp -c arcfour -C vm1-root.img [email protected]:/mnt/vdisks/
13 MB / s. Diese Verwendung von-c arcfour
as wurde in einer Antwort auf Serverfehler vorgeschlagen. Es hat kaum geholfen. Schließlich habe ich die Komprimierung deaktiviert.scp vm1-root.img [email protected]:/mnt/vdisks/
23 MB / s.
Sollte die Komprimierung nicht schneller gewesen sein?
EDIT: Ich weiß nicht, warum die Frage abgelehnt wurde. Ich dachte, hier gibt es etwas zu lernen.
Nachdem ssh(1)
ich den Manpage-Tipp von @sven erhalten hatte, versuchte ich einige alternative Methoden der Dateiübertragung ohne Komprimierung, beide mit besseren Ergebnissen.
cat vm1-root.img | ssh -l root 192.168.161.62 "cat > /mnt/vdisks/vm1-root.img"
26 MB / s.nc -l 5678 > /mnt/vdisks/vm1-root.img
am Empfänger undnc 192.168.161.62 5678 < vm1-root.img
am Sender 40 MB / s. Der Port5678
ist ein beliebiger, der verfügbar war.
Die Verwendung nc
erwies sich als die schnellste Kopiermethode!
In der Vergangenheit scp -C
hat es sehr gut funktioniert, wann immer ich dachte. Zum Beispiel beim Übertragen von Syslogs ( /var/log/messages*
) mit wenigen GB Größe. Eine unkomprimierte Übertragungsrate von einigen hundert KB / s würde sich auf 1-2 MB / s erhöhen. Dieses Beispiel fällt bei einer langsamen Verbindung, wie in der Manpage erwähnt.
Ich habe einen Fall, in dem ein neu erstelltes vdisk-Image für eine 20-GB-Partition eine komprimierte Größe von nur 200 MB hat. Mit einer Übertragungsrate von ca. 25 MB / s können wir das Kopieren in nur 8 Sekunden statt über 13 Minuten durchführen! scp
Ohne Komprimierung ist dies in diesem Fall eindeutig ineffizient und scp -C
sogar noch schlimmer.
Ich denke, die wichtigste Lektion, scp -C
die wir hier gelernt haben, ist, dass dies nur als Annehmlichkeit betrachtet werden sollte. Wenn eine Datei erheblich komprimiert werden kann, ist es besser, sie zuerst auf der Quelle zu komprimieren, das komprimierte Formular zu übertragen und schließlich auf dem Ziel zu komprimieren. Tools, die die Komprimierung und Dekomprimierung schnell durchführen (z. B. pbzip2 ), sind eine größere Hilfe.
quelle
scp
enthält die Zeit, die für das Komprimieren / Dekomprimieren aufgewendet wurde. Gemeldete Werte erscheinen überraschend, wenn dies nicht der Fall wäre.Zusätzlich zur Komprimierung erhält nc die beste Rate, da es auch nicht verschlüsselt. Die verlustfreie Komprimierung hängt davon ab, dass redundante Abschnitte der Daten gefunden werden. Wenn Sie dies auf Netzwerkebene tun, können Sie maximal [Puffergröße] Bytes anzeigen, während bei der ersten Datei zuerst [Dateigröße] Bytes angezeigt werden innerhalb dessen doppelte Bytesätze zu jagen und zu knacken sind.
Auch zum Verschieben von Disk-Images sollten Sie ein Dateisystem-fähiges Tool wie ntfsclone / partclone verwenden, da selbst die Komprimierung das einfache Überspringen der nicht zugewiesenen Blöcke nicht übertreffen kann - Ihre Übertragungsrate ist unendlich, wenn Sie keine Daten übertragen müssen. Vergessen Sie auch nicht, die Auslagerungs- und Ruhezustandsdateien auf einer Windows-Partition zu zerstören, oder Sie kopieren Junk, der einfach weggeworfen und trotzdem neu erstellt wird.
quelle