我希望将安装在 Linux 计算机的 NTFS 分区上的数据备份到另一台 Linux 计算机的 NTFS 分区。本地 NTFS 驱动器上安装了 root.root 拥有的所有文件,但远程 NTFS 驱动器使用 plugdev 安装了(因此文件所有权为 root.plugdev)。
在这种情况下,rsync 显然无法复制所有者/组和权限信息,因此我一直在尝试运行
sudo rsync -rltDvO --delete /ntfs/src/ [email protected]:/ntfs/dest/
但是,每次我运行此命令时,它都会重新复制所有文件,而不仅仅是传输已更改的文件。我尝试使用 --modify-window 标志,但这也无济于事。
更新:它不是重新复制所有文件,而是重新计算每个文件的校验和(或进行其他处理,导致打印文件名)。这与 e2fs 驱动器之间发生的情况相反,如果自上次 rsync 以来没有对源和目标进行任何更改,则不会打印文件名。我猜这种处理是因为 NTFS 上没有时间戳(?)
下次更新:权限似乎确实是其中的一部分:首先,使用 -u 作为 rsync 标志也会停止对目标上所有文件的处理,但这不是我想要的。其次,如果我在远程计算机上使用具有 root 访问权限(和 rsync 标志 -avz)的帐户,我实际上可以更改文件和目录上的时间戳。但是,某些文件仍会继续被重新复制,而 --modify-window 似乎对此有所帮助(但似乎并不完全有帮助 - 我仍在尝试找出原因。)
答案1
根据我的第二次更新,我的用户的权限不允许我设置时间。使用目标计算机上的 root 帐户运行 rsync,并--modify-window=5
给了我合适的行为。(如果您在目标上没有 root 访问权限,则 -u 标志可能会有所帮助,但前提是您确定没有人会更改远程系统上的文件。)
答案2
理想情况下,您总是希望使用它,robocopy
因为它可以处理时间戳的变化(FAT 最多 2 秒)。您可以在 Wine 内部运行,但连接到远程主机可能会不方便。
http://technet.microsoft.com/en-us/library/cc733145(WS.10).aspx
编辑:根据 Steve 的评论,此功能现在似乎在 rsync 3.0 中:
--修改窗口
比较两个时间戳时,如果它们的差值不超过修改窗口值,rsync 会将这两个时间戳视为相等。该值通常为 0(表示精确匹配),但在某些情况下,将其设置为较大的值会很有用。特别是,在传输到 MS Windows FAT 文件系统或从 MS Windows FAT 文件系统传输数据时(该文件系统以 2 秒的精度表示时间),--modify-window=1 很有用(允许时间最多相差 1 秒)。
答案3
在类似情况下,我还发现了一个额外的小窍门:标准时间与夏令时。一年后,我在 rsync 中将一堆文件开始同步。我使用了 --modify-window=3605,解决了这个问题。缺点是它会忽略修改日期相差一小时内的文件。在我的例子中,这些文件预计不会更改,除非每隔几天或几周,所以这没问题。
答案4
我在 raspberry pi 上的本地 ext3 驱动器和本地 NTFS 驱动器之间使用“rsync -av”时遇到了同样的问题。我能够使用以下命令避免重新复制文件(如果不需要,可以省略“--delete-during”):
rsync -crv --no-perms --delete-during /path/to/source/* /path/to/destination/
使用 -c 的命令是很多速度较慢,但确实有效。请注意,在我的例子中,“/path/to/source/”仅包含一组子目录(即没有文件,只有目录);如果您不使用“--delete-during 标志”,则此注释无关紧要。