「stat」コマンドは、ややクリーンな方法です。
statresult=`stat /my/mountpoint 2>&1 | grep -i "stale"`
if [ "${statresult}" != "" ]; then
#result not empty: mountpoint is stale; remove it
umount -f /my/mountpoint
fi
さらに、rpcinfo を使用して、リモートの nfs 共有が利用可能かどうかを検出できます。
rpcinfo -t remote.system.net nfs > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo Remote NFS share available.
fi
2013-07-15T14:31:18-05:00 を追加:
古いマウントポイントを認識する必要があるスクリプトにも取り組んでいるので、これをさらに調べました。「古くなった NFS マウントを検出する良い方法はありますか」に対する回答の 1 つに触発されて、bash で特定のマウントポイントの古さをチェックするには、次の方法が最も信頼できると思います。
read -t1 < <(stat -t "/my/mountpoint")
if [ $? -eq 1 ]; then
echo NFS mount stale. Removing...
umount -f -l /my/mountpoint
fi
「read -t1」コンストラクトは、何らかの理由で stat コマンドがハングした場合、サブシェルを確実にタイムアウトさせます。
2013-07-17T12:03:23-05:00 を追加:
動作しますがread -t1 < <(stat -t "/my/mountpoint")
、マウントポイントが古い場合にエラー出力をミュートする方法はないようです。> /dev/null 2>&1
サブシェル内またはコマンドラインの最後に追加すると、それが壊れます。簡単なテストを使用する:if [ -d /path/to/mountpoint ] ; then ... fi
これも機能し、スクリプトで使用することをお勧めします。多くのテストの後、それは私が最終的に使用したものです。
2013-07-19T13:51:27-05:00 を追加:
私の質問 " How can I use read timeouts with stat? " への回答には、ターゲットが利用できず、タイムアウトになる前にコマンドが数分間ハングする場合の stat (または rpcinfo) の出力のミュートに関する追加の詳細が記載されています。自分の。古いマウントポイントを[ -d /some/mountpoint ]
検出するために使用できますが、rpcinfo には同様の代替手段がないため、read -t1
リダイレクトの使用が最適なオプションです。サブシェルからの出力は2>&-でミュートできます。CodeMonkey の応答の例を次に示します。
mountpoint="/my/mountpoint"
read -t1 < <(stat -t "$mountpoint" 2>&-)
if [[ -n "$REPLY" ]]; then
echo "NFS mount stale. Removing..."
umount -f -l "$mountpoint"
fi
おそらく今、この質問は完全に答えられています:)。