NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
使用场景:个人建议nfs文件系统最好用搭建在内网,适合中小型网络服务文件共享
1、安装
[root@localhost ~]# yum -y install nfs-utils rpcbind
[root@localhost ~]# rpm -ql nfs-utils
/usr/lib/systemd/system/nfs.service
/usr/lib/systemd/system/nfs-lock.service
/usr/lib/systemd/system/nfs-mountd.service
/usr/lib/systemd/system/rpc-statd.service
....
2、创建需要导出的目录
[root@localhost /]# mkdir /nfsshared/node1 -pv
3、导出配置文件说明
/etc/exports或/etc/exports.d/*
/PATH/TO/SOME_DIR clients1(export_options, ...) clients2(export_options, ...)
clients:
single host:ipv4, ipv6, FQDN;
network:address/netmask, 支持长短格式的掩码;
wildcards:主机名通配,例如:*.zander.com;
netgroups:NIS域内的主机组;@group_name;
anonymous:使用*通配所有主机;
General Options:
ro:只读
rw:读写;
sync:同步;
async:异步;
secure:客户端端口小于1024,否则就要使用insecure选项;
User ID Mapping:
root_squash:压缩root用户,一般指将其映射为nfsnobody;
no_root_squash:不压缩root用户;
all_squash:压缩所有用户;
anonuid and anongid:将压缩的用户映射为此处指定的用户;
3.1、配置文件
[root@localhost /]# vim /etc/exports
/nfsshared/node1 172.16.86.210/24(rw)
#mount端口应该固定防止占用其他端口
[root@sherry node1]# vim /etc/sysconfig/nfs
MOUNTD_PORT=892
4、启动
[root@localhost /]# systemctl start nfs
#nfs内部实现机制太复杂了
nfs-idmapd.service loaded active running NFSv4 ID-name mapping service id名字映射
nfs-mountd.service loaded active running NFS Mount Daemon 认证挂载
nfs-server.service loaded active exited NFS server and services 主服务
rpc-statd.service loaded active running NFS status monitor for NFSv2/3 locking. 状态监控
rpcbind.service loaded active running RPC bind service nfs注册到rpc服务
5、客户端
[root@ns1 test]# yum install nfs-utils
[root@ns1 test]# showmount -e 172.16.86.210
Export list for 172.16.86.210:
/nfsshared/node1 172.16.86.210/24
#挂载
[root@ns1 test]# mount.nfs 172.16.86.210:/nfsshared/node1 /mnt/t4
[root@ns1 test]# mount|grep nfs
172.16.86.210:/nfsshared/node1 on /mnt/t4 type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.86.209,local_lock=none,addr=172.16.86.210)
客户端挂载优化参数timeo增加,rsize wsize增大
6、写入
#写入时候文件都是看当前用户的id,id解析成用户名
压缩理解
客户端如果是root ID=0
服务器如果不压缩,文件写入id=0 服务器解释id=0 为root,客户端也是root
服务器如果压缩,文件写入id是服务器nfsnobody对应id 假如是100 客户端反接100得到用户名
普通用户,
客户端写入时候是zander id=10000 ,显示zander,服务器端显示id=10000的用户
#服务器
[root@localhost node1]# chmod o+w f1/
[root@localhost node1]# ls
f1
#客户端在f1下面写入
[root@ns1 f1]# touch a.txt
[root@ns1 f1]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 20 22:09 a.txt
6.1 最佳写入方式
指定用户
客户端无论什么身份运行,服务器都是按照指定的用户存储,客户端反解服务器指定用id来显示,前提是服务器指定的用户要有对目录操作权限
服务器
[root@localhost f1]# useradd marvin
[root@localhost f1]# id marvin
uid=1003(marvin) gid=1003(marvin) 组=1003(marvin)
[root@localhost f1]# vim /etc/exports
/nfsshared/node1 172.16.86.210/24(rw,anonuid=1003,anongid=1003)
#reload
[root@localhost f1]# exportfs -rav
exporting 172.16.86.210/24:/nfsshared/node1
#客户端
[root@ns1 f1]# touch c.txt
[root@ns1 f1]# ls
c.txt
[root@ns1 f1]# ll
total 0
-rw-r--r-- 1 1003 1003 0 May 20 22:27 c.txt