一尘不染

是否有检测过时的NFS挂载的好方法

linux

我有一个仅在成功完成几个测试后才能启动的过程。

我需要进行的一项测试是,我所有的NFS挂载均正常运行。

我能做得比蛮力方法更好吗:


mount | sed -n "s/^.* on \(.*\) type nfs .*$/\1/p" | 
while read mount_point ; do 
  timeout 10 ls $mount_point >& /dev/null || echo "stale $mount_point" ; 
done

timeout是一个实用程序,它将在后台运行命令,并在给定时间后将其杀死(如果SIGCHLD在时间限制之前未捕获到该命令),则以明显的方式返回成功/失败。


用英语:解析输出mount,检查每个NFS安装点(有一个超时)。可选地(不在上面的代码中)在第一个陈旧的挂载上中断。


阅读 324

收藏
2020-06-07

共1个答案

一尘不染

您可以编写一个C程序并检查ESTALE

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <iso646.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>

int main(){
    struct stat st;
    int ret;
    ret = stat("/mnt/some_stale", &st);
    if(ret == -1 and errno == ESTALE){
        printf("/mnt/some_stale is stale\n");
        return EXIT_SUCCESS;
    } else {
        return EXIT_FAILURE;
    }
}
2020-06-07