我希望将挂载在Linux机器的NTFS分区上的数据备份到另一台linux机器的NTFS分区。 本地NTFS驱动器挂载了root.root拥有的所有文件,但远程NTFS驱动器使用plugdev挂载(因此文件所有权为root.plugdev)。
在这种情况下,rsync显然可以不复制所有者/组和权限信息,所以我一直在尝试运行
sudo rsync -rltDvO --delete /ntfs/src/ [email protected]:/ntfs/dest/
但是,每次运行此命令时,都会重新复制所有文件,而不是仅传输已更改的文件。 我曾尝试使用 – 修改窗口标志,但是这也没有帮助。
更新:它不是重新复制所有文件,而是重新计算每个文件的校验和(或进行一些其他处理,导致文件名被打印)。 这与e2fs驱动器之间发生的情况相反,如果自上次rsync以来没有对源和目标进行更改,则不会显示文件名。 我猜这个处理是因为时间戳在NTFS(?)上不可用
下一次更新:权限当然似乎是其中的一部分:首先,也使用-u作为rsync标志停止处理目标上的所有文件,但这不是我想要的。 其次,如果我在远程计算机上使用具有root权限(和rsync标志-avz)的帐户,则实际上可以更改文件和目录上的时间戳。 然而,一些文件继续被重新复制,并且–modify-window似乎对此有所帮助(但是并不完全,似乎 – 我仍然在试着找出原因)。
根据我的第二次更新,我的用户的权限不允许我设置时间。 使用目标机器上的root帐户运行rsync,以及--modify-window=5给了我合适的行为。 (如果目标上没有root访问权限,-u标志可能会有所帮助,但前提是您确定没有人会更改远程系统上的文件。)
理想情况下,您总是希望使用robocopy因为它可以处理时间戳的变化(对FAT最多2秒)。 你可以在Wine里面运行,但连接到远程主机可能不方便。
http://technet.microsoft.com/en-us/library/cc733145(WS.10).aspx
编辑:每个史蒂夫的评论,这个function现在出现在rsync 3.0:
–modify窗口
当比较两个时间戳时,如果时间戳相差不超过修改窗口值,则rsync会将时间戳视为相等。 这通常是0(完全匹配),但在某些情况下,您可能会发现将它设置为较大的值会很有用。 尤其是,当转移到或从MS Windows FAT文件系统(代表2秒的分辨率时间)时,–modify-window = 1是有用的(允许时间相差最多1秒)。
在这种情况下,我发现了一个额外的消息:标准时间与夏令时间。 在一年的时区更改之后,我在rsync开始同步时有一堆文件。 我用–modify窗口= 3605,它解决了这个问题。 缺点是它会忽略一个小时内修改date的文件。 在我的情况下,除了每隔几天或几周,文件就不会有变化,所以没有问题。