$ 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
不应该只是为就地修改提供加速。
所以你正在做的是:
-
使用 rsync 将本地文件复制到
1
2
。 -
创建一个与
1
相同的新文件new_prefix
,但在开始时插入了更多数据。 -
将
new_prefix
复制到 2 的顶部。
想想 rsync 必须做什么,执行步骤 3。
请记住,没有操作系统界面可以说"在文件开头插入数据":唯一的选择是重写整个文件2
。所以 rsync 必须读取整个new_prefix
文件,然后写入整个2
。IO 是限制因素,没有解决它的神奇方法。
如果文件 2 是远程的,那么 librsync 可以利用相似性来发送更少的网络流量,并且可能会显示加速。