Sta*_*tan 2 rsync file-transfer
我的方案是将几个 GB 文件从一个临时服务器分发到数十个相同的目标服务器。由于rsync可以做delta-transfer或增量复制,我想知道当rsync文件到第一个dest服务器时,rsync可以导出delta-transfer结果吗?并使用该结果将 rsync'ing 导入到其余的 dest 服务器。在这种情况下,临时服务器可以节省重新计算增量传输的 CPU 时间。这可能吗?
Number of files: 160
Number of files transferred: 49
Total file size: 2993222827 bytes = 2854 MB
Total transferred file size: 1847285024 bytes =1761 MB
Literal data: 69543644 bytes = 66 MB
Matched data: 1777741380 bytes = 1695 MB
File list size: 3088
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 1256178
Total bytes received: 70240527 = 67 MB
sent 1256178 bytes received 70240527 bytes 182157.21 bytes/sec =
0.17 MB/s total size is 2993222827 speedup is 41.87
Run Code Online (Sandbox Code Playgroud)
是的。这就是 rsync 的批处理模式的用途。从手册页:
批处理模式可用于将同一组更新应用到许多相同的系统。假设一个人有一个在多个主机上复制的树。现在假设已经对该源树进行了一些更改,并且这些更改需要传播到其他主机。为了使用批处理模式执行此操作,使用 write-batch 选项运行 rsync 以将对源树所做的更改应用于目标树之一。write-batch 选项使 rsync 客户端将所有信息存储在“批处理文件”中,以针对其他相同的目标树重复此操作。
生成批处理文件一次就不必在更新多个目标树时多次执行文件状态、校验和和数据块生成。多播传输协议可用于将批量更新文件同时并行传输到多个主机,而不是单独向每个主机发送相同的数据。
要将记录的更改应用到另一个目标树,请使用 read-batch 选项运行 rsync,指定同一个批处理文件的名称和目标树。Rsync 使用存储在批处理文件中的信息更新目标树。
一个例子:
$ rsync --write-batch=foo -a host:/source/dir/ /adest/dir/
$ scp foo* remote:
$ ssh remote ./foo.sh /bdest/dir/
Run Code Online (Sandbox Code Playgroud)