Linux之NFS
NFS
Network File System(NFS),即网络文件系统,是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。
RPC
When an RPC service is started, it tells rpcbind the address at which it is listening, and the RPC program numbers it is prepared to serve. When a client wishes to make an RPC call to a given program number, it first contacts rpcbind on the server machine to determine the address where RPC requests should be sent.
RPC服务在nfs共享时负责通知客户端,服务器的nfs端口号。简单理解rpc就是一个中介服务。
服务器环境
cat /etc/redhat-release
服务器:CentOS7.8
客户端:CentOS7.4
服务器端
安装服务
yum install -y nfs-utils
安装 NFS 服务器所需的软件包
增加共享目录
vi /etc/exports
/dbbackup 222.222.221.0/24(rw,sync,fsid=0)
rw表示可读写;sync表示同步写,fsid=0表示将/data找个目录包装成根目录。
chmod 777 /dbbackup #不要忘记赋予权限,不然执行不了
其他参数说明
ro:共享目录只读
rw:共享目录可读可写
all_squash:所有访问用户都映射为匿名用户或用户组
no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组
root_squash(默认):将来访的root用户映射为匿名用户或用户组
no_root_squash:来访的root用户保持root帐号权限
secure(默认):限制客户端只能从小于1024的tcp/ip端口连接服务器
insecure:允许客户端从大于1024的tcp/ip端口连接服务器
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
async:将数据先保存在内存缓冲区中,必要时才写入磁盘
wdelay(默认):检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率
no_wdelay:若有写操作则立即执行,应与sync配合使用
subtree_check :若输出目录是一个子目录,则nfs服务器将检查其父目录的权限
no_subtree_check(默认) :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
启动
rpcbind和nfs设为开机启动:(必须先启动rpcbind服务)
systemctl enable rpcbind.service
systemctl enable nfs-server.service
然后分别启动rpcbind和nfs服务
systemctl start rpcbind.service
systemctl start nfs-server.service
检查
确认NFS服务器启动成功
rpcinfo -p #确认NFS服务器启动成功及端口情况
exportfs -r #使配置生效
exportfs #查看已共享目录
exportfs -v #查看已共享目录 -详细
开启服务端口
修改服务端口
vi /etc/sysconfig/nfs #修改nfs端口
MOUNTD_PORT="4002"
STATD_PORT="4003"
LOCKD_TCPPORT="4004"
LOCKD_UDPPORT="4004"
开放端口
#添加rpcinfo -p下的端口,除了上面配置的4002、4003、4004外,还有111和2049这两个端口的tcp和udp端口也要开放。
firewall-cmd --zone=public --add-port=111/tcp --permanent
firewall-cmd --zone=public --add-port=2049/tcp --permanent
firewall-cmd --zone=public --add-port=111/udp --permanent
firewall-cmd --zone=public --add-port=2049/udp --permanent
firewall-cmd --zone=public --add-port=4002/tcp --permanent
firewall-cmd --zone=public --add-port=4003/tcp --permanent
firewall-cmd --zone=public --add-port=4004/tcp --permanent
#重新载入
firewall-cmd --reload
#查看所有打开的端口
firewall-cmd --zone=public --list-ports
## 重启两个服务
systemctl restart rpcbind.service
systemctl restart nfs-server.service
客户端
安装NFS
#安装nfs,但客户端只启动rpcbind就可以了
yum install -y nfs-utils
#开机启动rpcbind
systemctl enable rpcbind.service
#启动rpcbind服务
systemctl start rpcbind.service
注意:客户端不需要启动nfs服务,只需要启动rpcbind即可。
检查服务器端端口
rpcinfo -p 222.222.221.189 #服务器端ip
如果服务器开启,显示的结果和服务器端执行的rpcinfo -p结果一致。若服务器端没有开启端口,会提示
rpcinfo: can't contact portmapper: RPC: Remote system error - No route to host
检查共享目录
#检查 NFS 服务器端是否有目录共享:
showmount -e nfs服务器的IP
如果提示 “clnt_create: RPC: Program not registered”,执行rpc.mountd
即可
注意:需要把111和2049的udp端口开放才可以showmount,如果不开111和2049的UDP端口,showmount -e不通但是依然挂载,如下图。
挂载共享文件夹到本地目录
mkdir /nfs #新建挂载点目录
mount -t nfs 222.222.221.189:/dbbackup /nfs #挂载222.222.221.189:/dbbackup共享目录到本地的/nfs
开启自动挂载
vi /etc/rc.local #编辑自启配置文件,在文件最后加mount -t nfs 222.222.221.189:/dbbackup /nfs
chmod 755 /etc/rc.local #赋予自启权限
这时操作客户端188的/nfs文件夹即挂载了189服务端的/dbbackup文件夹。
取消挂载
umount /nfs #取消挂载
当出现umount.nfs: /nfs: device is busy时
fuser -m -v /nfs #查看占用/nfs的进程
kill -9 PID #杀死进程ID
![微信公众号二维码](https://images.cnblogs.com/cnblogs_com/aeolian/1679458/o_wechat_gzh_qrcode.jpg)