"Старе ручка файлу NFS" після перезавантаження


16

На вузлі сервера є доступ до експортованої папки. Однак після перезавантаження (як сервера, так і клієнта) папка більше не доступна клієнтам.

На сервері

# ls /data
Folder1
Forlder2

і файл / etc / export містить

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

Про клієнта

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

Я мушу сказати, що не було проблем із спільною папкою з боку клієнта, проте після перезавантаження (сервер і клієнт) я бачу це повідомлення.

Будь-який спосіб це виправити?

Відповіді:


22

Порядок перезавантаження важливий. Перезавантаження сервера після клієнтів може призвести до цієї ситуації. Затиснута ручка NFS вказує на те, що у клієнта відкритий файл, але сервер більше не розпізнає обробку файлу. У деяких випадках NFS очистить свої структури даних після таймауту. В інших випадках вам доведеться самостійно очистити структури даних NFS і після цього перезапустити NFS. Де розташовані ці структури, дещо залежать O / S.

Спробуйте перезапустити NFS спочатку на сервері, а потім на клієнтах. Це може очистити ручки файлів.

Перезавантаження серверів NFS з файлами, відкритими з інших серверів, не рекомендується. Це особливо проблематично, якщо відкритий файл був видалений на сервері. Сервер може тримати файл відкритим, поки він не перезавантажиться, але перезавантаження видалить ручку файлу в пам'яті на стороні сервера. Тоді клієнт більше не зможе відкрити файл.

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

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

Я використовую параметри hardі intrмонтажу на своїх кріпленнях NFS. Цей hardпараметр призводить до повторного повторного введення вводу-виводу. Цей intrпараметр дозволяє вбити процеси, якщо вони чекають завершення IO NFS.


Використання hard, intr- це хороша порада. Однак зауважте, що NFS подвоює тайм-аути з кожною спробою. Тож вам найкраще встановити timeo=1і retrans=5так. Зауважте, що це призведе до значного навантаження на ваш сервер NFS після перезавантаження NFS. Намагайтеся не перезапускати службу NFS так часто;)
bjanssen

Ваша відповідь правильна. Я також знайшов ще одне просте рішення. На вузлі, на якому написано застарілий обробник NFS, просто перейміть та повторно встановіть папку.
mahmood

4

Спробуйте цей сценарій, який я написав:

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

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

exportfs -u nfs-сервер: / file_system exportfs nfs-server: / file_system

На клієнті змонтуйте файлову систему

mount -t nfs nfs-сервер: / файлова система / mount_point


0

перевірити lsof певного шляху та вбити відповідний pid. Потім демонтуйте перегородку та встановіть її назад.


це скоріше як вирішення проблеми, ніж рішення проблеми, викладеної у питанні.
асдмін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.