实验环境:VMware Workstation Pro 14(试用版)
系统平台:
CentOS Linux release 7.4.1708 (Core) 内核 3.10.0-693.el7.x86_64
NFS配置介绍
软件包
nfs-utils
端口
2049(nfsd), 其它端口由rpcbind(111)分配
工作过程
NFS启动时,会将所使用的端口向rpcbind注册,当有客户端访问的时候,客户端首先通讯的是rpcbind(111),进而rpcbind会告知NFS所使用的端口,客户端就可以通过端口访问NFS服务了。
配置文件:
/etc/exports
/etc/exports.d/*.exports
依赖包
rpcbind(必须)
tcp_wrappers
日志
/var/lib/nfs/
NFS服务主要进程
rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
rpc.lockd 非必要,管理文件锁,避免同时写出错
rpc.statd 非必要,检查文件一致性,可修复文件
CentOS 7不支持同一目录同时用nfs和samba共享,因为使用锁机制不同
启动NFS
# systemctl start nfs
# systemctl start nfs-server
在Centos 6上,rpcbind必须先启动,否则NFS无法启动
在Centos 7上,NFS服务启动时,会把依赖的服务rpcbind一并启动
rpcbind.service可以被rpcbind.socket 激活,rpcbind.socket独立工作
报以下错误的时候
clnt_create: RPC: Program not registered > 重启NFS服务重新注册到rpcbind
clnt_create: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused) > rpcbind服务未启动,重启rpcbing和nfs服务,注意顺序
查看NFS开启的端口
# rpcinfo -p
如果需要在外部使用NFS服务,需要调整防火墙策略
必须先把NFS配置使用固定端口
vim /etc/sysconfig/nfs
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
STATD_OUTGOING_PORT=2020
防火墙除开放上述端口,还需开放TCP和UDP的 111 和 2049 共4个端口
配置NFS
语法格式
目录路径 允许访问的IP地址或FQDN列表(选项1,选项2)
/app/nfs * > * 代表所有
/app/nfs 192.168.5.10(ro) 192.168.5.13(rw) > 列表以空格分隔
/app/nfs 192.168.5.0/24(rw)
/app/nfs *.magedu.com
默认选项:(ro,sync,root_squash,no_all_squash)
• ro,rw 只读和读写
• async 异步,数据变化后不立即写磁盘,性能高
• sync(1.0.0后为默认)同步,数据在请求时立即写入共享
• no_all_squash (默认)保留共享文件的UID和GID
• all_squash 所有远程用户(包括root)都变成nfsnobody
• root_squash (默认)远程root映射为nfsnobody,UID为65534,早期版本是4294967294 (nfsnobody)
• no_root_squash 远程root映射成root用户
• anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合all_squash使用
生效与查看共享资源
# exportfs -r
exportfs: No options for /app/nfs *: suggest *(sync) to avoid warning
# exportfs -v
/app/nfs (ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
通过远程主机查看
# showmount -e 192.168.5.108
Export list for 192.168.5.108:
/app/nfs *
远程主机挂载NFS共享
Linux主机
# mount -t nfs 192.168.5.108:/app/nfs /tmp/nfs
# mount 192.168.5.108:/app/nfs /tmp/nfs
#df
Filesystem 1K-blocks Used Available Use% Mounted on
192.168.5.108:/app/nfs 8913920 1422112 7491808 16% /tmp/nfs
# mount
192.168.5.108:/app/nfs on /tmp/nfs type nfs (rw,vers=4,addr=192.168.5.108,clientaddr=192.168.5.107)
指定NFS版本号挂载
# mount -o vers=3 192.168.5.108:/app/nfs /tmp/nfs
192.168.5.108:/app/nfs on /tmp/nfs type nfs (rw,vers=3,addr=192.168.5.108)
永久挂载
# vim /etc/fstab
192.168.5.108:/app/nfs /tmp/nfs nfs vers=3 0 0
192.168.5.108:/app/nfs /tmp/nfs nfs defaults 0 0
Wdindows下挂载
c:\>mount 192.168.5.108:/app/nfs Z:
Z: 现已成功连接到 192.168.5.108:/app/nfs
命令已成功完成。
NFS权限情况
1.NFS共享受文件系统权限影响
2.受下以选项影响
root_squash (默认)远程root映射为nfsnobody,UID为65534,早期版本是4294967294 (nfsnobody)
no_root_squash 远程root映射成root用户
anonuid和anongid
NFS工具
rpcinfo
rpcinfo -p hostname
rpcinfo –s hostname 查看RPC注册程序
exportfs
–v 查看本机所有NFS共享
–r 重读配置文件,并共享目录
–a 输出本机所有共享
–au 停止本机所有共享
showmount -e hostname
mount.nfs 挂载工具
NFS相关的挂载选项
fg (默认)前台挂载,bg后台挂载
hard(默认)持续请求,soft 非持续请求
intr 和hard配合,请求可中断
rsize和wsize 一次读和写数据最大字节数,rsize=32768
_netdev 无网络不挂载
示例:
mount -o rw,nosuid,fg,hard,intr 172.16.0.1:/testdir /mnt/nfs/
实现NFS的伪根
/app *(fsid=0,rw,crossmnt) > 指明NFS根的路径,(fsid=0,crossmn)这2个选项需要添加
/app/nfs *(rw)
/app/home/hunk *(rw)
重新加载配置
#exportfs -r
查看
#exportfs -v
/app (rw,sync,wdelay,hide,crossmnt,no_subtree_check,fsid=0,sec=sys,secure,root_squash,no_all_squash)
/app/nfs (rw,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
/app/home/hunk (rw,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
远程主机挂载NFS伪根
# mount 192.168.5.108:/ /tmp/ > 方法跟之前的是一样的,只是把远程NFS的挂载目录变为/
#tree /tmp
/tmp
├── home
│ └── hunk
│ └── hunk
└──nfs
├── aaa.txt
└── nfs1.txt