我正在通过 SSH 在服务器上工作,需要使用以下命令将目录从服务器复制到 HPC rsync
:
rsync -a -q "sourcedir" "username@hpc:~/destdir/"
在这个例子中,sourcedir
在服务器上并包含一个包含小文件的子目录.csv
。 destdir
在 HPC 上不存在,但是由其创建rsync
(当它工作时)。
它大约有 3/4 的时间可以工作,但有时会因以下两个错误之一而失败:
“过时的文件句柄”:
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]
或者
‘文件 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 确实是罪魁祸首。如果可能,请切换到此类本地存储。
- 审查和调整 NFS
mount
选项,但更改这些选项可能会带来严重的性能或一致性问题 - 使用
--delay-updates
和--delete-delay
的选项rsync
,这可能有助于在传输阶段后进行一些清理和操作。但是,您可能会在线隐藏这些问题,并且它们可能会在某些时间条件下重新出现。
答案2
根据您上面提供的命令,问题似乎很简单删除 destdir 后的“/”,应该像这样:
rsync -a -q "sourcedir" "username@hpc:~/destdir"
如果您查看 rsync 的手册页,目标目录字符串中的尾随“/”明确告诉 rsync 期望该目录是预先存在的,并阻止 rsync 动态创建它。
如果如果你在 rsync 之前删除了该目录,你可能还想强制使用文件系统“同步“,首先在源主机上,然后在镜像主机上,前尝试 rsync。
最后,你当然在继续操作之前,您是否成功删除了该目标目录?您是否实际测试过以重新确认您的删除操作确实有效?
只需询问您可能想要合并到脚本逻辑中的明显的操作和测试。