Jak mogę ustalić, czy pilot NFS eksportuje katalog?

11

W moim skrypcie mam kilka warstw statusu:

  1. pilot jest dostępny (ping)
  2. zdalna usługa NFS jest aktywna
  3. zdalny NFS eksportuje określony katalog
  4. zdalny NFS jest zamontowany (mount)

W przypadku (2) i (3) uważam, że rcpinfojest to najlepszy zakład. Jednak w przypadku (2) nie mogę dowiedzieć się, jak zawęzić moje zapytanie do usługi NFS bez uruchamiania podpowłoki (co jest niedopuszczalne w przypadku tej aplikacji). W przypadku (3) nie jestem pewien, czy te informacje są nawet dostępne zdalnie ( sshoczywiście bez wglądu ).

Pracuję nad RHEL 6 i nie mam dostępu do programów, które nie są zawarte w standardowej dystrybucji.

Sean Allred
źródło

Odpowiedzi:

16

W przypadku 3) prawdopodobnie chcesz użyć tego, showmount -e remote_nfs_serverktóry pokazuje, czy serwer zdalny_nfs_eksportował coś.

A dla 2) jeśli nie chcesz używać shubshell i wiesz, czy na zdalnym serwerze działa NFSv3 lub NFSv4, a jeśli TCP lub UDP, możesz zapytać o to konkretnie za pomocą rpcinfo:
rpcinfo -u remote_nfs_server nfs 3 dla NFSv3 przez UDP i
rpcinfo -t remote_nfs_server nfs 4dla NFSv4 przez TCP

W przypadku 4) możesz sprawdzić, czy folder jest zamontowanym zdalnym systemem plików


Dalsza informacja:

doktor5000
źródło
showmount -r remotepowie mi, czy cośremote eksportuje , ale czy jest jakiś sposób, aby określić, czy jest eksportowany bez uruchamiania podpowłoki (tj. potoku)? remote:/mnt/dir
Sean Allred,
showmount -e remotepoinformuje cię, czy remotecoś wyeksportował. showmount -rwyświetli tylko komunikat o błędzie, ponieważ ta opcja nie istnieje. Możesz spróbować użyć dopasowania podłańcucha powłoki, aby zasadniczo grep dla wyrażenia regularnego w wyjściu showmount. Może rzucić okiem na przykład stackoverflow.com/questions/12619720/...
doktor5000
Innymi słowy, nie znam żadnej autonomicznej komendy, która mogłaby w szczególności zapytać zdalny serwer NFS o jedno konkretne podłączenie i nie sądzę, aby istniało. Jedynie dwa inne realne sposoby mogłyby polegać na lokalnym zapytaniu do zdalnego serwera za pośrednictwem ssh (chociaż nawet wtedy nie ma niezawodnego sposobu ustalenia, czy dany katalog jest obecnie eksportowany z powodu bezstanowego charakteru NFS). Innym podejściem może być próba zamontowania eksportu NFS z klienta i sprawdzenie kodu wyjścia, a następnie lokalnego podłączenia i jego zawartości.
doktor5000,
Mój błąd z -ropcją kontra -e- o to mi chodziło :) „Podejście próbujące” zostało już wcześniej zasugerowane. Nie podoba mi się to szczególnie, ale wygląda jak prawdziwa opcja.
Sean Allred,
5

Możesz użyć showmount -e <server>do niektórych aspektów # 3. Gdy eksportowanie jest proste, sugerowałoby to przynajmniej wyeksportowanie katalogu (a może jego rodzica).

# showmount -e server
/export                               (everyone)

W przypadku nr 2 nie jestem pewien, czego szukasz. Jeśli używasz NFSv3, będziesz szukał przynajmniej mountd i nfs (w niektórych przypadkach możesz chcieć potwierdzić menedżerów blokad). Możesz to sprawdzić za pomocą rpcinfo, jak mówisz.

# rpcinfo -t server mountd 3
program 100005 version 3 ready and waiting
BowlOfRed
źródło
showmount -r remotepowie mi, czy cośremote eksportuje , ale czy jest jakiś sposób, aby określić, czy jest eksportowany bez uruchamiania podpowłoki (tj. potoku)? remote:/mnt/dir
Sean Allred,
To zależy od dostępnych obiektów. W czym jest napisany twój skrypt? Dlaczego uruchomienie oddzielnego pliku wykonywalnego (showmount) nie stanowi większego problemu niż uruchomienie innej powłoki?
BowlOfRed
Piszę skrypt w Pythonie 2.6 i korzystam z subprocessmodułu. Mogę z nim skonfigurować potok, ale wolałbym nie komplikować tak bardzo projektu. Muszę unikać uruchamiania podpowłoki, aby umożliwić łagodne zabicie skryptu - jeśli zostanie zabity, jego procesy potomne zostaną zabite, ale nie dzieci procesów potomnych. W ten sposób podpowłoka zostałaby zabita, ale nie procesy, które się odradza. Zauważyłem również, rpcinfoże powrót może potrwać do trzech minut, co jest pierwotną podstawą rzeczy bez powłoki. Jednak jest już o wiele za późno, aby to zmienić.
Sean Allred
Napisz osobny skrypt, który robi to, czego potrzebujesz (np. Wywołania showmount, ale bierze argument za katalog i zwraca sukces / porażkę, i zawiera limit czasu, który jest rozsądny dla twoich celów), a następnie wywołuje ten skrypt ze swojego pytona.
BowlOfRed
Mogę obiecać, że nie jest to tak łatwe, jak mogłoby się wydawać - kiedy jest zamknięte, więc rpcinfonie reaguje na nic oprócz SIGKILL (co jest błędnym przypisaniem - system operacyjny po prostu zabija proces). W każdym razie nadal zaczynałaby się powłoka na start rpcinfo- podstawowy problem pozostaje.
Sean Allred
0

Wyświetl wszystkie katalogi eksportu NFS-V4 pseudo root

ls /net/ip-addr-nfs-server

Sprawdź moją odpowiedź w innym wątku

Satish
źródło
Aby /netmount mógł działać, /etc/auto.netskrypt musi ustalić, że serwer ma odpowiedni eksport. To używa showmountpolecenia. Jeśli serwer ma tylko NFSv4, nie będzie działał (showmount wyświetli RPC: Program not registeredi /net/serverpo prostu zgłosi File not found)
Ale