我的场景是将几 GB 的文件从临时服务器分发到数十个相同的目标服务器。由于 rsync 可以进行增量传输或增量复制,我想知道当将文件 rsync 到第一个目标服务器时,rsync 是否可以导出增量传输结果?然后使用该结果导入 rsync 到其余目标服务器。在这种情况下,临时服务器可以节省重新计算增量传输的 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
答案1
是的。这就是 rsync 批处理模式的用途。从手册页中可以看到:
批处理模式可用于将同一组更新应用于许多相同的系统。假设有一棵树在多台主机上复制。现在假设已对此源树进行了一些更改,并且需要将这些更改传播到其他主机。为了使用批处理模式执行此操作,rsync 使用 write-batch 选项运行,以将对源树所做的更改应用于目标树之一。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/