NFS:Network File System 网络文件系统,基于内核的文件系统。Sun公司开发,通过使用NFS,用户
和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol
远程过程调用)实现
RPC采用C/S模式,客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待应
答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进
程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,
获得进程结果,然后调用执行继续进行
NFS优势:节省本地存储空间,将常用的数据,如:/home目录,存放在NFS服务器上且可以通过网络访
问,本地终端将可减少自身存储空间的使用
端口:2049(nfsd), 其它端口由portmap(111)分配
说明:CentOS 6 开始portmap进程由rpcbind代替
NFS服务主要进程:
rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
rpc.lockd 非必要,管理文件锁,避免同时写出错
rpc.statd 非必要,检查文件一致性,可修复文件
配置文件:/etc/exports
/etc/exports.d/*.exports
单个主机:ipv4,ipv6,FQDN IP
networks:两种掩码格式均支持 172.18.0.0/255.255.0.0 172.18.0.0/16
wildcards:主机名通配,例如*.magedu.com,IP不可以
netgroups:NIS域的主机组,@group_name
anonymous:表示使用*通配所有客户端
每个条目指定目录导出到的哪些主机,及相关的权限和选项
默认选项:(ro,sync,root_squash,no_all_squash)
ro,rw 只读和读写
async 异步,数据变化后不立即写磁盘,性能高
sync(1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘
root_squash (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,早期版本 是4294967294 (nfsnobody)
no_root_squash 远程root映射成root用户
all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
no_all_squash (默认)保留共享文件的UID和GID
anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合all_squash使用
rpcinfo 工具可以查看RPC相关信息
rpcinfo –s hostname
rpcinfo -p hostname
[root@centos8 ~]#rpcinfo -p
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
100024 1 udp 36310 status
100024 1 tcp 45265 status
[root@centos8 ~]#rpcinfo -s
program version(s) netid(s) service owner
100000 2,3,4 local,udp,tcp,udp6,tcp6 portmapper superuser
100024 1 tcp6,udp6,tcp,udp status
100021 4 tcp 36100 nlockmgr
exportfs:可用于管理NFS导出的文件系统
常见选项:
–v 查看本机所有NFS共享
–r 重读配置文件,并共享目录
–a 输出本机所有共享
–au 停止本机所有共享
配置案列:2台Centos7的主机,一台服务器,一台客户端。
服务器配置:
1、关闭防火墙、selinux
2、安装nfs-utils
[root@centos7 ~]#yum install nfs-utils
3、配置exportfs
[root@centos7 ~]#cat /etc/exports
/data/nfs1 192.168.39.101(rw)
4、创建对应的被挂载的文件
[root@centos7 ~]#mkdir /data/nfs1/
5、查看文件系统
[root@centos7 ~]#exportfs -v
/data/nfs1 192.168.39.101(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
5、启动nfs-server
[root@centos7 ~]#systemctl restart nfs-server
客户端配置:
1、关闭防火墙、selinux
2、安装nfs-utils
[root@centos7 ~]#yum install nfs-utils
3、查看可挂载的磁盘
[root@centos7 ~]# showmount -e 192.168.39.10
Export list for 192.168.39.10:
/data/nfs1 192.168.39.101
4、挂载磁盘: /nfs文件夹必须存在
mount 192.168.39.10:/data/nfs1 /nfs
5、查看挂载后结果
[root@centos7 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 730M 0 730M 0% /dev
tmpfs 746M 0 746M 0% /dev/shm
tmpfs 746M 10M 736M 2% /run
tmpfs 746M 0 746M 0% /sys/fs/cgroup
/dev/sda2 80G 4.0G 76G 5% /
/dev/sda3 47M 2.7M 45M 6% /data
/dev/sda1 1014M 168M 847M 17% /boot
tmpfs 150M 0 150M 0% /run/user/0
192.168.39.10:/data/nfs1 47M 2.8M 44M 6% /nfs
使用 mount 和umount 命令进行挂载和取消挂载,
注意以上只是临时挂载,如果要开机自动挂载需要修改, vim /etc/fstb文件,另外_netdev,没有网络时,就不挂载,避免开启启动不起来,最好加上。
权限问题:
一、以上挂载后:只能对文件夹里面进行读操作:
[root@centos7 ~]# echo sss > /nfs/rootfile
-bash: /nfs/rootfile: Read-only file system
二、更改服务器上的配置文件,改为rw,同时文件夹要设置成相应的权限,并重新启动服务就可以了
[root@centos7 ~]# cat /etc/exports
/data/nfs1/ 192.168.39.10(rw)
[root@centos7 ~]#chmod 777 /data/nfs1
[root@centos7 ~]# systemctl restart nfs-server