Avevo bisogno di trasferire un file vdisk KVM da 20 GB , memorizzando il filesystem di root di una VM CentOS 6.5, da un server di laboratorio a un altro. Le grandi dimensioni del file e il fatto che una volta avevo compresso un tale file vdisk a poche centinaia di mega byte mi hanno istintivamente abilitato la compressione con, scp
ma sono stato sorpreso di vedere una velocità di trasferimento piuttosto bassa. Poi ho provato bzip2
in combinazione con ssh
ed cat
e sono rimasto sorpreso. Ecco il riepilogo dei metodi e della produttività media.
scp -C vm1-root.img root@192.168.161.62:/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. Questo risultato ancora più basso ha richiesto la ricerca in rete.scp -c arcfour -C vm1-root.img root@192.168.161.62:/mnt/vdisks/
, 13 MB / s. Questo uso di-c arcfour
as è stato suggerito in una risposta su serverfault. Difficilmente aiutato. Infine, ho disabilitato la compressione.scp vm1-root.img root@192.168.161.62:/mnt/vdisks/
, 23 MB / s.
La compressione non avrebbe dovuto essere più veloce?
EDIT: non so perché la domanda sia stata sottoposta a downgrade. Ho pensato che ci fosse qualcosa da imparare qui.
Dopo aver ricevuto il ssh(1)
suggerimento sulla pagina man da @sven, ho provato un paio di metodi alternativi di trasferimento dei file che non prevedevano la compressione, entrambi con risultati migliori.
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
sul ricevitore enc 192.168.161.62 5678 < vm1-root.img
sul trasmettitore, 40 MB / s. La porta5678
è arbitraria disponibile.
L'utilizzo nc
si è rivelato essere il metodo di copia più veloce!
In passato, scp -C
ha funzionato molto bene ogni volta che pensavo che avrebbe funzionato. Ad esempio, quando si trasferiscono syslogs ( /var/log/messages*
) di dimensioni di pochi GB. Una velocità di trasferimento non compressa di poche centinaia di KB / s aumenterebbe a 1-2 MB / s. Questo esempio cade nel caso di una connessione lenta, come è stato sottolineato nella pagina man.
Ho un caso in cui, un'immagine vdisk appena creata per una partizione da 20 GB ha una dimensione compressa di soli 200 MB. Con una velocità di trasferimento di circa 25 MB / s, potremmo eseguire la copia in soli 8 secondi anziché in 13 minuti! Chiaramente, scp
senza compressione è inefficiente in questo caso ed scp -C
è anche peggio.
Immagino che la lezione principale appresa qui sia che scp -C
dovrebbe essere considerata solo una comodità. Se un file può essere compresso in modo significativo, è meglio comprimerlo prima sull'origine, trasferire il modulo compresso e infine decomprimere sulla destinazione. Gli strumenti che eseguono rapidamente la compressione e la decompressione (ad esempio pbzip2 ) saranno di grande aiuto.