Как определить, экспортирует ли удаленный каталог NFS каталог?

11

В моем сценарии у меня есть несколько уровней статуса:

  1. пульт доступен (пинг)
  2. удаленная служба NFS активна
  3. удаленная NFS экспортирует определенный каталог
  4. удаленный NFS монтируется (монтируется)

Для (2) и (3) я считаю, rcpinfoчто это лучшая ставка. Для (2), однако, я не могу понять, как сузить мой запрос к службе NFS, не запуская подоболочку (что неприемлемо для этого приложения). Для (3) я не уверен, что эта информация доступна даже удаленно (без учета ssh, конечно).

Я работаю над RHEL 6 и не имею доступа к программам, которые не включены в стандартный дистрибутив.

Шон Оллред
источник

Ответы:

16

Для 3) вы, вероятно, хотите использовать, showmount -e remote_nfs_serverкоторый показывает, экспортировал ли remote_nfs_server что-нибудь.

И для 2) если вы не хотите использовать оболочку и знаете, работает ли на удаленном сервере NFSv3 или NFSv4, и если TCP или UDP, вы можете запросить это специально с помощью rpcinfo:
rpcinfo -u remote_nfs_server nfs 3 для NFSv3 через UDP и
rpcinfo -t remote_nfs_server nfs 4для NFSv4 через TCP

Для 4) вы можете посмотреть, если папка является смонтированной удаленной файловой системой


Дальнейшая информация:

doktor5000
источник
showmount -r remoteскажет мне, remoteэкспортирует ли что-нибудь , но есть ли способ определить remote:/mnt/dir, экспортируется ли он без запуска подоболочки (т.е. конвейера)?
Шон Оллред
showmount -e remoteскажет вам, если remoteэкспортировал что-нибудь. showmount -rвыдаст только сообщение об ошибке, так как эта опция не существует. Вы могли бы попытаться использовать совпадение подстроки оболочки в основном с grep для регулярного выражения в выводе showmount. Может быть, посмотрите на, например, stackoverflow.com/questions/12619720/…
doktor5000
Или, наоборот, я не знаю ни одной отдельной команды, которая могла бы специально запросить удаленный NFS-сервер для конкретного монтирования, и я не думаю, что она существует. Только два других жизнеспособных способа будут делать запросы к удаленному серверу локально через ssh (хотя даже тогда нет надежного способа определить, экспортируется ли данный каталог в настоящее время из-за природы NFS без сохранения состояния). Другой подход может состоять в том, чтобы попытаться смонтировать экспорт NFS с клиента и проверить код выхода, а затем локальное монтирование и его содержимое.
doktor5000
Моя ошибка с -rопцией «против» -e- вот что я имел в виду :) «Попытка подхода» была предложена ранее. Мне это не особо нравится, но это похоже на реальный вариант.
Шон Оллред
5

Вы можете использовать showmount -e <server>для некоторых аспектов # 3. Когда экспорт прост, он, по крайней мере, предполагает, что каталог (или, возможно, родитель такого каталога) экспортируется.

# showmount -e server
/export                               (everyone)

Для # 2, я не уверен, что вы ищете. Если вы используете NFSv3, вам понадобятся как минимум mountd и nfs (а в некоторых случаях может потребоваться подтверждение менеджеров блокировок). Вы можете проверить это явно с помощью rpcinfo, как вы говорите.

# rpcinfo -t server mountd 3
program 100005 version 3 ready and waiting
BowlOfRed
источник
showmount -r remoteскажет мне, remoteэкспортирует ли что-нибудь , но есть ли способ определить remote:/mnt/dir, экспортируется ли он без запуска подоболочки (т.е. конвейера)?
Шон Оллред
Это зависит от объектов в вашем распоряжении. На чем написан ваш сценарий? Почему запуск отдельного исполняемого файла (showmount) менее проблематичен, чем запуск другой оболочки?
BowlOfRed
Я пишу свой скрипт на Python 2.6 и использую subprocessмодуль. Я могу настроить конвейер с ним, но я бы не стал сильно усложнять дизайн. Мне нужно избегать запуска подоболочки, чтобы можно было корректно уничтожить сценарий - если он будет уничтожен, будут уничтожены его дочерние процессы, но не дочерние процессы дочерних процессов. Таким образом, подоболочка будет уничтожена, но не процессы, которые порождает подоболочка. Я также отметил rpcinfo, что возвращение может занять до трех минут, что является исходной основой для вещей без подзарядки. Однако уже слишком поздно что-либо менять.
Шон Оллред
Напишите отдельный сценарий, который делает то, что вам нужно (например, вызывает showmount, но принимает аргумент для каталога и возвращает успех / сбой, а также время ожидания, разумное для ваших целей), а затем вызовите этот сценарий из своего питона.
BowlOfRed
Я могу обещать вам, что это не так просто, как вы сразу подумали - когда он заблокирован, rpcinfoон не реагирует ни на что, кроме SIGKILL (что является ошибкой - операционная система, очевидно, просто убивает процесс). В любом случае, это все равно запустит оболочку rpcinfo- основная проблема остается.
Шон Оллред
0

Список всех каталогов псевдо-корня NFS-V4 экспорта

ls /net/ip-addr-nfs-server

Проверьте мой ответ в другой теме

Sathish
источник
Чтобы /netмонтирование работало, /etc/auto.netскрипт должен установить, что сервер имеет соответствующий экспорт. Это использует showmountкоманду. Если сервер имеет только NFSv4, он не будет работать (showmount дисплеев RPC: Program not registered, и /net/serverбудет только отчет File not found)
Ale