nfs服务

  • 用一个磁盘来进行挂载

  • 创建一个nfs的目录,然后写入到配置文件中去,允许客户端可以访问挂载

  • 但是大小不知道,因此我就有一个磁盘100G的大小,直接挂载到这个nfs目录上面去,因此这个目录就有100G的大小了

  • 然后客户端将这个100G目录挂载到我本地的/mnt目录下,我也就有了100G的大小了,实现了同步了

一、NFS存储服务

1、概念说明

  • nfs就是network file system 是网络文件共享系统

  • 通过网络让不同主机系统之间可以共享文件或者目录

  • nfs客户端通过挂载的方式将nfs服务器端共享的数据目录挂载到客户端上面,从客户端上来看的话,这个共享的目录就好像是自己的磁盘分区或者目录,但是其实是远端nfs服务器的目录

img

2、存储的分类

  • ftp和samba,可以实现windows和linux之间的文件共享

  • nfs只能实现linux和linux之间的共享数据

二、NFS部署

1、nfs服务启动流程

  • 第一步:启动RPC服务(中介)

  • 第二步: 启动NFS进程,将nfs服务端口信息告知rpc服务进程管理

  • 第三步:客户端访问rpc服务,询问nfs服务端口信息

  • 第四步:rpc服务返回客户端信息(nfs端口信息)

  • 第五步;客户端根据这个端口访问nfs服务器,实现文件共享

img

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、配置参数

img

  • 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才能修改了

  • 单独是一个用户修改的话,可以将共享目录修改为这个用户

posted @ 2025-09-08 20:30  乔的港口  阅读(18)  评论(0)    收藏  举报