Per i file di grandi dimensioni comprimere prima quindi trasferire o rsync -z? quale sarebbe più veloce?


14

Ho un sacco di relatività piccoli file di dati ma occupano circa 50 GB e ho bisogno che vengano trasferiti su una macchina diversa. Stavo cercando di pensare al modo più efficiente per farlo.

Pensavo di dover decomprimere tutto, quindi risincronizzarlo e decomprimerlo, fare affidamento su rsync -z per la compressione, gzip quindi utilizzare rsync -z. Non sono sicuro di quale sarebbe il più efficiente poiché non sono sicuro di come sia implementata esattamente rsync -z. Qualche idea su quale opzione sarebbe la più veloce?

Risposte:


11

Non puoi "gzip il tutto" in quanto gzip comprime solo un file, puoi creare un file tar e gzip per "gzip il tutto" ma perderai la capacità rsync di copiare solo il file modificato.

Quindi la domanda è: è meglio archiviare i file che devo rsync gziped o fare affidamento sull'opzione -z di rsync.
La risposta è probabilmente che non vuoi che il file venga decompresso sul tuo server? Immagino di si, quindi non vedo come potresti riuscire a gzip file prima di fare rsync.

Forse non hai bisogno della capacità rsync di copiare solo file modificati? In questo caso, perché usare rsync invece di fare uno scp di un file tar.gz contenente le tue cose?

Comunque per rispondere alla domanda, rsync gzip sarà un po 'meno efficiente del file gziping con gzip. Perché ? poiché rsync gzip i pezzi di dati per pezzo, quindi verrà utilizzato un set di dati più piccolo per creare la tabella utilizzata da gzip per eseguire la compressione, un set di dati più grande (gzip userebbe l'intero file in una sola volta) per fornire una tabella di compressione migliore. Ma la differenza sarà molto piccola nella maggior parte dei casi, ma in casi molto rari la differenza può essere più importante (se si dispone di un file molto grande con partern molto lungo che si ripete molte volte sul file ma lontano l'uno dall'altro) (Questo è un esempio molto semplificato)


1
Da come ho letto la sua domanda, si comprime per farla passare sopra il filo e poi decomprime l'altro lato. Andrei con la compressione nativa di rsync su gzip, semplicemente perché la compressione e la decompressione di 50 GB può richiedere molto tempo. Inoltre, se i file sono principalmente di testo, verranno compressi bene. Terza opzione: copiare i file su un'unità USB.

3
@Randolph Potter: sì, il tempo perso per comprimere 50 GB localmente, quindi rsync sarebbe maggiore rispetto all'utilizzo di rsync -z, comunque se volesse sfruttare la compressione rsync stessa (copia solo il file modificato) non può essere fatto prima
raggio

ottimo punto. +1 per te :-)

Ricordiamo anche che gzip è un compressore stream.
Falcon Momot,

6

Se stai copiando i dati solo una volta, rsync non sarà una grande vittoria in sé e per sé. Se ti piace gzip, (o tar + gzip, poiché hai molti file), potresti provare qualcosa del tipo:

tar -cz /home/me/source/directory | ssh target tar -xz --directory /home/you/target/directory

Ciò otterrebbe la compressione che stai cercando e basta copiare direttamente senza coinvolgere rsync.


probabilmente userei --lzop per quello invece di gzip ... molto più veloce e più basso sovraccarico della CPU e ha ancora buoni rapporti di compressione per il testo
underrun

5

@radius, un piccolo pignolo da scegliere su come gzipfunziona - gzipè un algoritmo di compressione basato su blocchi e abbastanza semplice. L'intero file non viene considerato per la tabella di compressione, ma solo per ciascun blocco. Altri algoritmi possono utilizzare l'intero contenuto del file e ce ne sono alcuni che utilizzano il contenuto di più blocchi o persino blocchi di dimensioni variabili. Un esempio affascinante è lrziplo stesso autore di rsync!

L' gzipalgoritmo skinny on .

Quindi, in sintesi, l'utilizzo rsync -zprobabilmente produrrà la stessa compressione del gzipprimo - e se stai facendo un trasferimento differenziale, meglio a causa rsyncdell'algoritmo diffing.

Detto questo, penso che uno lo troverà regolare scp battitirsync per i trasferimenti non differenziali - perché avrà un sovraccarico molto inferiore rispetto rsyncall'algoritmo (che userebbe comunque scpsotto il cofano!)

Se la rete non diventi un collo di bottiglia, poi si vorrebbe utilizzare la compressione sul filo.

Se tuo dischi sono il collo di bottiglia, è meglio quando lo streaming in un file compresso. (ad esempio, netcatda una macchina all'altra, streaming in gzip -c)

Di solito, se la velocità è la chiave, la compressione di un file esistente prima è dispendiosa.

TIMTOWTDI, YMMV, IANAL, ecc.


2

Secondo questo ragazzo potrebbe essere più veloce da usare rsync -z, anche se immagino che sarebbe quasi efficiente quanto comprimere ogni file prima di trasferirlo. Dovrebbe essere più veloce della compressione del flusso tar, come suggerito da altri.

Dalla pagina man:

          Note  that  this  option  typically  achieves better compression
          ratios than can be achieved by using a compressing remote  shell
          or  a  compressing  transport  because it takes advantage of the
          implicit information in the matching data blocks  that  are  not
          explicitly sent over the connection.

1
Suggerirei di usare --compress-level = 1 con rsync -z se hai una rete veloce. Volete che la rete sia il collo di bottiglia, non CPU o IO del disco, per ridurre al minimo il tempo totale di trasferimento. Se la rete è lenta, l'uso del predefinito -z (che equivale a gzip -6 credo) potrebbe comunque rendere vincolata la rete di processo.
rmalayter,

1

Poiché sia ​​scp di file compresso che rsync impiegheranno tempi di trasferimento molto simili, il "modo più efficiente per farlo" sarebbe la compressione al volo piuttosto che la compressione, il trasferimento.

Oltre alla "solidità", altre considerazioni includono:

rsync può essere facilmente riavviato se non tutti i file vengono trasferiti.

rsync può essere usato per conservare i file sul computer remoto.

tar locale o gzip richiede spazio locale.

Considerazioni sull'utilizzo delle porte sia per la macchina target che per i firewall: 1) scp utilizza la porta 22 (per impostazione predefinita) che potrebbe non essere accettabile. 2) porta utenti rsync 873 (per impostazione predefinita)

Non sono sicuro del motivo per cui raggio si aspetta che il poster originale NON desideri che vengano archiviati i file decompressi.

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.