0

我在 Windows 下使用 cwRsync 5.4.1 x86 Free 并尝试将文件夹同步到网络驱动器。我执行以下命令:

rsync.exe -rLtv --delete --ignore-errors "/cygdrive/d/1/" "/cygdrive/z/ZipNB/"

其中 D 是本地驱动器,Z 是网络驱动器(连接到路由器的外部 HDD,RT-N16)执行几次会得到相同的结果:

>rsync.exe -rLtv --delete --ignore-errors "/cygdrive/d/1/" "/cygdrive/z/ZipNB/"
sending incremental file list
./
1.pdf

sent 11,893,922 bytes  received 38 bytes  1,829,840.00 bytes/sec
total size is 11,890,918  speedup is 1.00

我在文件夹中有一个文件,每次执行都会发送其内容。文件每次都是一样的,中间没有改变。

如果我添加其他参数 --size-only 它按预期工作:

>rsync.exe -rLtv --delete --ignore-errors --size-only "/cygdrive/d/1/" "/cygdrive/z/ZipNB/"
sending incremental file list
./

sent 72 bytes  received 22 bytes  188.00 bytes/sec
total size is 11,890,918  speedup is 126,499.13

两个目录的 DIR:

D:\1>dir
    Volume in drive D is XXX
    Volume Serial Number is XXXX-XXX

Directory of D:\1

08.12.2016  10:04    <DIR>          .
08.12.2016  10:04    <DIR>          ..
24.11.2016  18:31        11 890 918 1.pdf
           1 File(s)     11 890 918 bytes

Z:\ZipNB>dir
 Volume in drive Z is BackUp (at Portable)
 Volume Serial Number is XXXX-XXX

 Directory of Z:\ZipNB

08.12.2016  10:04    <DIR>          .
08.10.2016  20:40    <DIR>          ..
24.11.2016  18:31        11 890 918 1.pdf
           1 File(s)     11 890 918 bytes

我不确定,但我知道 rsync 默认情况下会通过修改时间和大小来验证文件。这两个文件似乎相同。但似乎 cwRsync 出于某种原因在 Z 驱动器的文件上获取/设置了错误的修改日期。如果两个目录都在本地驱动器上,cwRsync 可以正常工作。它只发生在网络驱动器上。

在 windows 属性中,1 秒内的修改时间存在差异,这可能会导致问题。 窗户属性

我仅以 1 个文件为例,只是为了简化输出,情况与任何数量的不同文件相同。它总是发送每个文件的完整内容。这里有什么问题,我该如何解决?

4

1 回答 1

1

我猜网络共享上的硬盘使用 FAT,因为来自File Times

比如FAT上create time的分辨率是10毫秒,而write time的分辨率是2秒,access time的分辨率是1day,所以是真正的access date。

这可以解释时差。

出于这种原因,rsync添加了--modify-window选项:

-@,--修改窗口

当比较两个时间戳时,如果它们的差异不超过 modify-window 值,rsync 会将它们视为相等。默认值为 0,仅匹配整数秒。如果您指定一个负值(并且接收器至少是 3.1.3 版),那么也会考虑纳秒。指定 1 对于复制到/从 MS Windows FAT 文件系统很有用,因为 FAT 表示时间分辨率为 2 秒(允许时间与原始时间相差最多 1 秒)。

因此,尝试将-@1添加到您的命令中。

于 2016-12-14T19:06:55.683 回答