web-dev-qa-db-fra.com

"Handle de fichier NFS périmé" après le redémarrage

Sur le nœud du serveur, il est possible d'accéder à un dossier exporté. Cependant, après les redémarrages (serveur et client), le dossier n'est plus accessible à partir des clients.

Sur le serveur

# ls /data
Folder1
Forlder2

et le fichier/etc/exports contient

/data 192.168.1.0/24(rw,no_subtree_check,async,no_root_squash)

Sur le client

# ls /data
ls: cannot access /data: Stale NFS file handle

Je dois dire qu'il n'y a pas eu de problème avec le dossier partagé côté client mais après les redémarrages (serveur et client), je vois ce message.

Une façon de résoudre ce problème?

16
mahmood

L'ordre des redémarrages est important. Le redémarrage du serveur après que les clients peuvent entraîner cette situation. Le descripteur NFS périmé indique que le client a un fichier ouvert, mais le serveur ne reconnaît plus le descripteur de fichier. Dans certains cas, NFS nettoiera ses structures de données après un délai d'expiration. Dans d'autres cas, vous devrez nettoyer vous-même les structures de données NFS et redémarrer NFS par la suite. L'endroit où ces structures sont situées dépendent quelque peu de l'O/S.

Essayez de redémarrer NFS d'abord sur le serveur, puis sur les clients. Cela peut effacer les descripteurs de fichiers.

Le redémarrage des serveurs NFS avec des fichiers ouverts à partir d'autres serveurs n'est pas recommandé. Cela est particulièrement problématique si le fichier ouvert a été supprimé sur le serveur. Le serveur peut garder le fichier ouvert jusqu'à ce qu'il soit redémarré, mais le redémarrage supprimera le descripteur de fichier en mémoire côté serveur. Le client ne pourra alors plus ouvrir le fichier.

Déterminer quels supports ont été utilisés à partir du serveur est difficile et peu fiable. Le showmount -a L'option peut afficher certaines montures actives, mais peut ne pas toutes les signaler. Les fichiers verrouillés sont plus faciles à identifier, mais nécessitent que le verrouillage soit activé et s'appuie sur le logiciel client pour verrouiller les fichiers.

Vous pouvez utiliser lsof sur les clients pour identifier les processus qui ont des fichiers ouverts sur les montages.

J'utilise les options de montage hard et intr sur mes supports NFS. L'option hard provoque une nouvelle tentative de IO. L'option intr permet de tuer les processus s'ils attendent sur NFS IO pour terminer.

22
BillThor

Essayez ce script que j'ai écrit:

#!/bin/bash
# Purpose:
# Detect Stale File handle and remove it
# Script created: July 29, 2015 by Birgit Ducarroz
# Last modification: --
#

# Detect Stale file handle and write output into a variable and then into a file
mounts=`df 2>&1 | grep 'Stale file handle' |awk '{print ""$2"" }' > NFS_stales.txt`
# Remove : ‘ and ’ characters from the output
sed -r -i 's/://' NFS_stales.txt && sed -r -i 's/‘//' NFS_stales.txt && sed -r -i 's/’//' NFS_stales.txt

# Not used: replace space by a new line
# stales=`cat NFS_stales.txt && sed -r -i ':a;N;$!ba;s/ /\n /g' NFS_stales.txt`

# read NFS_stales.txt output file line by line then unmount stale by stale.
#    IFS='' (or IFS=) prevents leading/trailing whitespace from being trimmed.
#    -r prevents backslash escapes from being interpreted.
#    || [[ -n $line ]] prevents the last line from being ignored if it doesn't end with a \n (since read returns a non-zero exit code when it encounters EOF).

while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Unmounting due to NFS Stale file handle: $line"
    umount -fl $line
done < "NFS_stales.txt"
#EOF
4
Birgit Ducarroz

Sur le serveur NFS, exportez UN et réexportez le système de fichiers:

exportfs -u nfs-server:/fichier_system exportfs nfs-server:/fichier_system

Sur le client, montez le système de fichiers

mount -t nfs nfs-server:/système de fichiers/mount_point

2
Chin

vérifier lsof du chemin spécifique et tuer le pid correspondant. Démontez ensuite la partition et remontez-la.

0
sridhar gattu