ls bleibt nach dem Neustart des NFS-Servers hängen

ls bleibt nach dem Neustart des NFS-Servers hängen

Ich habe Server A und Server B. B fungiert als NFS-Server, A wird von B aus gemountet.

Beide laufen auf EC2.

Manchmal muss ich B herunterfahren und eine neue Instanz (identische Instanz) starten. Nachdem B wieder läuft, bleibt der Versuch, irgendetwas im gemounteten Verzeichnis auf A zu tun (z. B. ls), einfach hängen.

Ich versuche, einen Cron einzurichten, der den Mount-Status überprüft und erneut mountet, wenn etwas nicht stimmt.

Gibt es eine Möglichkeit, den Status einer Halterung zu überprüfen?

Antwort1

Sie können einen Fork durchführen, das Kind in das Verzeichnis eintreten lassen und dann das Kind beenden. Lassen Sie den übergeordneten Prozess die Existenz des Kindprozesses mit einem Timeout überwachen. Wenn Sie eine veraltete Einbindung haben, kann das Kind nicht beendet werden und bleibt lange bestehen, sodass das Timeout im übergeordneten Prozess auftritt. Lassen Sie den übergeordneten Prozess das Kind mit kill -9 beenden und versuchen Sie, es auszuhängen.

Das Problem, das Sie möglicherweise haben, ist jedoch, dass Sie die Datei nicht aushängen können, wenn ein anderer Prozess eine Datei verwendet, die sich auf dem defekten Mount befindet, ohne zuerst diese Prozesse zu beenden. Sie können (häufig) mit lsof oder fuser feststellen, ob Prozesse auf einem veralteten Mount nicht verfügbare Ressourcen verwenden.

Ich würde allerdings das automatische Beenden beliebiger Prozesse vermeiden und mir selbst eine Benachrichtigung senden, um die Angelegenheit manuell weiter zu untersuchen.

Um die Wahrscheinlichkeit zu verringern, dass dies passiert, sollten Sie sich einen Automounter ansehen, der das Volume erst mountet, wenn es benötigt wird bzw. eine Ressource auf dem Server angefordert wird, und es automatisch unmountet, wenn es nicht mehr benötigt wird.

-- Übrigens, um die Suche zu erleichtern, können Sie dies mit den Wörtern „stale“, „stuck“, „NFS“ und „Mount“ taggen. Dieses Phänomen ist nicht spezifisch für Ihre Verwendung von ec2.

Antwort2

Mir ist aufgefallen, dass der NFS-Server beim Neustart seine IP ändert und die Bereitstellung deshalb nicht funktioniert.

Habe dieses Skript geschrieben, das prüft, ob die IP des NFS-Hosts die aktuell beim Mounten verwendete IP ist. Wenn nicht, wird es unmountet und neu mountet. Könnte in Zukunft jemandem helfen.

#!/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

verwandte Informationen