如果输入文件已经经过 gzip 压缩,rysnc -z 是否有压缩优势?我有一个 100GB 的大型压缩文件需要通过网络跨服务器发送,并且经过一段时间后它始终失败(管道损坏)。我想知道我是否应该尝试 -z 标志。
答案1
在传输过程中压缩已压缩的文件通常不值得浪费 CPU 时间。但有一些注意事项。在比较两个文件的过程中,使用带压缩的 rsync 可以加快数据哈希值的比较。
如果您只想在多个系统上同步大型文件的压缩版本,可以查看 gzip 的某些版本。在 Ubuntu 系统上,我得到:
$ gzip -h 用法:gzip [选项]... [文件]... 压缩或解压缩文件(默认情况下,就地压缩文件)。 长选项的强制参数对于短选项也是强制的。 -c, --stdout 在标准输出上写入,保持原始文件不变 -d, --decompress 解压缩 -f, --force 强制覆盖输出文件并压缩链接 -h, --help 提供此帮助 -l, --list 列出压缩文件内容 -L, --license 显示软件许可证 -n, --no-name 不保存或恢复原始名称和时间戳 -N, --name 保存或恢复原始名称和时间戳 -q, --quiet 抑制所有警告 -r, --recursive 对目录进行递归操作 -S, --suffix=SUF 在压缩文件上使用后缀 SUF -t, --test 测试压缩文件的完整性 -v, --verbose 详细模式 -V, --version 显示版本号 -1, --fast 压缩速度更快 -9,--最好压缩得更好 --rsyncable 制作 rsync 友好存档 如果没有 FILE,或者 FILE 为 -,则读取标准输入。 将错误报告给 。
注意到那个--rsyncable
选项了吗?它避免使用自适应压缩,因此当源文件只有很小的更改时,只有压缩文件的一小部分会发生变化。其余的二进制数据保持不变,因此 rsync 不需要重新传输整个文件。手册页指出,与不使用该选项相比,此选项不应使压缩文件的大小增加超过 1%,并且 gunzip 不会知道其中的差异。
我有一个 468MB 的 sql 文件,我用--rsyncable
该选项将其压缩到 57MB。我将该文件传输到本地系统。然后我在远程系统上的原始 sql 文件中添加一行注释,并使用 rsyncable 选项重新压缩。
$ rsync -avvz --progress -h fooboo:foo.sql.gz 。 使用 ssh fooboo rsync --server --sender -vvlogDtprz . foo.sql.gz 打开连接 接收文件列表... 1 个需要考虑的文件 启用增量传输 foo.sql.gz 59.64M 100% 43.22MB/s 0:00:01(xfer#1,to-check=0/1) 总计:匹配数=7723 hash_hits=9468 false_alarms=0 数据=22366 发送 54.12K 字节 接收 22.58K 字节 17.05K 字节/秒 总大小为 59.64M 加速比为 777.59
还不错。Rsync 只需要传输一小部分较新的压缩文件。
答案2
rsync 不会使已压缩的文件在传输过程中显著变小。
通过添加 -z 标志不太可能修复失败的传输。我建议尝试在未压缩的情况下 rsync 文件。然后 rsync 会即时压缩。这样一来,如果源文件发生变化,您需要再次 rsync,则只有更改的字节会被传输。如果您更改了压缩文件,rsync 很可能必须将其全部重新传输。有关更多详细信息,请参阅此处:
答案3
在处理已使用良好压缩格式压缩的文件时,使用rsync -z
不会比直接使用有任何优势rsync
。但是,您可以考虑将压缩文件拆分成较小的部分,以便能够使用 rsync 传输它。
以下是 Linux 的指南:http://www.techiecorner.com/107/how-to-split-large-file-into-several-smaller-files-linux/ 对于 Windows:http://www.online-tech-tips.com/computer-tips/how-to-split-a-large-file-into-multiple-smaller-pieces/