“Лишите дескриптор файла NFS новизны” после перезагрузки

На узле сервера возможно получить доступ к экспортируемой папке. Однако после перезагрузок (и сервер и клиент), папка больше не доступна от клиентов.

На сервере

# ls /data
Folder1
Forlder2

и/etc/exports файл содержит

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

На клиенте

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

Я должен сказать, что не было никакой проблемы с совместно используемой папкой от стороны клиента однако после перезагрузок (сервер и клиент), я вижу это сообщение.

Какой-либо способ зафиксировать это?

16
задан 3 August 2014 в 21:16
4 ответа

Порядок перезагрузок очень важен. Перезагрузка сервера после клиентов может привести к такой ситуации. Чёрствый NFS-рычаг указывает на то, что у клиента открыт файл, но сервер больше не распознаёт файловый рычаг. В некоторых случаях NFS очищает свои структуры данных после таймаута. В других случаях вам нужно будет самостоятельно очистить структуры данных NFS и перезапустить NFS после этого. Там, где эти структуры расположены, в некоторой степени зависят от O/S.

Попробуйте перезапустить NFS сначала на сервере, а затем на клиентах. Это может очистить обработчики файлов.

Перезагрузка NFS-серверов с файлами, открытыми с других серверов, не рекомендуется. Это особенно проблематично, если открытый файл был удален на сервере. Сервер может держать файл открытым до перезагрузки, но при перезагрузке будет удалена файловая рукоятка in-memory на стороне сервера. Тогда клиент больше не сможет открыть файл.

Определение того, какие кронштейны были использованы на сервере, является сложным и ненадежным. Опция showmount -a может показывать некоторые активные кронштейны, но может не показывать их все. Заблокированные файлы легче идентифицировать, но для этого требуется включить блокировку и полагаться на клиентское программное обеспечение для блокировки файлов.

Вы можете использовать lsof на клиентах для идентификации процессов, у которых открыты файлы на кронштейнах.

Я использую жесткие и intr опции монтирования на моих NFS-монтажах. При использовании опции жесткий процесс ввода-вывода повторяется бесконечно. Опция intr позволяет завершать процессы, если они ожидают завершения ввода-вывода NFS.

21
ответ дан 2 December 2019 в 20:40

Попробуйте этот сценарий, который я написал:

#!/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
ответ дан 2 December 2019 в 20:40

На сервере NFS UN-экспорт и реэкспорт файловой системы:

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

На клиенте смонтируйте файловую систему

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

2
ответ дан 2 December 2019 в 20:40

проверить lsof определенного пути и убить соответствующий pid. Затем отключите раздел и смонтируйте его обратно.

0
ответ дан 2 December 2019 в 20:40

Теги

Похожие вопросы