Làm thế nào tôi có thể xác định nếu một điều khiển từ xa NFS đang xuất một thư mục?


11

Trong kịch bản của tôi, tôi có một vài lớp trạng thái:

  1. từ xa có sẵn (ping)
  2. dịch vụ NFS từ xa đang hoạt động
  3. NFS từ xa đang xuất một thư mục nhất định
  4. NFS từ xa được gắn kết (mount)

Đối với (2) và (3), tôi tin rcpinfolà đặt cược tốt nhất. Tuy nhiên, đối với (2), tôi không thể tìm ra cách thu hẹp truy vấn của mình vào dịch vụ NFS mà không bắt đầu một mạng con (điều này không được chấp nhận đối với ứng dụng này). Đối với (3), tôi không chắc chắn thông tin này thậm chí còn có sẵn từ xa ( sshdĩ nhiên không có ing).

Tôi đang làm việc trên RHEL 6 và không có quyền truy cập vào các chương trình không có trong bản phân phối tiêu chuẩn.

Câu trả lời:


16

Đối với 3) bạn có thể muốn sử dụng showmount -e remote_nfs_serverhiển thị nếu remote_nfs_server đã xuất bất cứ thứ gì.

Và cho 2) nếu bạn không muốn sử dụng shubshell và biết nếu máy chủ từ xa chạy NFSv3 hoặc NFSv4 và nếu TCP hoặc UDP, bạn có thể truy vấn cụ thể với rpcinfo:
rpcinfo -u remote_nfs_server nfs 3 cho NFSv3 qua UDP và
rpcinfo -t remote_nfs_server nfs 4cho NFSv4 qua TCP

Đối với 4) bạn có thể muốn xem Kiểm tra xem thư mục có phải là hệ thống tệp từ xa được gắn kết không


Thêm thông tin:


showmount -r remotesẽ cho tôi biết nếu remoteđang xuất bất cứ thứ gì , nhưng có cách nào để tôi xác định xem remote:/mnt/dircó được xuất không mà không bắt đầu một mạng con (tức là một đường ống)?
Sean Allred

showmount -e remotesẽ cho bạn biết nếu remoteđã xuất khẩu bất cứ điều gì. showmount -rsẽ chỉ cung cấp cho bạn một thông báo lỗi vì tùy chọn đó không tồn tại. Bạn có thể thử sử dụng kết hợp chuỗi con shell để cơ bản grep cho một biểu thức chính quy trong đầu ra showmount. Có thể xem ví dụ: stackoverflow.com/questions/12619720/ từ
doktor5000

Hoặc nói cách khác, tôi không biết bất kỳ lệnh độc lập nào có thể truy vấn cụ thể một máy chủ NFS từ xa cho một mount cụ thể và tôi không nghĩ rằng nó tồn tại. Chỉ có hai cách khả thi khác là truy vấn máy chủ từ xa cục bộ thông qua ssh (mặc dù sau đó không cách nào đáng tin cậy để xác định xem một thư mục đã cho có hiện đang được xuất do tính chất không trạng thái của NFS không). Cách tiếp cận khác có thể là cố gắng gắn kết xuất NFS từ máy khách và kiểm tra mã thoát và sau đó gắn kết cục bộ và nội dung của nó.
doktor5000

Lỗi của tôi với -rtùy chọn so với -e- đó là điều tôi muốn nói :) Cách tiếp cận cố gắng 'đã được đề xuất trước đây. Tôi không đặc biệt thích nó, nhưng nó trông giống như một lựa chọn thực sự.
Sean Allred

5

Bạn có thể sử dụng showmount -e <server>cho một số khía cạnh của # 3. Khi xuất đơn giản, ít nhất nó sẽ gợi ý rằng một thư mục (hoặc có thể là cha mẹ của một thư mục đó) được xuất.

# showmount -e server
/export                               (everyone)

Đối với # 2, tôi không chắc chắn những gì bạn đang tìm kiếm. Nếu bạn đang sử dụng NFSv3, bạn sẽ tìm kiếm ít nhất mountd và nfs (và trong một số trường hợp có thể muốn xác nhận người quản lý khóa). Bạn có thể kiểm tra bất kỳ một cách rõ ràng với rpcinfo như bạn nói.

# rpcinfo -t server mountd 3
program 100005 version 3 ready and waiting

showmount -r remotesẽ cho tôi biết nếu remoteđang xuất bất cứ thứ gì , nhưng có cách nào để tôi xác định xem remote:/mnt/dircó được xuất không mà không bắt đầu một mạng con (tức là một đường ống)?
Sean Allred

Điều đó phụ thuộc vào các cơ sở tại xử lý của bạn. Kịch bản của bạn được viết trong gì? Tại sao bắt đầu một vấn đề thực thi riêng biệt (showmount) ít vấn đề hơn là bắt đầu một shell khác?
BowlOfRed

Tôi đang viết tập lệnh của mình bằng Python 2.6 và sử dụng subprocessmô-đun. Tôi có thể thiết lập một đường ống dẫn với nó, nhưng tôi không muốn làm phức tạp thiết kế nhiều như vậy. Tôi cần tránh bắt đầu một subshell để cho phép script được giết một cách duyên dáng - nếu nó bị giết, các tiến trình con của nó sẽ bị giết, nhưng không phải là con của các tiến trình con. Do đó, lớp vỏ con sẽ bị giết, nhưng không phải là quá trình mà lớp vỏ con sinh ra. Tôi cũng lưu ý rằng rpcinfocó thể mất tới ba phút để quay lại, đây là cơ sở ban đầu cho việc không có phần phụ. Bây giờ đã quá muộn để thay đổi điều đó.
Sean Allred

Viết một tập lệnh riêng thực hiện những gì bạn cần (như cuộc gọi showmount, nhưng lấy một đối số cho thư mục và trả về thành công / thất bại, và bao gồm thời gian chờ hợp lý cho mục đích của bạn), sau đó gọi tập lệnh đó từ python của bạn.
BowlOfRed

Tôi có thể hứa với bạn rằng nó không dễ như bạn nghĩ ngay lập tức - khi nó bị khóa như vậy, rpcinfokhông phản hồi với bất cứ điều gì ngoài SIGKILL (đó là một sự phân phối sai - hệ điều hành rõ ràng chỉ giết chết quá trình). Ở bất cứ giá nào, điều đó vẫn sẽ bắt đầu một vỏ để bắt đầu rpcinfo- vấn đề tiềm ẩn vẫn còn.
Sean Allred

0

Liệt kê tất cả các thư mục xuất NFS-V4 gốc giả

ls /net/ip-addr-nfs-server

Kiểm tra câu trả lời của tôi trong một chủ đề khác


Để /netmount hoạt động, /etc/auto.nettập lệnh phải thiết lập rằng máy chủ có xuất tương ứng. Điều này sử dụng showmountlệnh. Nếu máy chủ chỉ có NFSv4, nó sẽ không hoạt động (hiển thị số lần hiển thị RPC: Program not registered/net/serversẽ chỉ báo cáo File not found)
Ale
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.