Chaque fois que j'essaie de monter un partage NFS, j'obtiens ceci:
>> mount -t nfs gitlab-replica-storage.blah.com:/export/registry-gitlab-prod-data-vol /mnt/test
mount.nfs: Stale file handle
Le problème est que je ne peux pas démonter, comme il est dit:
>> umount -f -l /mnt/test
umount: /mnt/test: not mounted
J'ai essayé de vérifier si un processus utilisait le point de montage, mais ce n'est pas le cas.
Une autre alternative pour résoudre ce problème?
À titre de clarification:
L'erreur, ESTALE, a été initialement introduite pour gérer la situation où un descripteur de fichier, que NFS utilise pour identifier de manière unique un fichier sur le serveur, ne fait plus référence à un fichier valide sur le serveur. Cela peut se produire lorsque le fichier est supprimé sur le serveur, soit par une application sur le serveur, un autre client accédant au serveur, ou parfois même par un autre système de fichiers monté du même client. Le serveur NFS renvoie également cette erreur lorsque le fichier réside sur un système de fichiers qui n'est plus exporté. En outre, certains serveurs NFS modifient même le descripteur de fichier lorsqu'un fichier est renommé, bien que cette pratique soit déconseillée.
Cette erreur se produit même si un fichier ou un répertoire du même nom est recréé sur le serveur sans que le client en soit conscient. Le descripteur de fichier fait référence à une instance spécifique d'un fichier et la suppression du fichier, puis sa recréation crée une nouvelle instance du fichier.
L'erreur, ESTALE, apparaît généralement lorsque les informations de répertoire mises en cache sont utilisées pour convertir un chemin d'accès en une paire dentry/inode. Les informations sont obsolètes ou périmées lorsqu'une opération ultérieure est envoyée au serveur NFS. Cela peut facilement se produire dans les appels système tels que stat (2) lorsque le chemin d'accès est converti en une paire dentry/inode à l'aide des informations mises en cache, mais un appel GETATTR ultérieur au serveur découvre que le descripteur de fichier n'est plus valide.
Cette erreur peut également se produire lorsqu'une modification est effectuée sur le serveur entre la recherche de différents composants du nom de chemin à rechercher ou entre une recherche réussie et une opération ultérieure.
Lien original sur ESTALE: ESTALE LWN .
Je vous suggère de vérifier les fichiers et les répertoires sur le serveur NFS ou de dire à l'administrateur du serveur NFS de le faire.
Peut-être que certaines anciennes entrées de cache de pagecache, d'inode et de dentry existent sur le serveur NFS. Veuillez le nettoyer:
# To free pagecache
echo 1 > /proc/sys/vm/drop_caches
# To free dentries and inodes
echo 2 > /proc/sys/vm/drop_caches
# To free pagecache, dentries and inodes
echo 3 > /proc/sys/vm/drop_caches
UNE mount -t nfs
échoue avec Stale file handle
si le serveur a des entrées d'export périmées pour ce client.
Exemple de scénario: cela peut se produire lorsque le serveur redémarre sans que le client démonte d'abord les volumes nfs. Lorsque le serveur est de retour et que le client démonte puis essaie de monter le volume nfs, le serveur peut répondre avec:
mount.nfs: Stale file handle
Vous pouvez vérifier cela en consultant /proc/fs/nfs/exports
ou /proc/fs/nfsd/exports
. S'il y a une entrée pour le client, elle peut être périmée.
Vous pouvez résoudre ce problème en annulant explicitement la réexportation et en réexportant les exportations pertinentes sur le serveur. Par exemple, pour ce faire avec toutes les exportations:
# exportfs -ua
# cat /proc/fs/nfs/exports
# exportfs -a
Après cela, le client mount -t nfs ...
devrait réussir.
Notez que le montage produisant ESTALE
est assez différent de certains autres appels système (comme open/readdir/unlink/chdir ...) renvoyant ESTALE
. Il s'agit d'une exportation périmée par rapport à un descripteur de fichier périmé. Un descripteur de fichier périmé se produit facilement avec NFS (par exemple, un client possède un descripteur de fichier mais le fichier a été supprimé sur le serveur).
Recherchez l'entrée de montage périmé sur le serveur NFS:
showmount -a | grep ip_address_of_nfs_client
Si vous voyez des lignes liées à l'adresse IP du client NFS et au partage que vous essayez de monter, supprimez les entrées périmées du rmtab:
vi /var/lib/nfs/rmtab
Rechargez le rpc.mountd pour qu'il voit le nouveau rmtab:
killall rpc.mountd ; /usr/sbin/rpc.mountd
Vérifiez si l'exportation est réellement montée:
# cat /proc/mounts | grep nfs
Une erreur de gestion de fichier obsolète signifie que le serveur NFS contient une ancienne version des fichiers dans son chemin d'exportation. Un redémarrage du serveur NFS peut parfois aider. Mais avec les anciens systèmes d'exploitation (RHEL/CentOS 6.9), il est parfois préférable de revenir à NFS3 au lieu de NFS4. D'après mon expérience, les anciens clients NFS4 ont parfois des difficultés avec les nouveaux serveurs NFS4.1. Cela est particulièrement vrai pour le verrouillage de fichiers.