reinit máy khách NFS mà không cần khởi động lại


10

Tôi đã làm việc trên máy chủ của mình, từ đó tôi xuất một thư mục bằng NFS. Tất nhiên trong hơn một tuần khởi động lại máy chủ, tôi đã nhiều lần quên umounthệ thống tập tin xuất trong máy trạm của mình (được gắn từ /etc/fstabkhi khởi động). Ở giữa tôi đã có thể umountsau khi thực tế và kể lại (tôi không sử dụng autofs):

umount -fl /data0
mount /data0

Nhưng điều này không còn hoạt động.

Tôi không thể gắn thư mục đã xuất từ ​​máy chủ vào một thư mục khác (mount hangs), nhưng tôi có thể nfs mount thư mục đã xuất đó trên một máy ảo chạy trên máy trạm của tôi.

Những gì tôi đã cố gắng là loại bỏ ( rmmod) mô-đun nfsnfsv3(không hoạt động Resource temporarily unavailable:). lsoftreo cổ mountkhông hiển thị bất cứ điều gì gắn kết thông qua nfs. Đây có lẽ là kết quả của việc sử dụng 'umount -l' nhiều lần, nhưng hai lần đầu tiên điều này hoạt động mà không gặp vấn đề gì.

Tôi đã khởi động lại máy chủ trong thời gian đó, sau khi không thể gắn kết mà không có sự khác biệt. Tôi cũng đã sử dụng service nfs-kernel-server restart. Tôi nghi ngờ mọi thứ sẽ trở lại bình thường nếu tôi khởi động lại máy trạm của khách hàng.

Có cách nào để phục hồi từ điều này và khởi động lại phía máy khách nfs trên máy trạm của tôi mà không cần khởi động lại không?
Nếu tôi không thể sửa lỗi này mà không khởi động lại, điều này có thể không lặp lại nếu tôi bắt đầu sử dụng autofskhông?

lsof -b treo với dòng cuối cùng:

lsof: avoiding readlink(/run/user/1001/gvfs): -b was specified.
lsof: avoiding stat(/run/user/1001/gvfs): -b was specified.
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1001/gvfs
      Output information may be incomplete.

trong các dòng trước đó, không có /data0.

Các mục trong /etc/fstab:

192.168.0.2:/data0 /data0  nfs  defaults,auto,nolock,user 0 2

"nhưng hai lần đầu tiên nó hoạt động mà không có vấn đề gì" ... làm tôi nhớ đến roulette Nga. Có lsof -btreo không?
muru

@muru Có nó bị treo, tôi đã cập nhật Q với đầu ra. BTW, tôi chưa bao giờ nghe ai phàn nàn về việc thua với roulette Nga, vì vậy đây phải là trò chơi có lợi. Tôi thường mong đợi mọi thứ sẽ không bao giờ, một lần, hoặc luôn luôn, không phải là số lần X, nhưng có lẽ hoàn cảnh khác nhau.
Anthon

Bạn đang sử dụng bản phân phối nào? Quá trình thay đổi rất nhiều.
Graeme

@Graeme Đây là Linix Mint 17.1 (Rebecca)
Anthon

Không chắc chắn làm thế nào nó hoạt động trong Ubuntu với upstartvà tất cả. Bạn có thể muốn khởi động lại tất cả các dịch vụ trong nfs-commongói, có vẻ như có một vài. Thứ tự có khả năng cũng quan trọng, vì vậy hãy thử dừng lại sau đó bắt đầu theo thứ tự phụ thuộc. Bạn có thể cũng muốn làm rpcbindđiểm dừng cuối / lần đầu tiên bắt đầu. Tôi đã làm điều này trước đây trên Debian, nhưng nó chỉ có một nfs-commondịch vụ tốt .
Graeme

Câu trả lời:


5

Như @PaperMonkey đã đề xuất trong các nhận xét, bạn có thể bị sai lầm vì bạn đã sử dụng các tùy chọn gắn kết mặc định, bao gồm thử lại mãi mãi.

intrđã từng là một cách để làm cho việc ngắt các thứ bị mắc kẹt trên I / O thành một NFS bị hỏng dễ dàng hơn, nhưng bây giờ nó không còn hoạt động nữa. SIGKILLvẫn có thể làm gián đoạn các quá trình bị mắc kẹt trên NFS, ít nhất là như vậy nfs(5). Xem trang người đàn ông đó cho các tùy chọn gắn kết.

Sử dụng softthay vì mặc định hardnếu bạn muốn NFS không thử lại mãi mãi.

Tôi cũng khuyên bạn nên sử dụng thiết bị tự động. Tạo liên kết tượng trưng đến / net / host / foo / bar ở đâu đó nếu bạn muốn.

Thường thì việc khởi động lại sẽ dễ dàng hơn, nhưng tôi nghĩ trên lý thuyết bạn sẽ có thể kill -9(tức là kill -KILL) bất kỳ quy trình nào bị kẹt trên NFS. THEN umount -f có thể làm việc. Chỉ cần cẩn thận không để hoàn thành tab nhận được nhiều quá trình bị mắc kẹt trên ngàm NFS.


Về lý thuyết, nhưng thật khó để tìm thấy các quy trình đó khi lsof bị treo.
kmarsh

@kmarsh: mọi quá trình ở trạng thái D(Đĩa ngủ) trong ps / top có thể bị kẹt trên NFS.
Peter Cordes

1
Xin lưu ý rằng khi sử dụng "mềm" thay vì "cứng", có khả năng mất dữ liệu mỗi khi máy chủ NFS tạm thời không khả dụng.
Marki555

4

Dưới đây là danh sách các lệnh chạy để khắc phục sự cố này trên bản phân phối dựa trên RPM.

service rpcbind stop
service nfslock stop
rm -rf /var/lib/nfs/statd/sm/*
rm -rf /var/lib/nfs/statd/sm.bak/*

Sau đó:

umount -f /share

1

Sử dụng autofssẽ giúp tránh vấn đề này trong tương lai. Lợi ích lớn nhất autofslà nó không cố gắn thư mục cho đến khi bạn cố gắng sử dụng nó, điều này có nghĩa là bạn tránh được các điểm gắn kết bị hỏng và nó sẽ không cố gắng gắn kết vô thời hạn, bạn có thể đặt khoảng thời gian chờ để ngắt kết nối (thông thường ngắn). Tôi không chắc chắn nếu autoount thử lại tất cả trong giai đoạn tiền giả định này, nhưng bằng cách nào đó, tôi thường đặt thời gian chờ tự động thành chỉ một vài giây.

Để giải quyết vấn đề mà không cần khởi động lại, bạn thể xử lý bằng umount -a(ngắt kết nối tất cả được đề cập trong / etc / fstab) mount -a(gắn kết tất cả trong / etc / fstab) nhưng trừ khi thư mục bạn bị mất chứa thư mục chính bạn ' Tốt nhất là tiết kiệm công việc ở nơi khác và chỉ cần khởi động lại.


0

Sử dụng kết quả của lệnh lsof để tìm các quy trình trên máy khách đang giữ các tham chiếu đến hệ thống tệp cũ và tiêu diệt các quy trình đó.

umount -f / data0

đảm bảo bạn có thể ping máy chủ sau đó kết nối lại ổ đĩa. Khởi động lại bất kỳ quy trình mong muốn.

Cụm

Lưu ý, nếu bạn chạy một thiết lập máy chủ cụm, bạn sẽ nhận được một tệp nfs cũ xử lý mỗi khi máy chủ phải lỗi. Để tránh điều đó, bạn nên xuất hệ thống tệp của mình bằng tùy chọn fsid. Số cho fsid phải giống nhau cho từng hệ thống tệp tương ứng trên hai máy chủ. Tùy thuộc vào bạn để đảm bảo sao chép các tập tin xảy ra. Xem đoạn trích từ trang người đàn ông bên dưới:

fsid = num | root | uuid NFS cần có khả năng xác định từng hệ thống tập tin mà nó xuất. Thông thường, nó sẽ sử dụng UUID cho hệ thống tệp (nếu hệ thống tệp có một thứ như vậy) hoặc số thiết bị của thiết bị giữ hệ thống tệp (nếu hệ thống tệp được lưu trữ trên thiết bị). Vì không phải tất cả các hệ thống tệp đều được lưu trữ trên các thiết bị và không phải tất cả các hệ thống tệp đều có UUID, đôi khi cần phải nói rõ cho NFS biết cách xác định hệ thống tệp. Điều này được thực hiện với tùy chọn fsid =.

Đối với NFSv4, có một hệ thống tệp phân biệt là gốc của tất cả các hệ thống tệp được xuất. Điều này được chỉ định với fsid = root hoặc fsid = 0 cả hai đều có nghĩa chính xác cùng một điều.

Các hệ thống tập tin khác có thể được xác định bằng một số nguyên nhỏ hoặc UUID nên chứa 32 chữ số hex và dấu chấm câu tùy ý.

Các nhân Linux phiên bản 2.6.20 trở về trước không hiểu cài đặt UUID nên phải sử dụng một số nguyên nhỏ nếu tùy chọn fsid cần được đặt cho các nhân đó. Đặt cả số nhỏ và UUID đều được hỗ trợ để có thể thực hiện cùng một cấu hình để hoạt động trên các hạt nhân cũ và mới.


Ông đã nói lsof treo.
kmarsh
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.