rsync 可以忽略由于 NFS 缓存不一致而发生的错误吗?

rsync 可以忽略由于 NFS 缓存不一致而发生的错误吗?

我在 Linux 上运行了一个进程,该进程会反复更新 NFS 文件系统上的文件。该进程将新数据写入临时文件(在同一 NFS 上),并调用rename()系统调用以将实时文件替换为新版本。

我有第二个rsync进程定期对文件进行快照。由于 NFS 缓存一致性问题,该rsync命令有时会发现文件不可用并退出并显示错误rsync: read errors mapping "/path/to/my/dir/foo": Stale file handle (116)

我如何告诉 rsync 忽略此错误并且不返回非零退出代码?我可以将其包装起来,|| true但我担心会错过其他重要错误。

笔记:

您可以通过在一台机器上的 NFS 目录中运行以下命令来重现此情况:
while true; do date > foo.tmp; mv foo.tmp foo; done

并且该命令在另一台机器上的同一目录中:

while true; do rm -f bar; rsync --quiet foo bar; done

第二条命令偶尔会打印如下错误

rsync: read errors mapping "/path/to/my/dir/foo": Stale file handle (116)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1189) [sender=3.1.3]

此问题仅发生在 NFS 上,并且写入器和快照程序位于不同的机器上。在大多数本地文件系统实现中,读取器进程始终可以访问该文件,因为rename()是原子的即使使用 NFS,如果您在同一台机器上运行上述两个命令,您永远不会看到错误,因为只涉及您的本地 NFS 缓存。

相关内容