QNAP品牌NAS(Network attached storage,网络附加存储)上提供的HBS 3工具可用于在NAS之间之间同步文件。若在两台QNAP NAS之间同步文件,常用的有RTRR和rsync两种方式。其中RTRR是QNAP的专有协议,rsync则是Linux系统上一款快速、功能全面的文件复制工具。那这两种方式有什么具体区别,应当选择哪种方式来进行同步工作呢?本文将实测两种同步方式的设置选项和运行机制区别。

本文测试所用的本地NAS系统版本为QuTScloud c5.1.5.2651,HBS 3版本为v23.0.0921。远端NAS系统版本为QTS 5.1.5.2679,HBS 3版本为v24.0.0304。

设置选项对比

设置选项上,最明显的区别是只有RTRR支持双向同步,而rsync只支持单向同步(QNAP将远端向本地的单向同步称为“活动同步”,但本文仍将两个方向的单向同步统称为“单向同步”)。除此之外,在单向同步下,两者的设置页面也存在差异。

在HBS 3上创建单向同步任务,目标设置为“远程NAS”(即RTRR)和“远程rsync服务器”时,作业设置页面主要区别如下表所示。

设置内容 RTRR rsync
选择文件夹:
添加配对文件夹 可以设置多对配对文件夹 只能设置一对配对文件夹
计划:
作业计划 往本地:可选(计划程序、在作业后运行、无计划)往远端:额外增加实时同步选项 可选(计划程序、在作业后运行、无计划)
规则-筛选器:
筛选器 可配置 无该选项
规则-策略:
使用TCPBBR拥塞控制 往本地:无该选项往远端:可勾选 往本地:无该选项往远端:可勾选
文件和文件夹名称冲突选项 往本地:无该选项往远端:可选(跳过或重命名) 无该选项
检查文件内容 可勾选,默认为未勾选状态 可勾选,默认为勾选状态
复制ACL和扩展属性 可勾选 往本地:无法勾选往远端:可勾选
不创建快照 往本地:强制勾选往远端:可勾选 往本地:无该选项往远端:可勾选
应用目标权限(根据目标操作系统的默认权限修改文件权限) 无该选项 可勾选
暂停HyperDataProtector中的脱机重复数据删除 往本地:无该选项往远端:可勾选 无该选项
规则-选项:
连接超时、重试次数、重试间隔 可配置 无该选项

从设置页面看来,RTRR相比rsync主要增加了实时同步、文件筛选器、自定义超时时间等功能。

运行机制对比

除了设置页面的选项区别之外,两种同步方式的一些具体机制也有所不同。

文件内容检查机制

准备一个文件夹,包含3张大小为68.6MiB的位图文件,文件夹总大小为205MiB。使用RTRR和rsync两种方式,在“检查文件内容”选项开启和关闭时,分别尝试在已经进行一次成功同步的情况下再次进行同步。下表为测试后HBS 3中显示的“已传输的大小”数据值。对比显示,当开启“检查文件内容”选项时,RTRR需要传输完整的文件内容来完整检查文件差异,而rsync只需传输少量文件信息来进行文件对比;当关闭“检查文件内容”时,RTRR无需传输文件内容,而rsync反而会无条件传输文件内容。

两种同步方式的“检查文件内容”机制并不相同,因此,若需要快速进行增量同步,使用RTRR时应当关闭“检查文件内容”选项,使用rsync时则应开启。这也解释了该选项在两种同步方式下默认值不同的原因。

RTRR rsync
“检查文件内容”开 205.99MiB 125B
“检查文件内容”关 0B 206.04MiB

文件变化判定机制

在已经完成一次同步的情况下,尝试修改文件内容但保持文件大小、修改时间不变,或是保持文件内容不变但调整修改时间,然后再次进行同步。同步结果如下表所示。

测试结果显示,RTRR(“检查文件内容”关)同步时,以修改时间为判断依据,若修改时间发生变化则传输整个文件。rsync(“检查文件内容”开)同步时,同样以修改时间为判断依据,但若文件内容没有变化则无需传输整个文件。理论上,原版rsync在使用--checksum命令行参数时,能够根据文件的校验和来判断文件内容是否变化,而不依赖修改日期和大小,且“检查文件内容”选项描述为“当文件日期、大小和名称都相同时,另外检查文件内容”,该描述显然与实际情况不符,可能当前版本存在bug。

传输方式 源文件内容是否变化 源文件修改时间是否变化 已传输的大小(HBS3显示数值) 目标文件是否更新
RTRR(“检查文件内容”关) 0B 未更新
RTRR(“检查文件内容”关) 68.66MiB 更新
rsync(“检查文件内容”开) 13B 未更新
rsync(“检查文件内容”开) 33.34KiB 更新

增量同步机制

rsync的增量传输功能非常出名,它可以只传输文件不同的部分,从而大大减少网络传输的数据量。准备一个包含3张位图文件的文件夹进行同步(每个文件大小为68.6MiB),在同步完毕后,我在源文件夹内的其中一个位图文件中绘制一个10*10像素的纯色矩形后再次同步,来考验两者增量数据传输的能力。

RTRR在关闭“检查文件内容”的情况下传输大小为68.66MiB,与文件大小接近。rsync在开启“检查文件内容”的情况下传输大小为124.45KiB。这说明RTRR在检测到文件发生变化时需要传输整个文件,而rsync只需要传输变化了的部分。

结论

RTRR作为QNAP的专有同步协议,具有一些与QNAP设备紧密配合的功能,能够实现实时单向同步等功能,相比rsync使用更便捷。rsync拥有先进的增量传输功能,在文件部分变化时能够只需传输变化的部分,传输效率较高;但rsync在QNAP设备中只能根据修改日期和大小判断文件是否需要同步,缺少根据文件校验和判断的选项,存在一定的局限,并没有完全发挥rsync的强大功能。