-
用一个磁盘来进行挂载
-
创建一个nfs的目录,然后写入到配置文件中去,允许客户端可以访问挂载
-
但是大小不知道,因此我就有一个磁盘100G的大小,直接挂载到这个nfs目录上面去,因此这个目录就有100G的大小了
-
然后客户端将这个100G目录挂载到我本地的/mnt目录下,我也就有了100G的大小了,实现了同步了
一、NFS存储服务
1、概念说明
-
nfs就是network file system 是网络文件共享系统
-
通过网络让不同主机系统之间可以共享文件或者目录
-
nfs客户端通过挂载的方式将nfs服务器端共享的数据目录挂载到客户端上面,从客户端上来看的话,这个共享的目录就好像是自己的磁盘分区或者目录,但是其实是远端nfs服务器的目录
2、存储的分类
-
ftp和samba,可以实现windows和linux之间的文件共享
-
nfs只能实现linux和linux之间的共享数据
二、NFS部署
1、nfs服务启动流程
-
第一步:启动RPC服务(中介)
-
第二步: 启动NFS进程,将nfs服务端口信息告知rpc服务进程管理
-
第三步:客户端访问rpc服务,询问nfs服务端口信息
-
第四步:rpc服务返回客户端信息(nfs端口信息)
-
第五步;客户端根据这个端口访问nfs服务器,实现文件共享
2、nfs部署流程
1、服务端部署
- 第一步:安装nfs和rpc软件
yum -y install nfs-utils rpcbind
- 第二步:编写nfs软件
# 服务的配置文件
[root@master ~]# ll /etc/exports
-rw-r--r--. 1 root root 0 Jun 23 2020 /etc/exports[root@master ~]# cat /etc/exports
/nfs-share 192.168.50.0/24(rw,sync)# 第一列 设置nfs存储目录# 第二列 设置nfs服务访问的白名单# 第三列 设置存储目录权限等等其他的功能
- 第三步:创建存储目录,对目录设置+w权限
[root@master ~]# mkdir /nfs-share
[root@master ~]# touch /nfs-share/nfs-flag
[root@master ~]# ll /nfs-share/
total 0
-rw-r--r--. 1 root root 0 Sep 8 19:56 nfs-flag
[root@master ~]# ll /nfs-share/ -d
drwxr-xr-x. 2 root root 22 Sep 8 19:56 /nfs-share/
[root@master ~]# chmod +w /nfs-share/
[root@master ~]# ll /nfs-share/ -d
drwxr-xr-x. 2 root root 22 Sep 8 19:56 /nfs-share/# 设置其他用户对这个目录,有写的权限
[root@master ~]# chmod o+w /nfs-share/
[root@master ~]# ll /nfs-share/ -d
drwxr-xrwx. 2 root root 22 Sep 8 19:56 /nfs-share/# 或者修改拥有用户和拥有组为nfsnobody,因为这个是nfs自动创建虚拟用户,用于管理存储目录的
- 第四步:启动nfs服务,防火墙操作
# 防火墙放行nfs,rpc-bind,mountd这些
[root@master ~]# firewall-cmd --permanent --add-service=nfs
success
[root@master ~]# firewall-cmd --permanent --add-service=rpc-bind
success
[root@master ~]# firewall-cmd --permanent --add-service=mountd
success
# 立刻生效
[root@master ~]# firewall-cmd --reload
success# selinux不用修改,samba需要修改,这个是linux之间共享的文件,都是linux之间内部的信息,所以的话,不需要修改# 启动nfs服务
systemctl enable nfs-server --now
systemctl enable rpcbind --now[root@master ~]# netstat -pant|grep rpc
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 5023/rpc.mountd
tcp 0 0 0.0.0.0:36517 0.0.0.0:* LISTEN 5016/rpc.statd
tcp6 0 0 :::20048 :::* LISTEN 5023/rpc.mountd
tcp6 0 0 :::51059 :::* LISTEN 5016/rpc.statd
2、nfs客户端部署
- 安装nfs软件
[root@node1 ~]# yum -y install nfs-utils
- 挂载nfs服务器的共享目录
# mount -t nfs协议 nfs服务器:共享目录 挂载到本地的那一个目录上面去[root@node1 ~]# mount -t nfs 192.168.50.10:/nfs-share /mnt/
[root@node1 ~]# ls /mnt/
nfs-flag
[root@node1 ~]# touch /mnt/node1.txt
[root@node1 ~]# df -hT /mnt
Filesystem Type Size Used Avail Use% Mounted on
192.168.50.10:/nfs-share nfs4 50G 2.2G 48G 5% /mnt# 企业中的话,会有一个几个T的盘挂载到这个共享目录上面去,即可
三、NFS工作原理和配置参数
1、原理
-
服务端工作原理
-
启动rpc服务,开启111端口
-
启动nfs服务
-
实现nfs服务进程和端口信息向rpc服务注册
-
-
客户端工作原理
-
客户端和服务端建立tcp网络连接
-
客户端执行挂载命令,进行远程挂载
-
实现数据传输
-
2、配置参数
-
rw 存储目录是否有读写权限
-
ro 存储目录是否时只读权限
-
sync 同步方式存储数据 直接将数据保存到磁盘(数据存储安全)
-
async 异步方式存储数据 直接将数据保存到内存(提高数据存储效率)
-
no_root_squash 不要将root用户身份转换(默认参数)
-
root_squash 将root用户身份转换为nfsnobody
-
all_squash 将所有普通用户转换
-
no_all_squash 不要将所有用户转换
-
all_squash功能
# nfs服务端修改配置文件参数
[root @nfs ~ ]# cat /etc/exports
/date 172.16.1.0/24(rw,sync,all_squash)[root @nfs ~ ]# systemctl restart nfs# 客户端backup挂载存储目录,创建数据。(需要重新挂载共享目录)
[root @backup ~ ]# mount -t nfs 172.16.1.31:/date /mnt/nfs
[root @backup ~ ]# su - xuan
[xuan @backup ~ ]$ touch /mnt/nfs/xuan_backup.txt[xuan @backup ~ ]$ ll /mnt/nfs/xuan_backup.txt
-rw-rw-r-- 1 nfsnobody nfsnobody 0 Sep 3 08:55 /mnt/nfs/xuan_backup.txt
- no_all_squash功能
# nfs服务端修改配置文件参数
[root @nfs ~ ]# cat /etc/exports
/date 172.16.1.0/24(rw,sync,no_all_squash)# 客户端操作,没有权限创建。原因:no_all_squash取消其他用户映射nfsnobody身份,以共享目录其他身份权限操作
[xuan @backup ~ ]$ touch /mnt/nfs/xuan_backup_no_squash.txt
touch: cannot touch ‘/mnt/nfs/xuan_backup_no_squash.txt’: Permission denied解决权限问题:
1.修改目录属主信息
2.修改目录其他用户权限chmod o+w /date
四、总结
1、权限这个问题的话
-
首先就是配置文件的权限,
-
还有就是共享目录的权限
2、配置文件参数
-
root_squash,all_squash,就是会将用户转换为nfsnobody,如果将共享目录属主和属组都改为nfsnobody就能直接操作了
-
no_root_squash,no_all_squash,不会将用户进行转换,也就是需要将共享目录o+w才能修改了
-
单独是一个用户修改的话,可以将共享目录修改为这个用户