Xử lý tập tin NFS của Stale Stale sau khi khởi động lại


16

Trên nút máy chủ, có thể truy cập một thư mục đã xuất. Tuy nhiên, sau khi khởi động lại (cả máy chủ và máy khách), thư mục không thể truy cập được từ máy khách.

Trên máy chủ

# ls /data
Folder1
Forlder2

và tập tin / etc / export chứa

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

Trên máy khách

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

Tôi phải nói rằng không có vấn đề gì với thư mục dùng chung từ phía máy khách, tuy nhiên sau khi khởi động lại (máy chủ và máy khách), tôi thấy thông báo này.

Có cách nào khắc phục điều đó không?

Câu trả lời:


22

Thứ tự khởi động lại là quan trọng. Khởi động lại máy chủ sau khi máy khách có thể dẫn đến tình huống này. Xử lý NFS cũ chỉ ra rằng máy khách đã mở tệp, nhưng máy chủ không còn nhận ra tệp xử lý. Trong một số trường hợp, NFS sẽ dọn sạch cấu trúc dữ liệu của nó sau khi hết thời gian. Trong các trường hợp khác, bạn sẽ cần tự làm sạch cấu trúc dữ liệu NFS và khởi động lại NFS sau đó. Trường hợp các cấu trúc này được đặt phụ thuộc vào O / S.

Hãy thử khởi động lại NFS trước trên máy chủ và sau đó trên máy khách. Điều này có thể xóa các xử lý tập tin.

Không nên khởi động lại máy chủ NFS với các tệp được mở từ các máy chủ khác. Điều này đặc biệt có vấn đề nếu tệp mở đã bị xóa trên máy chủ. Máy chủ có thể giữ tệp mở cho đến khi được khởi động lại, nhưng khởi động lại sẽ loại bỏ xử lý tệp trong bộ nhớ ở phía máy chủ. Sau đó, khách hàng sẽ không thể mở tệp.

Việc xác định các mount đã được sử dụng từ máy chủ là khó khăn và không đáng tin cậy. Các showmount -atùy chọn có thể hiển thị một số gắn kết hoạt động, nhưng có thể không báo cáo tất cả trong số họ. Các tệp bị khóa dễ xác định hơn, nhưng yêu cầu khóa phải được bật và dựa vào phần mềm máy khách để khóa các tệp.

Bạn có thể sử dụng lsoftrên máy khách để xác định các quy trình có tệp được mở trên giá treo.

Tôi sử dụng các tùy chọn hardintrmount trên mount NFS của tôi. Các hardtùy chọn gây IO để được thử lại vô thời hạn. Các intrtùy chọn cho phép các tiến trình bị giết nếu họ đang chờ đợi trên NFS IO để hoàn tất.


Sử dụng hard, intrlà lời khuyên tốt. Tuy nhiên, lưu ý rằng NFS nhân đôi thời gian chờ với mỗi lần thử. Vì vậy, bạn thiết lập tốt nhất timeo=1retrans=5như vậy. Lưu ý rằng điều này sẽ gây căng thẳng nặng nề cho máy chủ NFS của bạn sau khi khởi động lại NFS. Cố gắng không khởi động lại dịch vụ NFS của bạn thường xuyên;)
bjanssen

Câu trả lời của bạn là đúng. Tôi cũng tìm thấy một giải pháp đơn giản khác. Trên nút có trình xử lý NFS cũ, chỉ cần bỏ qua và lặp lại thư mục.
mahmood

4

Hãy thử kịch bản này tôi đã viết:

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

Trên máy chủ NFS UN-export và tái xuất hệ thống tệp:

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

Trên máy khách gắn hệ thống tập tin

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


0

kiểm tra lsof của đường dẫn cụ thể và tiêu diệt pid tương ứng. Sau đó ngắt kết nối phân vùng và gắn kết lại.


điều này giống như một cách giải quyết hơn là một giải pháp cho vấn đề được nêu trong câu hỏi.
asdmin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.