“Identificador de arquivo NFS obsoleto” após a reinicialização

13

No nó do servidor, é possível acessar uma pasta exportada. No entanto, após as reinicializações (servidor e cliente), a pasta não está mais acessível a partir dos clientes.

No servidor

# ls /data
Folder1
Forlder2

e o arquivo / etc / exports contém

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

No cliente

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

Eu tenho que dizer que não houve problemas com a pasta compartilhada do lado do cliente, no entanto, após as reinicializações (servidor e cliente), eu vejo esta mensagem.

Qualquer maneira de corrigir isso?

    
por mahmood 03.08.2014 / 20:16

3 respostas

16

A ordem das reinicializações é importante. A reinicialização do servidor após os clientes pode resultar nessa situação. O identificador NFS obsoleto indica que o cliente tem um arquivo aberto, mas o servidor não reconhece mais o identificador de arquivo. Em alguns casos, o NFS limpará suas estruturas de dados após um tempo limite. Em outros casos, você precisará limpar as estruturas de dados NFS e reiniciar o NFS posteriormente. Onde estas estruturas estão localizadas são um pouco dependentes de O / S.

Tente reiniciar o NFS primeiro no servidor e depois nos clientes. Isso pode limpar as alças de arquivo.

Reinicializar servidores NFS com arquivos abertos de outros servidores não é recomendado. Isso é especialmente problemático se o arquivo aberto tiver sido excluído no servidor. O servidor pode manter o arquivo aberto até que ele seja reinicializado, mas a reinicialização removerá o identificador de arquivo na memória no lado do servidor. Em seguida, o cliente não poderá mais abrir o arquivo.

Determinar quais montagens foram usadas no servidor é difícil e não confiável. A opção showmount -a pode mostrar algumas montagens ativas, mas pode não relatar todas elas. Os arquivos bloqueados são mais fáceis de identificar, mas exigem que o bloqueio seja ativado e dependem do software cliente para bloquear os arquivos.

Você pode usar lsof nos clientes para identificar os processos que possuem arquivos abertos nas montagens.

Eu uso as opções hard e intr mount em minhas montagens NFS. A opção hard faz com que o pedido de veiculação seja repetido indefinidamente. A opção intr permite que os processos sejam eliminados se estiverem aguardando a conclusão do I / O do NFS.

    
por 04.08.2014 / 00:43
4

Experimente este script que escrevi:

#!/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
    
por 29.07.2015 / 10:00
1

No servidor NFS, exporte e exporte novamente o sistema de arquivos:

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

No cliente, monte o sistema de arquivos

monte -t nfs nfs-server: / sistema de arquivos / ponto_de_montagem

    
por 16.03.2018 / 22:26