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

bio*_*ris 3 filesystems perl networking system

我有一个Perl脚本写入位于GPFS网络安装存储点的文件.有一个标准检查open FILE or die $!.

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

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

Sob*_*que 5

print有一个返回码.大多数人都懒得检查它.但确实有一个.

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

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

所以是的,你可以做'打印或死'.但是你确实需要确保正确地括起来,所以'或'与正确的表达相关联.

print 0 || warn "1 failed";
print 0 or warn "2 failed";
Run Code Online (Sandbox Code Playgroud)

这将给出两个不同的结果,因为前者'测试'为零.后者测试的地方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";
Run Code Online (Sandbox Code Playgroud)

(我打算建议,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(可能使用单独的安装点,如果这会影响其他安装点,则安装两次).