ls trava após a reinicialização do servidor NFS

ls trava após a reinicialização do servidor NFS

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

informação relacionada