qrsync 是根据什么来判断文件是否有修改的?
有一批需要同步的文件 每次重新生成后即使文件内容没变、文件名没变也会被同步,难道 qrsync 判断是否有变化跟文件创建时间还有关系?
konomi控
10 years, 1 month ago
Answers
qrsync
是在
rsync
基础上进行的封装,所以算法也是基于
rsync
对于
rsync
,同步过程如下
- 建立网络链路并校验权限
-
发送方传输本地文件列表,包括
目录结构
、文件名
、每个文件的修改时间
和大小
-
如果指定
-c, --checksum
参数,则会包含每个文件的checksum(一种hash) -
如果指定
-p, --perms
参数,则会包含每个文件的owner,group以及权限
-
如果指定
-
接收方一一对比,如过存在某项属性有和本地文件有差异的,则放入
传输列表
-
针对需要传输的文件列表,采用
rsync算法
计算出文件中差异的部分,进行尽可能最小化的传输
因此默认情况下,判断一个文件是否需要传输,是基于
修改时间
和
文件大小
,如果二者都一样,则会直接跳过这个文件。这样的算法,虽然简单粗暴,但是对I/O及CPU的消耗微乎其微,也基本上能适应大部分场景。这样的算法会忽略那些通过
非正常手段
修改了文件内容,但是
时间戳和文件大小都没有变化
的文件,因此rsync提供
-c
参数进行更严格的对比。
针对题主的情况,可以加上
--size-only
参数,这样的话,针对同一个文件(路径),如果
文件大小
保持一致,只是
修改时间
不同,也会直接跳过,不进行传输。
黑猫的骑士
answered 10 years, 1 month ago