![ls trava após a reinicialização do servidor NFS](https://rvso.com/image/515017/ls%20trava%20ap%C3%B3s%20a%20reinicializa%C3%A7%C3%A3o%20do%20servidor%20NFS.png)
Eu tenho o servidor A e o servidor B. B atua como um servidor nfs, A é montado em B.
Ambos estão rodando no EC2.
Às vezes tenho que desligar B e iniciar uma nova instância (instância idêntica). Após o backup de B, tentar fazer qualquer coisa dentro do diretório montado em A (ls, por exemplo) simplesmente trava.
Estou tentando configurar um cron que verifica o status da montagem e remonta se algo estiver errado.
Existe alguma maneira de verificar o status de uma montaria?
Responder1
Você pode bifurcar, fazer com que o filho entre no diretório e depois saia do filho. Faça com que o pai monitore a existência do processo filho com um tempo limite. Se você tiver uma montaria obsoleta, o filho não conseguirá sair e ficará por muito tempo, então o tempo limite ocorrerá no pai. Faça com que o pai mate -9 o filho e tente desmontar.
O problema que você pode enfrentar, porém, é que se qualquer outro processo estiver usando um arquivo que está na montagem quebrada, você não poderá desmontá-lo sem primeiro eliminar esses processos. Você pode (frequentemente) descobrir se algum processo está usando recursos indisponíveis em uma montagem obsoleta com lsof ou fuser.
Eu evitaria matar automaticamente processos arbitrários; envie uma notificação para você mesmo para investigar mais detalhadamente manualmente.
Para reduzir a probabilidade de isso ocorrer, você pode procurar o montador automático, que não montará o volume até que seja necessário/um recurso no servidor seja solicitado e o desmontará automaticamente quando não for mais necessário.
- a propósito, para tornar isso mais pesquisável, você pode marcar isso com as palavras obsoleto, preso, nfs e montagem. Este fenômeno não é específico do uso do ec2.
Responder2
Percebi que quando o servidor NFS reinicia, ele muda de ip, portanto a montagem não funcionava.
Escrevi este script que verifica se o ip do host NFS é o ip atualmente usado na montagem, caso contrário, ele desmonta e remonta. Pode ajudar alguém no futuro.
#!/bin/bash
NFS_HOST=$(mount | grep nfs | awk '{ print $1 }' | cut -d ":" -f 1)
NFS_HOST_PATH=$(mount | grep nfs | awk '{ print $1 }' | cut -d ":" -f 2)
host $NFS_HOST
if [[ $? -ne 0 ]]; then
echo "NFS host $NFS_HOST doesn't exist!"
exit 2
fi
MOUNT_POINT=$(mount | grep $NFS_HOST | awk '{ print $3 }')
NFS_IP=$(host $NFS_HOST | awk '{ print $4 }')
mount | grep "$NFS_IP"
if [[ $? -ne 0 ]]; then
umount -fl $MOUNT_POINT
mount "$NFS_HOST:$NFS_HOST_PATH" $MOUNT_POINT
fi