为什么当源没有改变时 rsync 会更新 NTFS 目录?

为什么当源没有改变时 rsync 会更新 NTFS 目录?

我正在上很多涉及语音和语法分析的课程。他们给了我一个 Windows 10 网络帐户。由于我更习惯使用 Mac 和 Linux(而且 Windows 可用时间有限),所以我在 Mac 笔记本电脑上完成工作。

我自动挂载了我的 NTFS 目录,但是它们的 LAN 有点不稳定,因此很多时候某些应用程序只有只读访问权限或者根本没有访问权限。

因此,我在本地副本中工作,并且经常同步更改。但 rsync* 始终会更新每个 NTFS 目录 — 仅更新目录,从不更新任何文件(除了我实际更改的文件)。大多数目录,我从未导航过,但同步报告子目录树中的所有更新。这不是主要问题 — 几秒钟内即可完成 — 但仍然很奇怪。

Windows 和 NTFS 对从未访问过的目录做了什么,让 rsync 认为它们已经改变?

答案1

允许以较低的精度比较 mod-time

在这种类型的设置中,当您安装到 NTFS 分区时,您要确保使用适当的参数,例如--modify-window=5增加默认值以允许比较降低精度的 mod 时间。

--modify-window 

    When comparing two timestamps, rsync treats the timestamps as
    being equal if they differ by no more than the modify-window value. This 
    is normally 0 (for an exact match), but you may find it useful to set 
    this to a larger value in some situations. In particular, when
    transferring to or from an MS Windows FAT filesystem (which represents               
    times with a 2-second resolution), --modify-window=1 is useful (allowing 
    times to differ by up to 1 second).

更多资源

答案2

首先回答程序只读问题。由于网络共享由 Windows 控制,因此 Windows 仅允许某些用户有权限执行操作。它可能是公共共享,即任何人都可以查看它以下载文件等,但除非特别添加才能更改它。由于您使用的是与 Linux 类似的 Mac。并非您使用的每个 Linux 应用程序都使用与您当前在 Mac 或 Linux 上登录的用户名相同的用户名。因此,由于该程序未使用您的登录用户名,因此由于用户名不匹配,因此它没有根据 Windows 编辑文件的权限。

其次,Rsync 是递归的。也就是说,它将遍历所有目录。除非您将其限制在特定目录中,但即使您将其限制在 1 个目录中,它仍将继续遍历它从中启动的目录中的所有目录。这就是它的设计目的。因此它被称为递归同步。现在更新目录而不是文件的原因可能是 rysnc 如何从目录中获取时间戳。可能是因为它的 Windows 10 目录没有修改或访问的时间戳,只有目录创建的时间戳,而文件确实有所有这些时间戳,这是 rsync 用来确定是否需要更新目录或文件的时间戳。

相关内容