A compactação em trânsito de um arquivo já compactado geralmente não vale o tempo de CPU. Existem ressalvas. No processo de comparar dois arquivos, o uso do rsync com compactação pode acelerar a comparação dos hashes dos dados.
Se você quiser apenas sincronizar versões compactadas de arquivos grandes em mais de um sistema, um lugar para procurar seria certas construções de gzip. Em um sistema Ubuntu, eu recebo:
$ gzip -h Usage: gzip [OPTION]... [FILE]... Compress or uncompress FILEs (by default, compress FILES in-place). Mandatory arguments to long options are mandatory for short options too. -c, --stdout write on standard output, keep original files unchanged -d, --decompress decompress -f, --force force overwrite of output file and compress links -h, --help give this help -l, --list list compressed file contents -L, --license display software license -n, --no-name do not save or restore the original name and time stamp -N, --name save or restore the original name and time stamp -q, --quiet suppress all warnings -r, --recursive operate recursively on directories -S, --suffix=SUF use suffix SUF on compressed files -t, --test test compressed file integrity -v, --verbose verbose mode -V, --version display version number -1, --fast compress faster -9, --best compress better --rsyncable Make rsync-friendly archive With no FILE, or when FILE is -, read standard input. Report bugs to .
Observe que a opção --rsyncable
? Evita usar a compactação adaptável para que apenas pequenas partes do arquivo compactado sejam alteradas quando houver apenas uma pequena alteração no arquivo de origem. O restante dos dados binários não é alterado, de modo que o rsync não precisará retransmitir a coisa toda. A página man indica que essa opção não deve aumentar o tamanho do arquivo compactado em mais de 1% comparado a sem usar a opção, e que o gunzip não saberá a diferença.
Eu tenho um arquivo sql de 468 MB que eu comprimi para 57 MB com a opção --rsyncable
. Eu transfiro este arquivo para o meu sistema local. Em seguida, adiciono um comentário de uma linha ao arquivo sql original no sistema remoto e recompacta com a opção rsyncable.
$ rsync -avvz --progress -h fooboo:foo.sql.gz . opening connection using ssh fooboo rsync --server --sender -vvlogDtprz . foo.sql.gz receiving file list ... 1 file to consider delta-transmission enabled foo.sql.gz 59.64M 100% 43.22MB/s 0:00:01 (xfer#1, to-check=0/1) total: matches=7723 hash_hits=9468 false_alarms=0 data=22366 sent 54.12K bytes received 22.58K bytes 17.05K bytes/sec total size is 59.64M speedup is 777.59
Nada mal. O Rsync só precisou transferir uma pequena quantidade do arquivo compactado mais recente.