我设置了一个备份脚本,用于通过 ssh 将各种文件从一台机器复制到另一台机器。两端都使用 Ext4,但接收端在 USB 大容量存储设备上使用它(如果这有区别的话)。我遇到的问题是,每次运行脚本时,一些看似随机的文件都会被列为正在重新复制,即使它们没有被修改。我可以查看目标,时间戳已更新为复制期间的“现在”,但文件没有更改。
我发现这个帖子关于与 NTFS 进行 rsync 的类似问题,但那里的时间戳问题不应该适用于 Ext4。为了以防万一,我尝试了 --modify-window(没有用)和 -u神秘地起作用了。
权限不应该是问题,因为发送端的用户与接收端的用户相同,并且我没有指定任何类型的保留。这是我的命令行:
rsync -rvz --no-g --links --safe-links --delete-after --delete-excluded [source] [destination]
我已经验证删除和压缩选项不会通过暂时删除它们造成干扰;我仍然得到重新复制的相同随机文件。
以下是重新复制的文件的示例列表:
来源(仅列出相关文件)
/home/lytithwyn/Documents/:
-rw-rw-r-- 1 lytithwyn lytithwyn 11754 2012-08-04 13:44 family birthdays.ods
-rw-rw-r-- 1 lytithwyn lytithwyn 12897 2012-08-17 09:23 youth_fund.ods
rsync 输出
building file list ... done
Documents/family birthdays.ods
Documents/youth_fund.ods
复制后的目的地(仅列出相关文件)
/mattbackup/lithboxhome/Documents/:
-rw-rw-r-- 1 lytithwyn lytithwyn 11754 Aug 17 09:49 family birthdays.ods
-rwxr-xr-x 1 lytithwyn lytithwyn 12897 Aug 17 09:49 youth_fund.ods
就像在另一篇文章中一样,-u 修复了这个问题,但感觉像是一个临时解决方案。有人知道是什么吗真的发生了什么事?现在我看看它,我也不确定目标上的随机执行权限是怎么回事。
答案1
rsync 默认使用文件时间戳来检测变化。
你有两个选择
- 在 rsync 命令中添加 -t,以便将时间戳与文件一起复制
- 在 rsync 命令中添加 -c 强制 rsync 使用文件的校验和而不是时间戳来检测更改。