为什么 rsync 在本地复制修改后的文件时速度不快?


$ dd if=/dev/urandom of=1 bs=1048576 count=3
3+0 records in
3+0 records out
3145728 bytes transferred in 0.263337 secs (11945641 bytes/sec)
$ rsync -avz 1 2
building file list ... done
1
sent 3147373 bytes  received 42 bytes  6294830.00 bytes/sec
total size is 3145728  speedup is 1.00
$ dd if=/dev/urandom of=new_prefix bs=1048576 count=3
3+0 records in
3+0 records out
3145728 bytes transferred in 0.276985 secs (11357037 bytes/sec)
$ cat 1 >> new_prefix
$ rsync -avz new_prefix 2
building file list ... done
new_prefix
sent 6294646 bytes  received 42 bytes  4196458.67 bytes/sec
total size is 6291456  speedup is 1.00

为什么在向文件添加前缀时没有收到任何加速?AFAIK,rsync不应该只是为就地修改提供加速。

所以你正在做的是:

  1. 使用 rsync 将本地文件复制到1 2

  2. 创建一个与1相同的新文件new_prefix,但在开始时插入了更多数据。

  3. new_prefix复制到 2 的顶部。

想想 rsync 必须做什么,执行步骤 3。

请记住,没有操作系统界面可以说"在文件开头插入数据":唯一的选择是重写整个文件2。所以 rsync 必须读取整个new_prefix文件,然后写入整个2。IO 是限制因素,没有解决它的神奇方法。

如果文件 2 是远程的,那么 librsync 可以利用相似性来发送更少的网络流量,并且可能会显示加速。

最新更新