NFS安装
安装nfs和rpcbind
yum -y install nfs-utils
yum -y install rpcbind
配置NFS
修改/etc/exports文件
格式:共享目录 客服端IP(权限)
例1:/data/ftp/ 192.168.101.0/24(rw,no_root_squash,no_all_squash,sync)
例2:/data/ftp/ 192.168.101.1(rw,no_root_squash,no_all_squash,sync)
配置文件详解
rw:read-write,可读写;
ro:read-only,只读;
sync:同步写入(文件同时写入硬盘和内存),适用在通信比较频繁且实时性比较高的场合
async:异步写入(文件先写入内存,稍候再写入硬盘),性能较好(速度快),适合超大或者超多文件的写入,但有数据丢失的风险,
比如突然断电等情况;
注意:除非特別有需要,否则不建议使用 async。如果沒有指定 sync 或 async,NFS 服务器在启动的时候会印出警告信息。
no_root_squash:NFS客户端连接服务端时如果使用的是 root 的话,那么对服务端分享的目录也使用 root 权限。不安全!
root_squash:把客户端 root 身份的 UID/GID (0/0) 对应到服务端的 nobody 用户去,即服务端使用 nobody 用户来操作共
享目录;
all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;
anongid:匿名用户的GID值。
启动服务
rpc需要先启动
systemctl start rpcbind
systemctl start nfs
查看NFS共享配置
服务端
showmount -e
客户端
showmount -e 服务端地址
权限问题
服务端
注意:如果不是映射的root,就需要加属主
将nfsnobody用户给共享目录
chown -R nfsnobody 共享目录
客户端挂载NFS共享
挂载
mount -t nfs 服务端IP:/data/ftp/ /data/ftp/
开机自动挂载
服务端IP:/data/ftp/ /data/ftp nfs defaults 0 0
挂载nfs用到的选项
- hard or soft: 指定当程序无法通过NFS连接使用服务器输出的文件系统上的文件时,是否需要等待服务器重新在线。如果是soft情况,它将报错。如果指定hard,用户无法不能终止程序等待NFS通讯恢复,除非同时指定了intr选项。如果指定了soft,用户可以设置附加选项timeo=,指定了错误报告之前的秒数。
- intr:当服务器宕机或者无法到达时,允许中断NFS请求。
- nfsvers:nfsvers=2或者nfsvers=3 – 指定使用那个版本的NFS协议。
- nolock:禁用文件锁。这个设置在连接到一个旧版本的NFS服务器时偶尔会用到。
- noexec: 防止执行被挂接的系统上的二进制文件。这在系统通过NFS挂接一个包含有不兼容的二进制文件的非linux系统时是很有用的。
- nosuid – 禁用"设置用户标志位"(set-user-identifier)或者"设置组标志位"(set-group-identifier)。这样防止远程用户运行setuid程序获得更高权限。
- rsize=8192和wsize=8192 – 通过设定大的同时传输的数据块大小(bytes),以提高NFS读写的速度。改变这些值时要当心,一些旧的linux内核和网卡在大的块大小不能正常工作。
- tcp – 指定NFS使用TCP协议mount,替换UDP
- 例如:在开发板上挂载PC机上的一个目录,如/source/rootfs (该目录已经在/etc/exports文件中配置)
mount -t nfs -o nolock -o tcp -o nfsvers=3 192.168.8.129:/source/rootfs /mnt/nfs
NFS 固定端口
NFS启动时会随机启动多个端口并向RPC注册,为了设置安全组以及iptables规则,需要设置NFS固定端口。
NFS服务需要开启 mountd,nfs,nlockmgr,portmapper,rquotad这5个服务,其中nfs、portmapper的端口是固定的,另外三个服务的端口是随机分配的,所以需要给mountd,nlockmgr,rquotad设置固定的端口。
修改配置
其中,给mountd、rquotad设置端口的方式很简单,在/etc/sysconfig/nfs中添加一下设置即可:
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
重启rpc、nfs的配置与服务
systemctl restart rpcbind.service
systemctl restart nfs.service
查看端口使用情况
rpcinfo -p
修改nlockmgr端口
可以看到mountd服务已经使用了配置的端口,但是nlockmgr的端口还是随机的,还需在/etc/modprobe.d/lockd.conf中添加以下设置:
options lockd nlm_tcpport=30002
options lockd nlm_udpport=30002
重新加载NFS配置和服务
systemctl restart nfs-config
systemctl restart nfs-idmap
systemctl restart nfs-lock
systemctl restart nfs-server