Script shell para validar o status do ponto de montagem no servidor linux

2

Estou precisando de um script que funcione como abaixo.

Um script onde seria validado se esse ponto de montagem específico estivesse atualmente montado no servidor. Ele procuraria por nome de ponto de montagem em /etc/fstab e validaria a partir de df -h output ou /proc/mounts para verificar se ele está montado no servidor (se você tiver uma maneira melhor de validar isso também).

Após a reinicialização, caso ela não seja montada, será acionado um email.

Para um servidor está tudo bem, mas isso será usado para validar mais de 1000 servidores, para que um script seja uma solução melhor.

Assim, o script seria executado em um servidor e verificaria o status do ponto de montagem em outro servidor de 1000.

O ponto de montagem no servidor está no nome de /mount1 , /mount2 , /mount3 etc. Precisamos validar apenas este nome específico do ponto de montagem, podemos ignorar outros FS relacionados ao SO.

O que eu tenho até agora:

#!/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
    
por Venom 12.09.2013 / 21:01

4 respostas

1

Eu recomendaria tentar isso em python. O módulo os.path embutido tem um recurso muito simples.

$ 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
    
por 14.11.2013 / 04:30
0

Tente algo assim. Primeiro, crie uma lista de IPs do servidor (isso pressupõe que você tenha ssh sem senha configurada e possa se conectar como root a todos os servidores) e, em seguida, execute este pequeno script (copie e cole na linha de comando):

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

Isso espera um arquivo chamado ips.txt com um IP por linha. Ele irá ssh para o IP, e enquanto o mount $MOUNT não estiver montado, ele tentará fazer isso. Certifique-se de substituir $MOUNT pelo ponto de montagem de seu interesse, ele deve aparecer exatamente como em /etc/fstab . Por exemplo:

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
    
por 13.09.2013 / 17:21
0
#!/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'
    
por 31.12.2013 / 06:06
0

O script fornecido pela LG funciona bem quando você altera o grep no for-loop para:

grep "$i " /proc/mounts.

Nesse caso, não retornará falsos positivos.

    
por 09.12.2014 / 11:59