CentOS 6.6下安裝配置NFS4服務

安装 NFS 服务器所需的软件包:

# yum install nfs-utils rpcbind

useradd -s /sbin/nologin -M www

cat /etc/passwd www uid 505

配置 NFS 共享

編輯/etc/exports文件vim /etc/exports

/usr/local/src 192.168.0.0/24(rw,sync)

/var/log 192.168.0.113(rw,async,all_squash,anonuid-505,anongid=505)


啟動nfs服務:

先開啟rpcbind和nfs隨機自啟動:

#chkconfig rpcbind on
# chkconfig nfs on

然後分別啟動rpcbind和nfs服務:

#service rpcbind start

#service nfs start

检查 NFS 服务器端是否有目录共享:

# showmount -e 192.168.0.113

使用 mount 挂载服务器端的目录/home/exp到客户端某个目录下:

# mkdir /tmp/mount
# mount -f nfs -onoatime,nolock,intr,rsize=32768,wsize=32768,nfsvses=3 192.168.0.114:/var/log /tmp/mount

# df -h看一下掛上來了沒有。

exportfs -rv

共享多个目录

使用NFSv4方式共享多个目录时,所有的目录都要作为共享根目录的子目录。例如:有以下目录需要共享:


/first/very/long/path1

/second/very/long/path2

同时让客户端看上去共享的目录是 /dir1 和 /dir2。

服务器端 创建子目录 # mkdir /home/nfs/dir1

# mkdir /home/nfs/dir2

使用参数挂载需要共享的目录 

# mount --bind /first/very/long/path1  /home/nfs/dir1
# mount --bind /secend/very/long/path2 /home/nfs/dir2

修改/etc/exports文件 

/home/nfs/dir1 *(rw,nohide,sync,all_squash,anonuid-505,anongid=505)
/home/nfs/dir2 *(rw,nohide,sync,all_squash,anonuid-505,anongid=505)

注意:需要使用nohide参数 重新读取NFS配置文件 # exportfs -rv

这时你就可以在客户端上挂载服务器上的多个共享文件夹了:
从根目录挂载

# mount 192.168.0.114:/ /mount/point/

单独挂载

# mount 192.168.0.114:/dir1 /mount/point1/
# mount 192.168.0.115:/dir2 /mount/point2/

调优

在默认情况下,NFS 的配置不适合大容量磁盘。 
每个客户机应该用 rsize=32768,wsize=32768,intr,noatime 挂装远程文件系统,如。

mount -o rsize=32768,wsize=32768,intr,noatime server1:/
/mount/point/

从而确保: 

使用大的读/写块(数字指定最大块大小,在这个示例中是 32KB)。

在挂起时 NFS 操作可以被中断。

不持续更新 atime。

可以将这些设置放在 /etc/fstab 中。如果使用自动挂装器,那么应该将这些设置放在适当的 /etc/auto.* 文件中。
在 服务器端,一定要确保有足够的 NFS 内核线程来处理所有客户机。在默认情况下,只启动一个线程,但是 Red Hat 和 Fedora 系统会启动 8 个线程。对于繁忙的 NFS 服务器,应该提高这个数字,比如 32 或 64。可以用 nfsstat -rc 命令评估客户机,了解是否有阻塞的现象,这个命令显示客户机远程过程调用(RPC)统计数据。下表显示一个 Web 服务器的客户机统计数据。



# nfsstat -rc
Client rpc stats:
calls retrans authrefrsh
1465903813 0 0

第二列 retrans 是零,这表示从上一次重新引导以来没有出现需要重新传输的情况。如果这个数字比较大,就应该考虑增加 NFS 内核线程。设置方法是将所需的线程数量传递给 rpc.nfsd,比如 rpc.nfsd 128 会启动 128 个线程。任何时候都可以进行这种设置,线程会根据需要启动或销毁。同样,这个设置应该放在启动脚本中,尤其是在系统上启用 NFS 的脚本。 

关于 NFS,最后要注意一点:如果可能的话,应该避免使用 NFSv2,因为 NFSv2 的性能比 v3 和 v4 差得多。在现代的 Linux 发行版中这应该不是问题,但是可以在服务器上检查 nfsstat 的输出,了解是否有任何 NFSv2 调用。


nfs/exports用户映射选项
all_squash 将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
no_all_squash 与all_squash取反(默认设置);
root_squash 将root用户及所属组都映射为匿名用户或用户组(默认设置);
no_root_squash 与rootsquash取反,即不限制root;
anonuid=xxx 将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
anongid=xxx 将远程访问的所有用户组都映射为匿名用 户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
其它选项
secure 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure 允许客户端从大于1024的tcp/ip端口连接服务器;
sync 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async 将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay 检查是否有相关的写操作,如果有则将这些写操作 一起执行,这样可以提高效率(默认设置);
no_wdelay 若有写操作则立即执行,应与sync配合使用;
subtree 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
no_subtree 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;