今晚我发现一些 rsync 备份没有按预期工作。有关信息,我们使用 rsync 版本 3.1.2,带有 options -rulv
。
简而言之,在我们服务器的硬盘之一上,我们有充满文件的目录;其中一些文件偶尔会符号链接到另一个位置一段时间(实际上是 SSD 缓存),然后其中一些文件稍后会再次恢复为普通文件。 (FWIW,我们使用绝对符号链接指向缓存。我已从远程备份框中检索了一个样本,并验证了绝对符号链接是否已保留。)
我现在意识到数据的远程副本包含符号链接,这些符号链接已恢复为本地服务器上的纯文件。这意味着常规 rsync 进程在某种程度上不会用纯文件覆盖远程符号链接。同样清楚的是,它一定在某个时刻用符号链接覆盖了远程纯文件,所以奇怪的是它不愿意逆转这个过程。
我已阅读 rsync 手册页,但无法(a)理解这种行为或(b)确定是否存在选项组合,可以在这种情况下执行“正确”的操作。通过“正确”的事情,我的意思是当本地端有符号链接时覆盖远程纯文件[已经成功发生],并在本地端恢复为纯文件时覆盖远程符号链接[目前未发生]...
非常感谢指导!
答案1
为了将来遇到这个障碍的人们的利益......
好的,感谢 @meuh 的上述评论,我能够确认该-u
选项基本上是问题所在(加上我没有仔细考虑!)。
当我将符号链接恢复为纯文件时,不涉及复制;相反,我只是mv
将原始纯文件恢复为其原始名称,覆盖符号链接。由于这仅更新 ctime 而不是 inode 中的 mtime,并且由于 rsync 在-u
确定文件在接收器上是否较新时显然(并且并非不合理)会查看 mtime,因此它将旧的本地普通文件与较新的文件进行比较远程符号链接并正确决定不理会它。