Perché il mio rsync è così lento rispetto al puro cp o addirittura scp?


15

Sto trasferendo i file da Linux a Windows 7 tramite una condivisione montata (la condivisione è montata da Windows su Linux). Sto copiando molti dati (cioè quasi un TB) dal vecchio al nuovo computer all'interno della mia LAN . Sono già abbastanza sfortunato che ho solo 100 MB. Naturalmente ho usato ciecamente rsync ma già dopo un giorno mi chiedevo perché mi sembra così lento. Abilitando l'indicatore di avanzamento ho mostrato una velocità di trasferimento di circa 2 MB / s.

Quindi ho preso un file di grandi dimensioni ragionevole (800 MB) e ho seguito i tempi di trasferimento (1):

cp : 05:33
scp (2): 06:33
rsync : 21:51

1) Ho eliminato i file tra ogni esecuzione
2) scp tramite localhost sulla stessa macchina Linux direttamente sulla condivisione; completamente inutile ma fornito un indicatore di progresso

I test sono stati semplici come

(cp|scp|rsync) <source> <destination>

Nessun argomento speciale tranne host / porta per scp. Ho anche provato il-W interruttore per rsync ma annullato dopo dieci minuti. rsync è 3.0.3 in esecuzione su Lenny. Essere in grado di interrompere il processo di copia in qualsiasi momento e riprendere mi porta a rsync, ma ora penso di dover seriamente riconsiderare questo requisito.

Come è possibile una differenza così grande?

Aggiornamento / Risolto:

Grazie a rschuler sono stato in grado di risolvere il problema: utilizzare il demone rsync invece del montaggio smb per motivi di efficienza. Detto DeltaCopy funziona, ma bisogna fare attenzione ad alcune cose

  • è un bel wrapper per GUI ma se qualcosa va storto, è bene sapere come risolverlo. Sembra che ho inserito le mie credenziali utente, in base alle quali eseguire il servizio rsync, errato la prima volta ma la GUI non mi ha permesso di impostarne una nuova. Ho capito che era in esecuzione come servizio e sono stato in grado di impostare le credenziali appropriate lì
  • Necessario aggiungere manualmente la porta al firewall per consentire le connessioni
  • Gusto personale: assicurarsi che le condivisioni siano protette da password o, in caso contrario, assicurarsi che il servizio non si avvii automaticamente con Windows; nel caso in cui
  • Il binario rsync incartato non è una porta Windows nativa ma si basa su Cygwin. Tuttavia, la DLL cygwin contenuta non gestisce correttamente UTF8 e caratteri non ascii alterati. Ottieni una DLL fissa da http://www.okisoft.co.jp/esc/utf8-cygwin/ .

Successivamente, il trasferimento nominale è passato da 2 MB / sa ~ 8 MB / s; assolutamente fantastico!


Hai eliminato il file di destinazione tra ogni esecuzione del test? Se il file di destinazione esisteva già e i metadati non erano corretti, sarebbe necessario eseguire il checksum sia dell'origine che della destinazione.
Zoredache,

@Zoredache: ho eliminato i file tra le esecuzioni; anche l' -Winterruttore dovrebbe ignorarlo
segna

Risposte:


18

(la condivisione è montata da Windows su Linux)

Questo è il tuo problema rsync sta facendo rotolare i checksum sulla destinazione. Le finestre condividono. Stai estraendo tutti i dati dalla rete per calcolare i checksum. (Forse più di una volta).

Quello che devi fare è avere rsync in esecuzione su entrambe le macchine. In questo modo solo le differenze (e i checksum) verranno trasferite tramite il cavo di rete. DeltaCopy è un rsync con finestre. Ha abbastanza documenti per farti andare avanti.

Vedi la risposta più votata a questa domanda per una migliore spiegazione del motivo per cui penso che potresti usare impropriamente rsync.


Bingo, la tua risposta non potrebbe essere più precisa. Molte grazie, ho imparato la mia lezione.
segna
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.