rsync 与 mtime 和 ctime

rsync 与 mtime 和 ctime

我已经使用rsyncAndroid 将手机备份到 Linux 系统上的远程 NTFS 文件系统一段时间了。

最近,包含 NTFS 文件系统的 HDD 开始出现故障(或抛出“I/O 错误”),因此我趁机将所有文件复制到新的 HDD 和新的 NTFS 文件系统上。在本例中,我使用了适用于 Windows 的“FastCopy v2.11”工具。

我的问题是,当我执行 rsync“试运行”时,我可以看到它想要重新复制远程 rsync 文件夹中已存在的文件。例如,当我使用“-iv”运行时,我得到这种输出:

<f..t...... extSdCard/foo/bar

据我了解,这意味着 rsync 由于时间戳差异而想要将此文件复制到远程 rsync。

奇怪的是,如果我使用“Astro” for Android 查看本地文件属性,我可以看到该文件的大小、修改时间和 MD5 校验和与远程文件完全相同(用于ls -l检查修改时间)。

鉴于我最近从旧的 NTFS 文件系统复制了远程 rsync 文件,远程文件的 ctime 是不同的(使用ls -lc)。

是否rsync查看远程 ctime,如果是,有什么方法可以使用rsyncntfs-3g解决此问题吗?

答案1

默认情况下,rsync 依赖于 mtime/ctime 和大小进行文件比较,但如果您使用该-c标志,它将忽略它们并使用内容校验和。

问题是这种方式可能会慢得多(在您的移动设备上计算这些校验和可能非常昂贵),并且从现在开始您可能需要始终像这样运行它,因此让它在没有校验和的情况下运行一次可能是有意义的,让它做它的事情,这样它就会根据默认使用的 mtime/ctime/size 比较方法再次复制所有内容,但至少下次您不会花时间计算校验和。

答案2

我刚刚做了一个快速实验; rsync 比较 mtime 并忽略 ctime(至少在 Mac 上)。不幸的是,Windows 文件系统只有 ctime,它们也为 atime 和 mtime 返回 ctime。

这就是为什么 rsync 如此积极地从 Windows 文件系统复制不需要复制的文件 - Unix 文件上的 mtime 与 Windows 文件上的“ctime”进行比较。

相关内容