我是 rsync 新手。我有一台带有外部硬盘驱动器 (ext3) 的 Linux 计算机和一台带有 NTFS 外部硬盘驱动器的 Windows 计算机。我将 NTFS 硬盘驱动器连接到 Linux 计算机,并从 ext3 驱动器进行了镜像复制。之后,我将一些新文件复制到 ext3 驱动器,然后将 NTFS 连接回 Windows 计算机,并从 cygwin 运行:
rsync -Pratluvz user@linux_machine:/path/to/data /cygdrive/f/
我预计同步会非常快,因为除了最近添加的数据之外,数据是相同的。典型的线路如下所示:
Documents/path/to/file.ext
2688670 100% 801.24kB/s 0:00:03 (xfer#1, to-check=2477/12876)
初始同步所花费的时间几乎与副本本身一样长。但是,当我停止同步并恢复时,它会从停止的地方开始。第一次同步是否特殊,因为它需要清单并写入文件?以后同步会更快吗? (我切换了“z”参数没有效果,并删除了“c”参数,这有帮助。)
编辑:事实证明,我在源路径末尾包含了一个“/”,这导致复制数据文件夹的所有内容,而不是文件夹本身。我停止了同步,删除了“/”,它按最初的预期运行。
答案1
仅当 Rsync 认为目标树中的副本与目标树中的副本相同时,才会避免复制文件。默认情况下,如果文件具有相同的大小和相同的修改时间,则假定它们是相同的。您可以传递选项-c
来让 rsync 计算校验和(这会慢很多,因为它必须读取目标树中的整个文件)。您可以传递选项--size-only
使 rsync 跳过两侧大小相同的文件,这是危险的,因为内容已更改但新版本与旧版本大小相同的文件将被跳过。
我怀疑您第一次制作副本时没有保留时间戳(例如您使用cp -r
而不是cp -rp
or cp -a
)。如果发生这种情况,rsync 将无法知道这些文件具有相同的内容。一旦运行rsync -a
结束,文件将具有相同的时间戳,因此 rsync 将知道不要再次复制它们。
时间戳也可能不相同,因为源文件系统和目标文件系统使用不同的时间戳粒度(例如秒与微秒),因此文件的修改时间类似于 2014-12-10 08:54:32.123465源端,但 2014-12-10 08:54:32 = 2014-12-10 08:54:32.000000 在目标端)。如果是这种情况并且 rsync 没有自动检测到它,请传递该选项--modify-window
,例如--modify-window=1
允许时间戳有 1 秒的容差。