【问题标题】:File::Copy reports incorrect failure on NFS write?File::Copy 在 NFS 写入时报告不正确的失败?
【发布时间】:2012-06-13 02:01:15
【问题描述】:

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

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

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

【问题讨论】:

标签: perl nfs


【解决方案1】:

我认为这是 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 丢失了服务器的确认?”的情况。所以现在我只需要弄清楚为什么代码没有返回成功。
  • 我们能够证明没有数据丢失,因此我们将密切关注系统。如果再次发生这种情况,我可能最终会用我自己的函数替换 File::Copy::move,并进行大量的错误检查和记录。谢谢大家。
猜你喜欢
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-16
  • 2012-10-13
  • 2018-08-30
  • 2022-01-04
  • 2016-08-25
  • 1970-01-01
相关资源
最近更新 更多