从服务器复制到 HPC 时,rsync 偶尔会出现“过时的文件句柄”或“文件 IO 错误”的错误

从服务器复制到 HPC 时,rsync 偶尔会出现“过时的文件句柄”或“文件 IO 错误”的错误

我正在通过 SSH 在服务器上工作,需要使用以下命令将目录从服务器复制到 HPC rsync

rsync -a -q "sourcedir" "username@hpc:~/destdir/"

在这个例子中,sourcedir在服务器上并包含一个包含小文件的子目录.csvdestdir在 HPC 上不存在,但是由其创建rsync(当它工作时)。

它大约有 3/4 的时间可以工作,但有时会因以下两个错误之一而失败:

  1. “过时的文件句柄”:

    rsync: recv_generator: failed to stat "/home/u27/username/destdir/path/to/file.csv": Stale file handle (116)
    rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1196) [sender=3.1.2]
    

或者

  1. ‘文件 IO 错误’错误

    rsync: mkdir "/home/u27/username/destdir" failed: File exists (17)
    rsync error: error in file IO (code 11) at main.c(656) [Receiver=3.1.2]
    

陈旧文件句柄错误 (1) 比文件 IO 错误 (2) 发生的频率更高。

环境:

  • 主机是 OpenStack 上运行 Ubuntu 18.04.6 的虚拟机。数据存储在已安装的卷中。虚拟机和数据均托管在 OpenStack 上。
  • HPC 运行 CentOS Linux 7,并通过堡垒主机通过 SSH 访问。

我怀疑问题出在主机上,而不是 HPC 上,因为我无法在运行 macOS 的笔记本电脑上重现此错误。我可以使用为将文件传输到 HPC 而设置的 sftp 以及通过 ssh 来重现此问题。

有什么想法可能导致这种情况,或者我可以采取哪些进一步的步骤来调试或消除此错误?

交叉发布于此处:https://github.com/WayneD/rsync/discussions/415

更新:无论是否带有尾随“/”,我都可以重现此问题username@hpc:~/destdir/

答案1

根据提供的元素,问题可能是由于目标destdir是 NFS 挂载造成的。该rsync命令尝试删除/重新创建条目,而 NFS 层延迟最终导致文件系统视图不一致。

一些可能的措施:

  • 在服务器上的本地目录上运行相同的命令,以确保 NFS 确实是罪魁祸首。如果可能,请切换到此类本地存储。
  • 审查和调整 NFSmount选项,但更改这些选项可能会带来严重的性能或一致性问题
  • 使用--delay-updates--delete-delay的选项rsync,这可能有助于在传输阶段后进行一些清理和操作。但是,您可能会在线隐藏这些问题,并且它们可能会在某些时间条件下重新出现。

答案2

根据您上面提供的命令,问题似乎很简单删除 destdir 后的“/”,应该像这样:

rsync -a -q "sourcedir" "username@hpc:~/destdir"

如果您查看 rsync 的手册页,目标目录字符串中的尾随“/”明确告诉 rsync 期望该目录是预先存在的,并阻止 rsync 动态创建它。

如果如果你在 rsync 之前删除了该目录,你可能还想强制使用文件系统“同步“,首先在源主机上,然后在镜像主机上,尝试 rsync。

最后,你当然在继续操作之前,您是否成功删除了该目标目录?您是否实际测试过以重新确认您的删除操作确实有效?

只需询问您可能想要合并到脚本逻辑中的明显的操作和测试。

相关内容