循环测试所有 NFS 挂载点

loop to test all NFS mount point

此代码运行良好

mountpoint="/mnt/testnfs"
read -t1 < <(stat -t "$mountpoint" 2>&-)
if [ -z "$REPLY" ] ; then
echo "NFS mount stale. Removing..."
fi

如果我尝试将其放入循环中:

declare -a nfs_array=( "/mnt/testnfs1" "/mnt/testnfs2/" )

for i in "${nfs_array[@]}"
    do
        read -t1 < <(stat -t "$nfs_array" 2>&-)
        if [ -z "$REPLY" ] ; then
            echo "NFS dead"
        fi 
done

目的是测试所有挂载点,此代码仅测试和读取 nfs_array 中的第一个条目。如果我将 testnfs1 与 testnfs2 交换,此代码将测试 testnfs2 挂载点并忘记 testnfs1 :-(

在你的循环中它应该是:

read -r -t1 < <(stat -t "$i" 2>&-)

目前它只是读取第一个数组值,$i没有被使用。

如果你真的想列出 all nfs mounts(标题这么说),那么使用:

mount | grep ' type nfs' | ...

这可能有误报,因为挂载点或挂载路径包含 type nfs

如果/proc/文件系统可用,这是更好的方法:

awk ' ~ /^nfs/ {print}' /proc/mounts | ...

我不确定如果挂载点或挂载路径包含 space 会发生什么——我从来没有遇到过这种情况。