NFS挂载
目录
Server
部署步骤
-
安装nfs包
yum install -y nfs-utils
只安装 nfs-utils 即可,rpcbind 属于它的依赖,也会安装上。
-
创建一个nfs共享目录,并添加other write权限
chmod o+w /data
-
添加export的范围,即lclient的ip段和连接目录
vim /etc/exports /data/ 192.168.0.0/24(rw,sync,no_root_squash,no_all_squash)
-
/data
: 共享目录位置。 -
192.168.0.0/24
: 客户端 IP 范围,*
代表所有,即没有限制。 -
rw
: 权限设置,可读可写。 -
sync
: 同步共享目录。 -
no_root_squash
: 可以使用 root 授权。 -
no_all_squash
: 可以使用普通用户授权。
访问权限选项: ro: 设置共享目录为只读的权限 rw: 设置共享目录为可读写的权限 用户映射选项: all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组,相当于使用nobody用户访问该共享目录(此参数为默认设置); no_all_squash:与all_squash相反; root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置); no_root_squash:与rootsquash相反,即以root身份访问; anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx); anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx)。 其它选项: sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性; async:将数据先保存在内存缓冲区中,必要时才写入磁盘; wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置); no_wdelay:若有写操作则立即执行,应与sync配合使用; secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置); insecure:允许客户端从大于1024的tcp/ip端口连接服务器; subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置); no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率。
-
-
防火墙规则
firewall-cmd --zone=public --permanent --add-service={rpc-bind,mountd,nfs} firewall-cmd --reload
NFS服务的默认端口是2049, tcp和udp的2049和111(rpcbind)都必须打开
还需要为showmount命令打开tcp和udp的2048端口,以便能从服务器上的rpc.mounted查询到NFS共享目录。
-
启动服务
systemctl start rpcbind systemctl start nfs-server
-
检查nfs服务,共享路径是否正常
确认rpc nfs服务启动成功 rpcinfo -p exportfs配置是否生效 exportfs -rav /data 192.168.248.0/24 showmount -e localhost
过程采坑
Aug 13 14:23:13 hb1-bjmy1-uca-k8s-ansible rpc.mountd[3157]: refused mount request from 10.97.1.134 for /data (/data): unmatched host
检查/etc/exports,原来写的地址不是client的cidr段,于是修改,后能挂载了
[root@hb1-bjmy1-uca-k8s-ansible ~]# cat /etc/exports
/data 10.97.1.0/24(rw,sync,no_root_squash)
当server需要提供多个共享目录时,系统提示需要fsid参数的配置,
NFS导出中有重复的fsid =值。fsid =值必须唯一。
export :fsid = num | root | uuid
对于NFSv4,有一个独特的文件系统,它是所有导出文件系统的根。这是用fsid = root或fsid = 0指定的,这两者意义相同。
也就是说:
如果要导出为nfsv4版本的挂载目录,则需设置fsid=0, 客户端挂载的方式必须是
mount.nfs4 server_ip:/ /local/path
需要使用server地址加根目录的方式,每个server只能有一个fsid=0的路径设置,其他的每个路径的fsid需要大于0,并且不能重复。
在nfs3的情况下,多目录挂载,采用uuid作为fsid比较合理
Client
showmount -e server_ip
- nfs3: mount -t nfs -o noatime server_ip:/path /本地路径
- nfs4: mount -t nfs -o ver4 server_ip:/ /本地路径
两者的区别
简单说nfs3采用了UDP协议,nfs4采用了TCP协议
相关命令
exportfs
如果启动NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs 命令来使改动立刻生效,该命令格式如下:
# exportfs [-aruv]
-a 全部挂载或卸载 /etc/exports中的内容
-r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab
-u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
-v 在export的时候,将详细的信息输出到屏幕上
例:
# exportfs -au --卸载所有共享目录
# exportfs -rv --重新共享所有目录并输出详细信息
nfsstat
用于查看列出NFS的运行状态。
rpcinfo
查看rpc执行信息,可以用于检测rpc运行情况的工具,利用rpcinfo -p
可以查看出rpc开启的端口所提供的程序有哪些。
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 44027 mountd
100005 1 tcp 42845 mountd
100005 2 udp 34296 mountd
100005 2 tcp 48041 mountd
100005 3 udp 52676 mountd
100005 3 tcp 52881 mountd
100003 3 tcp 2049 nfs
100227 3 tcp 2049
100003 3 udp 2049 nfs
100227 3 udp 2049
100021 1 udp 47756 nlockmgr
100021 3 udp 47756 nlockmgr
100021 4 udp 47756 nlockmgr
100021 1 tcp 46851 nlockmgr
100021 3 tcp 46851 nlockmgr
100021 4 tcp 46851 nlockmgr
其中nfs的端口是2049,rpcbind的端口是111,mountd和nlockmgr 对应的端口是随机分配的。
showmount
-
-a
显示已经于客户端连接上的目录信息 -
-e
IP或者hostname 显示此IP地址共享的目录
配置(ubuntu)
mountd、nlockmgr、和status服务默认情况下是随机分配端口的。
修改rpcbind端口
配置文件:
(centos)/etc/sysconfig/rpcbind
(ubuntu)/etc/default/rpcbind
修改字段的值
OPTIONS="-p 端口号"
配置status服务端口为40000
修改/etc/default/nfs-common
文件:
STATDOPTS="--port 40000"
配置mountd服务端口为30003
修改/etc/default/nfs-kernel-server
文件:
RPCMOUNTDOPTS="--manage-gids --port 30003"
配置nlockmgr端口为30006
创建/etc/modprobe.d/options.conf
文件,添加如下内容,:
options lockd nlm_udpport=30006 nlm_tcpport=30006
在/etc/modules文件中添加lockd:
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
lockd
ufw放开端口
sudo ufw allow from 192.168.33.0/24 to any port nfs
或者
sudo ufw allow 111...