每次通过 ssh 进行 Rsync 都会复制所有文件

每次通过 ssh 进行 Rsync 都会复制所有文件

我们用来rsync将一个外部驱动器备份到另一个外部驱动器。当两个驱动器连接到我们的 Ubuntu 机器时,它可以完美运行:

rsync -avzh --exclude='_quarantine'  /media/archive00/ /media/archiveX/archive00/

但是,当我们尝试在通过 ssh 连接到本地服务器的同一驱动器上执行相同的操作时,它每次都会尝试复制所有文件,而不是仅更新那些具有不同更新时间的文件:

rsync -avzh -e ssh --exclude='_quarantine' /media/archive00/ [email protected]:/media/archiveX/archive00/

当我包含该选项时的前 10 行-i

sending incremental file list
.d..t...... BTEVC/
<f..t...... BTEVC/Untitled41.mov
<f..t...... BTEVC/UntitledX100.mov
<f..t...... BTEVC/gfxCardStatus-2.3.zip
<f..t...... BTEVC/BTEVCformBook/aud.ECPP.SCAmp/0d20180825203546p+13057989928.m4a
<f..t...... BTEVC/BTEVCformBook/aud.ECPP.SCAmp/0d20180826210032p+13057989928.m4a
<f..t...... BTEVC/BTEVCformBook/aud.ECPP.SCAmp/0d20180827174045p+18002662278.m4a
<f..t...... BTEVC/BTEVCformBook/aud.ECPP.SCAmp/0d20180904171935p+12123769623.m4a
<f..t...... BTEVC/BTEVCformBook/aud.ECPP.SCAmp/0d20180905190057p+18593229553.m4a

答案1

一个根本问题是“两个驱动器都格式化为 exFAT“(来自评论)。

exFAT 文件系统只能将时间戳维持在两秒的分辨率,所以你需要告诉rsync这一点。

幸运的是,它有一个选项来管理这种不准确性:

--modify-window比较两个时间戳时,如果它们的差异不超过修改窗口值,则 rsync 会将时间戳视为相等。通常为 0(用于精确匹配),但您可能会发现在某些情况下将其设置为更大的值很有用。特别是,当与 MS Windows FAT 文件系统(以 2 秒分辨率表示时间)传输时,--modify-window=1非常有用(允许时间最多相差 1 秒)。

尝试rsync --modify-window=1 ...

答案2

从你的输出:

<f..t...... BTEVC/Untitled41.mov

小写字母t表示 rsync 正在(尝试)设置目标上的时间以匹配源。之后的所有内容f都是空白,表明它们匹配(因此您不必考虑用户权限是原因)。

您可能想要调查跑步前后的时间,看看它们有何不同。

建议:

  • 尝试--inplace。看看是否有什么变化
  • 复制单个文件(因此输出较小),然后增加详细程度。您-vvv可以看到它尝试将传输时间设置为类似于:

    [...]
    recv mapped dest.file of size 598
    got file_sum
    set modtime of .dest.file.5s3OoJ to (1573876681) Fri Nov 15 19:58:01 2019
    renaming .dest.file.5s3OoJ to dest.file
    [...]
    

查看该点附近是否报告了任何奇怪的情况(以及随后的实际时间戳是否匹配)

$ stat dest.file
  File: dest.file
  Size: 598             Blocks: 1          IO Block: 65536  regular file
Device: 8788005h/142114821d     Inode: 19140298416802240  Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (197609/ compusr)   Gid: (197121/    None)
Access: 2019-11-15 20:26:49.597544100 -0800
Modify: 2019-11-15 19:58:01.309978600 -0800
Change: 2019-11-15 20:26:49.598968100 -0800
 Birth: 2019-11-15 20:26:49.594376800 -0800

答案3

使用“-u”选项怎么样?这将仅更新较新的文件。

“-a”选项仅设置以下选项:

-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
...
-r, recursive
-l, links
-p, perms
-t, times
-g, groups
-o, owner
-D, device specials

使用“-u”选项,我只在复制新文件时从未遇到过任何问题。所以应该是:

rsync -avzhu -e ssh --exclude='_quarantine' /media/archive00/ [email protected]:/media/archiveX/archive00

相关内容