NFSv4 не может установить любые сокеты для nfsd без запуска rpcbind

8

Согласно Red Hat документы 'rpcbind' больше не требуются:

Поскольку поддержка протокола включена в протокол v4, NFSv4 не взаимодействует с демонами portmap, rpc.lockd и rpc.statd. NFSv4 прослушивает известный TCP-порт 2049, что устраняет необходимость взаимодействия с портами. Протоколы монтирования и блокировки были включены в протокол V4, что устраняет необходимость взаимодействия с rpc.lockd и rpc.statd. Демон rpc.mountd все еще требуется на сервере, но не участвует в каких-либо проводных операциях.

однако я не могу запустить демон NFS, когда служба rpcbind не запущена:

# service nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
                                                           [FAILED]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
rpc.nfsd: unable to set any sockets for nfsd
                                                           [FAILED]

Я отключил NFS v2 и v3:

# grep -v "^#" /etc/sysconfig/nfs
MOUNTD_NFS_V2="no"
MOUNTD_NFS_V3="no"
RPCNFSDARGS="-N 2 -N 3"

Не могли бы вы подтвердить, какие услуги требуются / необходимы на сервере и клиенте из перечисленных ниже (в основном я хотел бы отключить ненужные службы):

# rpm -ql nfs-utils | grep 'init.d'
/etc/rc.d/init.d/nfs
/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd
HTF
источник
Вы настроили свой брандмауэр для разрешения nfs?
user9517
Да, я могу смонтировать экспорт NFS на клиенте, но мне интересно, почему мне все еще нужно использовать rpcbindс v4
HTF
3
NFSv4 не требует rpcbind. Но есть клиенты и инструменты, которые все еще зависят от этой информации, например, «showmount». Кроме того, Linux nfsd использует файл / proc / fs / nfsd / portlist для передачи номера порта в rpcbind, и этот файл каким-то образом зависит от запуска процесса rpcbind.
Кофеманн
Я могу проверить эту проблему на Debian 7 с ядром 3.3.2, добавив -N 2 -N 3к rpc.nfsdв сценарии запуска и получить ту же ошибку «не удалось установить какие - либо разъемы для NFSd»
Танкист六四

Ответы:

10

Это была ошибка в модуле ядра сервера NFS. Это было исправлено в декабре 2013 года.

Начиная с ядра 3.14, rpcbindбольше не требуется запускать NFS-сервер в ядре.

(при условии, что сервер настроен на использование только NFSv4 и выше)

http://lxr.free-electrons.com/source/net/sunrpc/svc.c?v=3.14#L966

Вы можете найти больше информации об этом изменении в этой теме:

http://www.spinics.net/lists/linux-nfs/msg41053.html

Следовательно, ваша конфигурация:

MOUNTD_NFS_V2="no"
MOUNTD_NFS_V3="no"
RPCNFSDARGS="-N 2 -N 3"

теперь должен работать без rpcbind.

Когда вы используете только NFSv4, ни одна из этих служб не требуется:

/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd
Петр Юркевич
источник
rpc.idmapdтребуется только для NFSv4. GSS также требуется для безопасности Kerberos. Хотя оба являются необязательными.
Ирфан Латиф
0

Приведенная в RedHat документация была неверной и исправлена ошибкой 521215 : она rpc.mountdвсе еще должна использоваться для настройки NFSv4, но, строго говоря, после этого запускать не обязательно.

  • nfs: Сервер для всех версий NFS: v2, v3, v4, v4.1
  • rpcbind/ portmapper: Сервер , строго только для NFS <= v3. Но также и для NFS v4, поскольку NFS-сервер ядра Linux пытается зарегистрироваться и не запускается, если rpcbindне работает.
  • rpc.mountd: Сервер , строго только для NFS <= 3. Но также и для NFS v4, поскольку ядро ​​Linux использует его для проверки, разрешено ли подключающемуся клиенту подключаться.
  • nfslock: Сервер только для NFS <= v3
  • rpc.idmapd: Необязательный сервер (и более старые клиенты ) для NFS v4
  • rpc.quotad: Сервер для использования дисковой квоты
  • rpc.statd: Сервер только для NFS <= v3

При использовании Kerberos ( sec=krb/ krb5i/ krb5p) требуются следующие сервисы:

  • rpc.gssd: Клиент
  • rpc.svcgssd: Сервер

Обратите внимание, что даже если они носят rpc.свое имя, они используют внутренний механизм ядра Linux rpc_pipefдля связи между ядром Linux и помощником пространства пользователя; так что rpcbindака им portmapperне нужен.

pmhahn
источник
-3

Проверьте сервис rpcbind. Если он перестал работать, запустите, а затем попробуйте запустить службу NFS.

service rpcbind start
service nfs start
Kathirvel
источник
Этот ответ очень низкого качества. OP заявил, что rpcbind не требуется с nfsv4. На вопрос уже ответили: это была ошибка ядра.
bgtvfr