Настройка NFS в Linux


На линуксе нужно включить поддержку NFS в ядре - модулем или статически:

File systems ---> 
  Network File Systems --->
    <*> NFS file system support                                                                                                
    [*]   Provide NFSv3 client support                                                                                         
    [*]   Provide NFSv4 client support (EXPERIMENTAL)                                                                          
    [ ]   Allow direct I/O on NFS files (EXPERIMENTAL)                                                                         
    <*> NFS server support                                                                                                     
    [*]   Provide NFSv3 server support                                                                                         
    [*]     Provide NFSv4 server support (EXPERIMENTAL)                                                                        
    [ ]   Provide NFS server over TCP support (EXPERIMENTAL)

Конечно, не обязательно тыкать два пункта - может NFS-сервер и не нужен. После установки нового 
ядра - добавить инструменты:

# emerge nfs-utils portmap

Добавить portmap (нужен для клиента и не нужен для сервера)

# rc-update add portmap default
# rc-update add nfs default

Дальше расшариваем папки в файлике /etc/exports. Если ядро поддерживает NFS3 и NFS4 - то можно 
одновременно по разным протоколам.

# NFS3
/home/nfs3           192.168.1.2/24(async,rw,no_subtree_check,root_squash,anonuid=1000,anongid=1000)

# NFS4
/home/nfs4           192.168.1.2/24(rw,fsid=0,insecure,nohide,sync,no_subtree_check,no_root_squash,anonuid=1000,anongid=1000)
/home/nfs4/part1     192.168.1.2/24(rw,insecure,nohide,sync,no_subtree_check,no_root_squash,anonuid=1000,anongid=1000)
/home/nfs4/part2     192.168.1.2/24(rw,insecure,nohide,sync,no_subtree_check,no_root_squash,anonuid=1000,anongid=1000)

NFS4 отличается от NFS3 тем, что в NFS4 нет поддержки протокола UDP и есть какая-никакая модель 
безопасности, позволяющая передавать логин-uid пользователя между компьютерами. Это очень 
актуально для тех случаев, если на разных компьютерах один и тот же someuser имеет разные uid. Для 
включения этого механизма нужно подкорректировать конфиг <tt>/etc/idmapd.conf</tt> и запустить 
соответствующего демона:

# /etc/init.d/rpc.idmapd start

Для отладочных целей можно запустить rpc.idmapd в foreground-режиме и наблюдать передачу uid 
"визуально".

Монтируются NFS3 и NFS4 тоже по разному. NFS3 подразумевает указание полного пути до расшаренного 
ресурса, а NFS4-клиент - считает расшаренный ресурс корневой папкой (как FTP):

# mount.nfs 192.168.1.1:/home/nfs3 /mnt/nfs3
# mount.nfs4 192.168.1.1:/ /mnt/nfs4
# mount.nfs4 192.168.1.1:/part1 /mnt/nfs4/part1

Помимо всего прочего NFS4 умеет авторизовываться по LDAP-GSS с использованием Kerberos и, тем 
самым, поддерживать неплохую секьюрность. А NFS3 - работает быстрее и надежнее, поскольку NFS4 до 
сих пор имеет статус EXPERIMENTAL в ядре.

Если для чтения NFS - просто идеально, то с записью в расшаренный диск часто бывают проблемы. 
Попробуйте посмотреть с какими UID/GID создаются файлы от разных клиентов, попробуйте создать 
сотню процессов записи - и все проблемы вылезут наружу мгновенно. К счастью, проблемы решаемы 
прямыми руками и с хорошими мануалами.