"Menangani file NFS basi" setelah reboot

16

Pada node server, dimungkinkan untuk mengakses folder yang diekspor. Namun, setelah reboot (baik server dan klien), folder tidak lagi dapat diakses dari klien.

Di server

# ls /data
Folder1
Forlder2

dan file / etc / ekspor berisi

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

Pada klien

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

Saya harus mengatakan bahwa tidak ada masalah dengan folder bersama dari sisi klien namun setelah reboot (server dan klien), saya melihat pesan ini.

Adakah cara untuk memperbaikinya?

mahmood
sumber

Jawaban:

22

Urutan reboot adalah penting. Mem-boot ulang server setelah klien dapat menyebabkan situasi ini. Pegangan NFS basi menunjukkan bahwa klien memiliki file terbuka, tetapi server tidak lagi mengenali pegangan file. Dalam beberapa kasus, NFS akan membersihkan struktur datanya setelah batas waktu. Dalam kasus lain, Anda perlu membersihkan sendiri struktur data NFS dan memulai kembali NFS sesudahnya. Di mana struktur ini berada agak tergantung O / S.

Coba mulai ulang NFS pertama di server dan kemudian di klien. Ini dapat menghapus pegangan file.

Mem-boot ulang server NFS dengan file yang dibuka dari server lain tidak disarankan. Ini terutama bermasalah jika file yang terbuka telah dihapus di server. Server dapat menjaga file tetap terbuka sampai reboot, tetapi reboot akan menghapus pegangan file dalam memori di sisi server. Maka klien tidak lagi dapat membuka file.

Menentukan mount mana yang telah digunakan dari server adalah sulit dan tidak dapat diandalkan. The showmount -apilihan mungkin menunjukkan beberapa gunung aktif, tapi mungkin tidak melaporkan semua dari mereka. File yang dikunci lebih mudah diidentifikasi, tetapi membutuhkan penguncian untuk diaktifkan dan bergantung pada perangkat lunak klien untuk mengunci file.

Anda dapat menggunakan lsofklien untuk mengidentifikasi proses yang memiliki file terbuka di tunggangan.

Saya menggunakan opsi harddan intrmount pada mount NFS saya. The hardpilihan menyebabkan IO harus dicoba tanpa batas. The intrpilihan memungkinkan proses untuk dibunuh jika mereka menunggu di NFS IO untuk lengkap.

BillThor
sumber
Menggunakan hard, intrnasihat yang baik. Namun, perhatikan bahwa NFS menggandakan batas waktu dengan setiap percobaan. Jadi Anda lebih baik mengatur timeo=1dan retrans=5atau lebih. Perhatikan bahwa ini akan sangat membebani server NFS Anda setelah NFS restart. Cobalah untuk tidak me-restart layanan NFS Anda begitu sering;)
bjanssen
Jawaban Anda benar. Saya juga menemukan solusi sederhana lain. Pada node yang mengatakan NFS handler basi, cukup umount dan remount folder lagi.
mahmood
4

Coba skrip yang saya tulis ini:

#!/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
Birgit Ducarroz
sumber
2

Pada NFS server UN-ekspor dan ekspor kembali sistem file:

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

Pada klien me-mount sistem file

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

Dagu
sumber
0

periksa lsof jalur tertentu dan bunuh pid masing-masing. Kemudian unmount partisi dan pasang kembali.

sridhar gattu
sumber
ini lebih seperti solusi daripada solusi untuk masalah yang dinyatakan dalam pertanyaan.
asdmin