我们用来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