NFS是什么
NFS是附加在本地文件系统之上的一层虚拟层,这个虚拟层可以使一个本地文件系统通过网络输出给其他主机访问,所以NFS叫做网络附加存储。NFS只适用于linux或unix主机之间的网络共享,不支持windows主机。
NFS实现过程
比如服务器端有一个xfs文件系统通过监听的套接字向外输出,它通过内核中的nfs模块把本地的xfs接口转成了nfs接口变成nfs服务端向外输出。客户端要使用nfs服务器提供的网络附加存储时,先用mount命令把nfs服务器提供输出的文件系统挂载至本地的文件系统路径下,此时客户端查看挂载的目录是nfs文件系统,当访问这个挂载的目录时,所有的请求都通过这个协议远程传输到nfs服务器,服务端会将客户端的nfs请求通过内核nfs模块再转成服务器本地磁盘上的xfs文件来操作。
NFS配置
环境配置
192.168.10.10 nfs服务器
192.168.10.11 客户机
配置服务端
[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# mkdir -pv /data/mysql/test
[root@localhost ~]# useradd -u 1001 lsh
[root@localhost ~]# chown -R 1001.1001 /data/mysql/test/
[root@localhost ~]# ll -d /data/mysql/test/
drwxr-xr-x 2 lsh lsh 6 Jun 18 22:30 /data/mysql/test/
#把test目录赋值属主属组为1001
[root@localhost ~]# vim /etc/exports
/data/mysql 192.168.10.11(rw) 192.168.0.0/16(ro)
[root@localhost ~]# systemctl start nfs.service
客户机挂载测试
[root@localhost ~]# yum -y install nfs-utils #客户端也要安装nfs包才能识别挂载
[root@localhost data]# mount -t nfs 192.168.10.10:/data/mysql /mnt
[root@localhost data]# mount | grep /data/mysql
192.168.10.10:/data/mysql on /mnt type nfs4 (rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.10.11,local_lock=none,addr=192.168.10.10)
#查看挂载信息,挂载成功
[root@localhost ~]# cd /mnt/test/
[root@localhost test]# touch a.txt
touch: cannot touch ‘a.txt’: Permission denied
#进入挂载的目录创建文件失败,因root管理员权限在服务端被映射成nfsnobody没有写权限
[root@localhost ~]# useradd -u 1001 lsh
[root@localhost ~]# su - lsh
[lsh@localhost ~]$ cd /mnt/test/
[lsh@localhost test]$ touch a.txt
[lsh@localhost test]$ ll
total 0
-rw-rw-r-- 1 lsh lsh 0 Jun 18 22:46 a.txt
#客户机登录属主属组ID为1001的用户就拥有对挂载目录的读写权限
配置客户端root在挂载目录中映射成1001用户
服务端
[root@localhost ~]# vim /etc/exports
/data/mysql 192.168.10.11(rw,anonuid=1001,anongid=1001) 192.168.0.0/16(ro)
[root@localhost ~]# exportfs -rav
客户端
[root@localhost ~]# mount -t nfs 192.168.10.10:/data/mysql /mnt
[root@localhost ~]# cd /mnt/test/
[root@localhost test]# touch root.txt
[root@localhost test]# ll
total 0
-rw-rw-r-- 1 lsh lsh 0 Jun 18 22:46 a.txt
-rw-r--r-- 1 lsh lsh 0 Jun 18 23:09 root.txt
#用root可以在目录下创建文件,root映射成了属主lsh
用另一台主机192.168.10.12测试
[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# mount -t nfs 192.168.10.10:/data/mysql /mnt
[root@localhost ~]# cd /mnt/test/
[root@localhost test]# ll
total 0
-rw-rw-r-- 1 1001 1001 0 Jun 18 22:46 a.txt
-rw-r--r-- 1 1001 1001 0 Jun 18 23:09 root.txt
[root@localhost test]# touch hi.txt
touch: cannot touch ‘hi.txt’: Read-only file system
#挂载成功,但是此ip段在服务器上只定义了读权限,没有写权限