qrsync 是根据什么来判断文件是否有修改的?


有一批需要同步的文件 每次重新生成后即使文件内容没变、文件名没变也会被同步,难道 qrsync 判断是否有变化跟文件创建时间还有关系?

qrsync

konomi控 10 years, 1 month ago

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

Your Answer