解决rsync长时间同步问题的方法
在日常使用中,我们可能会通过手机与计算机进行文件的转移和同步操作。特别是在移动设备上拍摄的照片数量比较多时,利用ADB工具可以方便地通过USB将SD卡的内容复制到电脑上。然而当我们想要后续增加照片文件时,可能希望减少冗余的数据传输,避免不必要的长时间等待。
背景介绍
在这则对话中,讨论者描述了他在使用rsync
进行手机与计算机之间的文件增量同步操作。原本采用adb-sync
工具实现了大批量的初始同步。由于后续数据量较少,这次打算启用SimpleSSHD
软件通过无线网络继续同步更新后的照片内容至本地硬盘。
问题的核心
尽管使用了rsync -azuvPe 'ssh -p 2222' 192.168.1.3:/sdcard/DCIM/ ~/Documents/phone/AndroidPhone/DCIM
这样的命令,但发现程序在操作中却显示出整个文件目录的重新传输。其实并非如预期般只同步新增改动过的文件而排除已经更新至相同比例且时间戳相同的重复数据。
原因分析
此情况发生是因为rsync默认采用了较精确的时间戳(mtime)与文件大小(size
)相结合的方式进行对比来判定是否需要拷贝,一旦发现某个新文件同目标目录下的已存文件在这些属性上完全一致,则会认为无需做任何同步操作。
然而这种方式对于初次建立索引时(即没有之前对应数据的情况下),会导致所有文件都需要按原样传输一遍。这自然就导致了整体耗时较长的问题。
解决方案
要解决这个问题,可以考虑使用--size-only
选项来调整rsync的判别机制。开启该特性后,它仅仅依据两个目标文件大小相同作为比较基准,不会严格依赖时间戳,从而大幅减小了误判导致的反复扫描与校验过程。
此外,我们还注意到另一个潜在性能改进点:通过-n
或--dry-run
来先行进行无实际修改的模拟传输尝试。这有助于快速确认哪些实际操作步骤是必要的,进而优化最终命令。
示例命令
- 使用size-only选项:
bash
rsync -azuv --delete --size-only Pe 'ssh -p 2222' 192.168.1.3:/sdcard/DCIM/ ~/Documents/phone/AndroidPhone/DCIM
- 先行测试性dry-run:
bash
rsync -azuv --dry-run --delete Pe 'ssh -p 2222' 192.168.1.3:/sdcard/DCIM/ ~/Documents/phone/AndroidPhone/DCIM
通过上述方法,我们可以有效地减少冗余传输操作所占比例,加快增量同步的执行速度。值得注意的是,在进行任何实际生产环境下的配置或使用改动之前,请确保在实验环境中完成充分测试验证其合理性和有效性。
以上即为针对本次讨论问题提出的解决思路及操作指南要点。希望对你有所帮助!