Linuxサーバーのマウントポイントの状態を確認するシェルスクリプト

Linuxサーバーのマウントポイントの状態を確認するシェルスクリプト

次のように動作するスクリプトが必要です。

この特定のマウントポイントが現在サーバーにマウントされていることを確認するスクリプト。マウントポイント名を検索し、出力/etc/fstabdf -h確認するか、/proc/mountsサーバーにマウントされていることを確認します(検証するためのより良い方法がある場合でも問題ありません)。

再起動後にインストールされていない場合は、電子メールがトリガーされます。

1つのサーバーであれば問題ありませんが、1000を超えるサーバーを認証するために使用されるため、スクリプトはより良いソリューションになります。

したがって、スクリプトはあるサーバーで実行され、別の1000サーバーでマウントポイントの状態を確認します。

サーバーのマウントポイント名は等です/mount1。特定のマウントポイント名と他のOS関連FSを無視できることを確認してください。/mount2/mount3

私が今まで持っているもの:

#!/bin/bash

# Grep for word mountpoint name ie "mount" 
awk '{print $2}' /etc/fstab | grep -i "mount" > mntpoint.txt
exec 3< mntpoint.txt

while read mount <&3
do
# Search for present mountpoint in file /prod/mounts.
# I'm using /proc/mounts here to validate

grep -iw $mount /proc/mounts > /dev/null

if [ $? -eq 0 ]
then
    echo $mount "is mounted"
else
    echo $mount "is not mounted needs manual intervention"
fi
done

答え1

Pythonで試してみることをお勧めします。組み込みos.pathモ​​ジュールには非常にシンプルなismount機能があります。

$ cat ismount.py 
import os
mp = '/mount1'
if os.path.ismount(mp):
    print('{0} is mounted'.format(mp))
else:
    print('{0} is NOT mounted'.format(mp))
$ python ismount.py 
/mount1 is NOT mounted

答え2

これを試してみてください。まず、サーバーIPリストを作成し(パスワードなしのSSHが設定されており、すべてのサーバーにrootとして接続できるとします)、次の小さなスクリプトを実行します(コピーしてコマンドラインに貼り付けます)。

while read ip;
do
    echo "connecting to $ip";
    ssh root@$ip "until mount | grep -w \"$MOUNT\" >/dev/null;
     do echo mounting \"$MOUNT\"; mount \"$MOUNT\"; sleep 1; done && 
     echo Mounted on $ip"
done < ips.txt

ips.txtこれには、1行に1つのIP呼び出しを含むファイルが必要です。sshIPに移動してマウントがマウントされていない場合は、マウント$MOUNTを試みます。$MOUNT興味のあるマウントポイントと交換したことを確認してください。実際と同じように見えるはずです/etc/fstab。たとえば、

while read ip;
do
    echo "connecting to $ip";
    ssh root@$ip "until mount | grep -w \"/mnt/data\" >/dev/null;
     do echo mounting \"/mnt/data\"; mount \"/mnt/data\"; sleep 1; done && 
     echo Mounted on $ip"
done < ips.txt

答え3

#!/bin/bash

A=``awk '{print $2}' /etc/fstab | grep -i "^/" | egrep -v '/etc/fstab|proc|sys|shm|pts`'`

`for i in $A; do
grep $i /proc/mounts > /dev/null`

`if [ $? -eq 0 ]; then
    echo $i "is mounted"
else
    echo $i "is not mounted needs manual intervention"
fi
done`

答え4

forループのgrepを次のように変更すると:

grep "$i " /proc/mounts.

この場合、偽陽性は返されません。

関連情報