Linux 서버의 마운트 지점 상태를 확인하는 셸 스크립트

Linux 서버의 마운트 지점 상태를 확인하는 셸 스크립트

다음과 같이 작동하는 스크립트가 필요합니다.

이 특정 마운트 지점이 현재 서버에 마운트되어 있는지 확인하는 스크립트입니다. 마운트 지점 이름을 검색한 다음 출력 /etc/fstab에서 df -h​​확인 하거나 /proc/mounts서버에 마운트되었는지 확인합니다(검증할 수 있는 더 좋은 방법이 있는 경우에도 괜찮습니다).

다시 시작한 후 설치되지 않은 경우 이메일이 트리거됩니다.

하나의 서버이면 괜찮지만 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가 설정되어 있고 모든 서버에 루트로 연결할 수 있다고 가정) 다음 작은 스크립트를 실행합니다(복사하여 명령줄에 붙여넣기).

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이를 위해서는 한 줄에 하나의 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.

이 경우 거짓양성을 반환하지 않습니다.

관련 정보