"Gestire il file NFS non aggiornato" dopo il riavvio


16

Sul nodo del server è possibile accedere a una cartella esportata. Tuttavia, dopo il riavvio (sia del server che del client), la cartella non è più accessibile dai client.

Sul server

# ls /data
Folder1
Forlder2

e il file / etc / exports contiene

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

Sul cliente

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

Devo dire che non ci sono stati problemi con la cartella condivisa dal lato client, tuttavia dopo il riavvio (server e client), vedo questo messaggio.

Un modo per risolverlo?

Risposte:


22

L'ordine dei riavvii è importante. Il riavvio del server dopo che i client possono causare questa situazione. L'handle NFS non aggiornato indica che il client ha un file aperto, ma il server non riconosce più l'handle del file. In alcuni casi, NFS pulirà le sue strutture di dati dopo un timeout. In altri casi, sarà necessario pulire personalmente le strutture di dati NFS e riavviare NFS in seguito. La posizione di queste strutture dipende in qualche modo da O / S.

Prova a riavviare NFS prima sul server e poi sui client. Questo potrebbe cancellare gli handle di file.

Non è consigliabile riavviare i server NFS con file aperti da altri server. Ciò è particolarmente problematico se il file aperto è stato eliminato sul server. Il server può mantenere aperto il file fino al riavvio, ma il riavvio rimuoverà l'handle del file in memoria sul lato server. Quindi il client non sarà più in grado di aprire il file.

Determinare quali montaggi sono stati utilizzati dal server è difficile e inaffidabile. L' showmount -aopzione potrebbe mostrare alcuni mount attivi, ma potrebbe non riportarli tutti. I file bloccati sono più facili da identificare, ma richiedono che il blocco sia abilitato e si basa sul software client per bloccare i file.

È possibile utilizzare lsofsui client per identificare i processi che hanno file aperti sui montaggi.

Uso le opzioni harde intrmount sui miei mount NFS. L' hardopzione causa un nuovo tentativo di IO a tempo indeterminato. L' intropzione consente di terminare i processi se sono in attesa su NFS IO per il completamento.


L'uso hard, intrè un buon consiglio. Tuttavia, si noti che NFS raddoppia i timeout ad ogni tentativo. Quindi è meglio impostare timeo=1e retrans=5così via. Si noti che questo sarà messo sforzo pesante sul vostro server NFS dopo NFS riavvio. Cerca di non riavviare il tuo servizio NFS così spesso;)
bjanssen

La tua risposta è corretta Ho anche trovato un'altra soluzione semplice. Sul nodo che dice il gestore NFS non aggiornato, basta smontare e rimontare nuovamente la cartella.
Mahmood,

4

Prova questo script che ho scritto:

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

2

Sul server NFS esportare UN ed riesportare il file system:

exportfs -u nfs-server: / file_system exportfs nfs-server: / file_system

Sul client montare il file system

mount -t nfs nfs-server: / filesystem / mount_point


0

controlla lsof del percorso specifico e uccidi il rispettivo pid. Quindi smontare la partizione e rimontarla.


è più una soluzione alternativa che una soluzione al problema indicato nella domanda.
asdmin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.