打印或骰子:如何检查GPFS网络安装文件是否可用

时间:2015-02-12 20:38:51

标签: perl networking filesystems system

我有一个Perl脚本,可以写入位于GPFS网络安装存储点上的文件。有一个标准支票open FILE or die $!

文件系统崩溃了,但脚本没有退出;它一直在努力写作。文件系统恢复后,Perl脚本完成。如何检查是否可以写入文件系统,如果不能,则die

我问这个的原因是因为我的Perl脚本的最后一行删除了文件的.tmp扩展名。永远不应该达到这种说法,因为在某一时刻,脚本的输出不会到达任何地方。 GPFS在写入点上有所下降,但读取点仍在上升。

1 个答案:

答案 0 :(得分:5)

print有一个返回码。大多数人都不愿意检查它。但确实有一个。

http://perldoc.perl.org/functions/print.html

  

打印   打印字符串或字符串列表。如果成功则返回true。

是的,你可以做'打印或死'。但你确实需要确保正确地将它括起来,所以'或'与正确的表达联系在一起。

print 0 || warn "1 failed";
print 0 or warn "2 failed";

这将给出两个不同的结果,因为前者的测试'零。后者测试print。如果您将印刷品包括在内,那么这并不重要,为了清晰起见,这可能是理想的。

因此,如果进行测试 - 您可以这样做:

open ( my $fh, "<", "bad_open" ); #opens read only, so prints will fail. 

print {$fh} 0,1,2 || warn "1 failed";
print {$fh} 1,2,3  or warn "2 failed";

(我打算建议autodie,但遗憾的是它并未适用于print。)

或者,查看GPFS的联机帮助页:

http://www-01.ibm.com/support/knowledgecenter/SSFKCN_3.5.0/com.ibm.cluster.gpfs.v3r5.gpfs100.doc/bl1adm_gsmo.htm

我可以建议检查您的挂载选项吗?您的GPFS NFS是否已安装在您的客户端上?

考虑到这一点,GPFS不支持soft像NFS一样安装。根据设计,soft挂载将无法写入瞬态错误,其中hard挂载将在挂载脱机时阻塞。

hard是默认设置,因为这样可以避免数据损坏 - 任何写入操作都会阻塞,直到安装恢复为止。它看起来像hanging可能会出现不合需要的情况,但请记住,它可以极大地提高数据的完整性。

我不知道是否可以轻松测试“停滞不前”的情况。从脚本中硬安装。如果您通过NFS网络安装GPFS,您可能会发现只需将其安装为soft(可能使用单独的安装点并安装两次,如果它会影响其他安装点)。