Perl 文件::复制报告NFS写入错误失败?

Perl 文件::复制报告NFS写入错误失败?,perl,nfs,Perl,Nfs,我的Perl脚本使用File::Copy中的move函数将文件移动到安装了NFS的文件系统上。最近,一些文件返回错误,导致我的脚本打印消息“move返回0,路径名中的文件或目录不存在。”(move成功时返回1,出错时返回0,错误消息来自$!) 真正奇怪的是,处理文件的系统报告说它成功地处理了失败的文件!我以前从未看到过成功写入的错误消息,所以我想知道它是否与NFS有关。我觉得奇怪的是,在一次移动28个文件的运行中,前24个文件失败,最后4个文件成功。该脚本已经运行了几个月,没有出现任何错误,现在

我的Perl脚本使用File::Copy中的move函数将文件移动到安装了NFS的文件系统上。最近,一些文件返回错误,导致我的脚本打印消息“move返回0,路径名中的文件或目录不存在。”(move成功时返回1,出错时返回0,错误消息来自$!)

真正奇怪的是,处理文件的系统报告说它成功地处理了失败的文件!我以前从未看到过成功写入的错误消息,所以我想知道它是否与NFS有关。我觉得奇怪的是,在一次移动28个文件的运行中,前24个文件失败,最后4个文件成功。该脚本已经运行了几个月,没有出现任何错误,现在已经在两周内两次演示了这个问题


主机运行在AIX上,但我怀疑这会有什么不同。

我认为这是NFS问题,而不是Perl问题。NFS在某些情况下可能真的很奇怪

您应该统计/读取写入的文件,而不依赖于报告的错误

File::Copy::Reliable模块使用相同的错误处理,它将以相同的错误失败

表格来源:

copy( $source, $destination )
    || croak("copy_reliable($source, $destination) failed: $!");
只需将副本放入一个eval块,并尝试读取/统计目标中的文件

如果你真的很谨慎,你可以在两个文件上使用md5/sha1散列来确保它们是相同的


关于这一点,

尝试使用,因为在网络上工作会增加不稳定性。我认为您认为NFS是正确的。我查看了File::Copy中move函数的代码。它专门检查“重命名成功后是否返回错误,因为$to在远程NFS文件系统上,NFS丢失了服务器的ack?”因此,现在我只需要找出代码没有返回成功的原因。我们能够证明没有数据丢失,因此我们将密切关注该系统。如果这种情况再次发生,我可能会用自己的函数替换File::Copy::move,并进行大量的错误检查和日志记录。谢谢大家。