尝试在具有rsync single.large.img user@host:/destination/ --inplace --progress
或 的机器之间同步大文件(VM 映像) rsync *.img user@host:/destination/ --inplace --progress
,该过程会在执行同步之前在两端读取每个文件的全部内容。这似乎与该--checksum
选项的文档相反:
--checksum, -c
这会更改 rsync 检查文件是否已更改且需要传输的方式。如果没有此选项,rsync 将使用“快速检查”,默认情况下,它会检查发送方和接收方之间每个文件的大小和上次修改时间是否匹配。此选项会将其更改为比较 128 位校验和
由于我没有明确指定--checksum
,根据我的理解,它应该只是开始同步,而不需要初始的完整扫描 - 即并行读取双方并根据需要发送更改的块,而不是执行确切地首先读取源,然后读取目标,这会大大增加操作的挂钟时间。
- 我知道文件不同,所以不需要初始完整校验和
- 更改很小(相对于文件大小而言),并且主机之间的连接速度不是很快,因此尝试同步更改,而不是直接复制所有内容
- 时间戳不同,因此如果完全不同步,快速检查就足以停止
- 文件大小没有差异(它们是相同静态分配的 VM 磁盘映像的旧版本)
- 我无法绝对保证目标文件系统上有足够的空间存放该文件的第二份副本,因此使用
--inline
,我知道如果进程中断,部分更新会带来危险 - 一旦启动该部分流程,它就会同步而不是复制所有内容,我可以通过目标处的写入 IO 模式看到这一点
该过程仍然比批量复制文件快得多,但无需使用完整校验和来验证文件是否不同,速度可以提高两到三倍。