Ich benutze immer entweder rsync
oder, scp
um Dateien von / auf eine entfernte Maschine zu kopieren. Kürzlich habe ich im Handbuch von scp
( man scp
) die Flagge entdeckt-C
-C Compression enable. Passes the -C flag to
ssh(1) to enable compression.
Bevor ich diese Flagge entdeckte, pflegte ich zip
vorher und dann scp
.
Ist es genauso effizient, das -C
als Zippen und Entpacken zu verwenden? Wann wird mit dem einen oder anderen Verfahren die Übertragung beschleunigt?
scp
compression
file-transfer
Remi.b
quelle
quelle
scp -rv
undscp -Crv
den Durchsatz vergleichen.zip
handelt sich um ein sehr "Windows" -artiges Dateiformat. Sie werden es fast nie sehen oder brauchen, wenn Sie einen Linux-Rechner mit nativer Linux-Software betreiben.tar
wird zum Aufrollen Verzeichnisse in eine Datei verwendet , während Berechtigungen und Namen und so die Erhaltung, währendgzip
,bzip2
,xz
usw. zu komprimieren Dateien verwendet werden.tar
s werden oft komprimiert, machentar.gz
undtar.xz
gängige Formate für Archive unter Linux. Ich habe gesehen, wie Leutescp
mit Befehlen wie " Roll" ihre eigene Arbeit machentar cvz directory | ssh machine 'cd somewhere; tar xz'
.Compression yes
Ihre.ssh/config
Datei einfügen.Antworten:
Es wird nie wirklich einen großen Unterschied machen, aber das Zippen der Datei vor dem Kopieren sollte ein wenig weniger effizient sein, da die Verwendung eines Containerformats
zip
, das mehrere Dateien (wie z. B.) kapseln kann,tar
unnötig ist und das Streamen von ZIP nicht möglich ist Eingabe und Ausgabe (so benötigen Sie eine temporäre Datei).Mit
gzip
auf der anderen Seite stattzip
sollte genau das gleiche sein , da es ist , wasssh -C
unter der Haube tut ... außer dass Gzipping selbst ist mehr Arbeit als nur mitssh -C
.quelle
gzip
ist. Bedeutet Ihre Antwort, dass diesscp -rC
wahrscheinlich die effizienteste Lösung ist, die ich habe?-C
ein interaktiver Protokolldatenstrom komprimiert wird. Sie berücksichtigen nur die Daten. Ihre Schlussfolgerungen sind also falsch. Siehe meine AntwortDas
-C
Flag ermöglicht eine gzip-Komprimierung eines SSH-Streams.Es ist ein Äquivalent zu
Accept-Encoding: gzip
in HTTP.Wie das Flag funktioniert, hängt von der Art der Daten ab, die Sie übertragen:
Beim Übertragen einer einzelnen großen Datei entspricht die Leistung in etwa dem Komprimieren der Datei vor der Übertragung (wobei die Effizienz des Algorithmus zip vs. gzip vernachlässigt wird).
-C
Für Sie als Benutzer bedeutet die Verwendung jedoch weniger Aufwand.Wenn Sie viele kleine Dateien übertragen, ist die Leistung geringer als beim Zippen der Dateien vor der Übertragung.
Ein Grund dafür ist, dass vor jeder Dateiübertragung eine interaktive Kommunikation zwischen dem SCP-Server und dem Client stattfindet (zum Austauschen von Dateimetadaten wie Zeitstempel und Berechtigungen). Daher müssen beide Seiten etwas warten, bis die andere Seite antwortet (Komprimierung hilft nicht beim Warten). Das ist eine Zeitverschwendung für jede übertragene Datei. Wie viel Zeit verschwendet wird, hängt von der Latenz der Verbindung ab. Am Ende kann die Übertragung um Größenordnungen langsamer sein.
Wenn Sie eine einzelne komprimierte Datei übertragen, findet diese Kommunikation nur einmal statt.
quelle
Es aktiviert die gzip-Komprimierung in ssh (unter dem scp).
Bei langsamen Verbindungen wird dies die Geschwindigkeit erhöhen. Bei relativ schnellen Verbindungen (100 MBit oder schneller) wird die Komprimierung die Geschwindigkeit sehr wahrscheinlich verringern.
Es ist mehr oder weniger effizient als zip, je nachdem, ob gzip (speziell gzip -6) mehr oder weniger effizient ist als die von Ihnen gewählte Komprimierungsstufe für zip
quelle
.bin
und.txt
Dateien). Sie würden also vorschlagen, nurscp -r
und keine-C
Flagge zu verwenden und neinzip
,gzip
nichttar
?