NFS – это служба, обеспечивающая доступ к удаленной файловой системе, точнее ее подветви. Возникла как-то необходимость и вместе с этим желание таки ее попробовать. Короче:
Клиент – FreeBSD 6.0
Сервер – сетевое хранилище Proware EN-3166H-QX.
Ниже я опишу грабли, с которыми мне пришлось столкнуться. Мне кажется, что это все, которые только могут попасться 🙂 Итак, грабли по порядку.
1. [udp] 10.0.1.100:/share: RPCPROG_NFS: RPC: Port mapper failure – RPC: Timed out
На сервере portmapper все-таки работал (вывод команды rpcinfo -p):
program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper
Однако на локальной машине (клиенте) входящий трафик от сервера был запрещен. Открыл.
2. [udp] 10.0.1.100:/share: RPCPROG_NFS: RPC: Program not registered
Скорее всего не запущены демоны службы NFS – nfsd и mountd, либо доступ к нужным портам закрыт файрволлом со стороны сервера. В моем случае почему-то не были запущены эти службы, пришлось их запускать руками:
rpc.nfsd
rpc.mountd
Посмотреть информацию о запущенных демонах RPC можно командой: rpcinfo -p. Должно быть примерно так:
-bash-3.00# rpcinfo -p program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100011 1 udp 1013 rquotad 100011 2 udp 1013 rquotad 100011 1 tcp 1016 rquotad 100011 2 tcp 1016 rquotad 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100021 1 udp 32772 nlockmgr 100021 3 udp 32772 nlockmgr 100021 4 udp 32772 nlockmgr 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100021 1 tcp 51540 nlockmgr 100021 3 tcp 51540 nlockmgr 100021 4 tcp 51540 nlockmgr 100005 1 udp 855 mountd 100005 1 tcp 858 mountd 100005 2 udp 855 mountd 100005 2 tcp 858 mountd 100005 3 udp 855 mountd 100005 3 tcp 858 mountd 100024 1 udp 876 status 100024 1 tcp 879 status
3. [udp] 10.0.1.100:/share: Permission denied
Оказалось, что я неправильно пишу команду монтирования. В веб-морде было написано, что NFS-шара называется share, вот я и писал:
mount 10.0.1.100:share /mnt/nas
А надо так, с полным путем до нужного каталога:
mount 10.0.1.100:/usr/local/nfs4/share /mnt/nas
Вот за это я и не люблю веб-интерфейсы и вообще графические интерфейсы над серьезными вещами. Порадовало, что теперь NFS все-таки смонтировалась 🙂
4. [udp] 10.0.1.100:/usr/local/nfs4/shara: No such file or directory
Поковырял, оказывается может быть и такая ошибка. Очевидно, это опечатка. Надо правильно путь писать!
5. -bash: cd: nas: Permission denied
Интересно, что по умолчанию NFS монтируется таким образом, что даже локальный пользователь root не может прочитать содержимое удаленного каталога, владельцем которого выступает другой пользователь (К примеру с UID=501). Чтобы обойти это ограничение, нужно либо указать на стороне сервера опцию -maproot=root в файле /etc/exports, например так (взято из Руководства FreeBSD):
/a -maproot=root host.example.com box.example.org
Но в моем случае все шары управлялись веб-админкой (proNAS 1.1) и там не было такой опции. Поэтому пришлось заводить пользователя с UID, равным UID пользователя – владельца NFS-шары. Добавив такого пользователя в клиентскую систему, я назначил права доступа chmod a+rx -R /mnt/nas, и root смог прочесть содержимое каталога.