Linux网络文件共享服务之NFS

目录

一、NFS简介

1、NFS协议

2、NFS存储

3、NFS原理

4、NFS相关软件介绍

5、NFS配置文件

二、exportfs和showmount命令

三、搭建NFS服务器

1、搭建过程

2、客户端权限问题

2.1 权限参数说明

2.2 配置客户端的读写权限

2.3 创建文件的属主和属组权限

2.4 客户端创建文件都指向同一属主和属组


一、NFS简介

1、NFS协议

NFS(Network File System)是一种基于 TCP/IP 传输的网络文件系统协议,允许在网络上的不同计算机之间共享文件和目录。它最初由Sun Microsystems开发,现在已成为许多Unix和Linux操作系统的标准文件系统之一

2、NFS存储

NFS存储是一种通过NFS协议将存储设备共享给其他计算机使用的存储解决方案

NFS存储可以是任何支持NFS协议的存储设备,例如NAS(网络附加存储)设备、SAN(存储区域网络)设备或者直接连接到网络的硬盘驱动器

NFS存储通常用于以下场景:

  • 文件共享:NFS存储可以将存储设备中的文件共享给其他计算机,从而方便了文件的共享和协作
  • 数据备份:NFS存储可以用于数据备份,将数据备份到NFS存储设备中,从而实现数据的冗余存储和灾备恢复
  • 数据存储:NFS存储可以用于数据存储,将数据存储到NFS存储设备中,从而实现数据的集中管理和统一访问

NFS存储的优点是:

  • 灵活性:NFS存储可以根据需要进行扩展和配置,从而满足不同的存储需求
  • 可靠性:NFS存储使用缓存技术和文件锁定机制,可以提高文件访问的效率和可靠性
  • 跨平台:NFS存储支持多种操作系统,包括Unix、Linux和Windows等,这使得不同平台之间的存储共享变得更加容易
  • 管理简单:NFS存储可以通过简单的配置和管理工具进行管理,从而降低了管理成本。

NFS存储缺点:

  • 性能:NFS存储的性能受到网络带宽和延迟的影响,因此在高延迟和低带宽的网络环境中,可能会出现性能问题
  • 可靠性:NFS存储的可靠性受到网络连接的影响,如果网络连接不稳定,可能会导致存储共享的不可靠性。

综上所述,NFS存储作为一种存储解决方案,具有许多优点和一些缺点,需要根据实际需求进行选择和配置

3、NFS原理

NFS通过将文件共享给其他计算机,使得不同计算机之间的文件共享变得更加容易。它使用RPC协议进行通信,使用缓存技术和文件锁定机制提高文件访问的效率和可靠性

①NFS服务器将共享的文件和目录挂载到其文件系统中的特定位置

②NFS客户端通过网络访问NFS服务器共享的文件和目录。客户端可以像访问本地文件系统一样访问这些共享文件和目录

③当NFS客户端需要访问共享的文件或目录时,它会向NFS服务器发送RPC调用请求,NFS服务器会响应这些请求并返回所请求的数据

4、NFS相关软件介绍

NFS服务器软件:

  • nfsd:Linux系统中内置的NFS服务器软件,负责提供NFS共享服务,端口号不固定
  • FreeNFS:一个开源的Windows NFS服务器软件,用于在Windows系统上提供NFS共享服务

NFS客户端软件:

  • nfs-utils:包含了Linux系统上的NFS客户端工具,如mount.nfsumount.nfs
  • Windows Services for UNIX:这个软件包含了Windows系统上的NFS客户端工具,允许Windows系统连接到NFS共享

rpcbind软件:

  • 当一个RPC服务启动时,rpcbind会为其分配一个唯一的端口号(111),并在本地的映射表中进行记录
  • 端口号查询: 当客户端需要调用远程RPC服务时,它可以向rpcbind查询目标服务的端口号,以便建立连接

NFS服务主要进程:

  • rpc.nfsd 最主要的NFS进程,管理客户端是否可登录

  • rpc.mountd 挂载和卸载NFS文件系统,包括权限管理

  • rpc.lockd 非必要,管理文件锁,避免同时写出错

  • rpc.statd 非必要,检查文件一致性,可修复文件

5、NFS配置文件

/etc/exports:一个用于配置NFS共享的文件,包含了要与其他计算机共享的目录以及相关的访问控制信息。在这个文件中,可以指定哪些目录应该被共享,以及允许哪些计算机访问这些共享目录以及以怎样的权限进行访问。每一行通常包含一个共享目录的信息,包括共享路径、允许访问的主机或子网、以及访问权限等

#/etc/exports文件格式:

#共享目录       可以访问的主机地址(权限)
/share            *()

#共享目录     网段     读写,同步,无root权限
/share  172.16.12.0/24(rw,sync,no_root_squash)

/etc/exports.d/*.exports:一个包含多个 .exports 文件的目录。每个 .exports 文件对应一个独立的NFS共享配置

/var/lib/nfs/:日志目录,用于存储NFS服务器的运行时数据和状态信息

二、exportfs和showmount命令

exportfs:用于管理NFS导出的文件系统  

选项说明
-v查看本机所有NFS共享
-r重读配置文件,并共享目录
-a输出本机所有的共享
-au停止本机所有共享

showmount:显示NFS服务器加载的信息

选项说明
-e显示服务器上所有的共享目录

三、搭建NFS服务器

1、搭建过程

前提:关闭所有设备防火墙和临时防护

systemctl   stop  firewalld      #关闭防火墙
setenforce  0                    #关闭临时防护

环境:准备两个设备,服务端:172.16.12.10 和 客户端:172.16.12.12

#服务端和客户端都需要安装软件包
[root@localhost ~]# yum install nfs-utils.x86_64 rpcbind -y

*******************************************************************
#服务端操作
[root@localhost ~]# mkdir /share     #新建共享目录
[root@localhost ~]# cd /share/       #切换到共享目录下
[root@localhost share]#echo "welcome to DNS">test    #写入一些内容给供客户端读取

​#编辑配置文件
[root@localhost share]# vim /etc/exports
/share *
[root@localhost share]#showmount -e      #查看本机发布的NFS共享目录
[root@localhost share]#exportfs -r    #重读配置文件
[root@localhost share]#exportfs -v    #查看详细的nfs信息
[root@localhost share]#systemctl start rpcbind
[root@localhost share]#systemctl start nfs

*******************************************************************
#客户端操作
#临时挂载,重启后实效
[root@localhost ~]#mount 172.16.12.10:/share /mnt   #挂载服务器至本地文件夹
[root@localhost ~]#df -Th      #查看是否挂载成功
#永久挂载,写入/etc/fstab配置文件
[root@localhost ~]#vim /etc/fstab
172.16.12.10: /share   /mnt   nfs   defaults  _netdev  0   0
#IP地址:/共享文件名   #挂载点   #文件类型   #权限   #无网不加载  #不备份 #不检查
#两种挂载方式选其中一种即可
[root@localhost share]#systemctl start rpcbind
[root@localhost share]#systemctl start nfs

​*******************************************************************
#测试
#客户端操作
[root@localhost ~]#cd /mnt
[root@localhost mnt]#cat test    #读取共享文件

①服务端操作 

②客户端操作:

2、客户端权限问题

2.1 权限参数说明

权限参数说明
ro只读模式(默认)
rw读写模式
root_squash当NFS 客户端使用 root 用户访问时,映射为 NFS 服务端的匿名用户
no_root_squash当NFS客户端使用 root 用户访问时,映射为NFS 服务端的 root 用户
all_squash不论 NFS 客户端使用任何帐户,均映射为 NFS 服务端的匿名用户
sync同时将数据写入到内存与硬盘中,保证不丢失数据
async优先将数据保存到内存,然后再写入硬盘,效率更高,但可能造成数据丢失
subtree_check若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认)
no_subtree_check即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
anonuid和anongid指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用

2.2 配置客户端的读写权限

客户端默认权限为只读模式,也就是说不配置客户端的读写权限,客户端就无法创建、修改文件

 ①需要配置dns软件的读取权限

 ②文件系统需要读取权限

③现在客户端可以创建、修改文件

2.3 创建文件的属主和属组权限

①默认情况下:

以客户端的管理员用户创建文件时,该文件的属主和属组都是nfsnobody

注:

这是因为配置文件里默认root_squash权限,客户端的管理员用户被压榨权限成为nfsnobody

以客户端的其他用户创建文件时,该文件的属主和属组都是该用户自己

②修改客户端管理员用户创建文件的权限,使之创建的文件属主和属组都是root

服务端修改配置文件

此时客户端创建文件的属主和属组都是root

2.4 客户端创建文件都指向同一属主和属组

如何将客户端新建文件都指定同一用户,需要设置anonuid 和 anongid

指明客户端用户映射为特定用户UID和组GID,而非其他用户,可配合all_squash使用

①服务端操作:首先创建一个新用户并指定uid号

②服务端操作:修改配置文件

③ 验证,查看权限是否设置成功

四、访问不同服务器提供相同的服务

环境:nfs存储服务器:172.16.12.10,服务器1:172.16.12.12,服务器2:172.16.12.13

 前提:关闭所有设备防火墙和临时防护

systemctl   stop  firewalld      #关闭防火墙
setenforce  0                    #关闭临时防护

现在服务器1和服务器2启用httpd服务,对客户端提供的是不同的信息服务 

#服务器1操作:
[root@localhost ~]# yum install -y httpd
#创建网页文件并写入内容存放在网站文件的默认目录,供客户端访问读取内容
[root@localhost ~]# cd /var/www/html
[root@localhost html]# vim index.html
服务器1:172.16.12.12
[root@localhost ~]#systemctl start httpd

#服务器2操作:
[root@localhost ~]# yum install -y httpd
#创建网页文件并写入内容存放在网站文件的默认目录,供客户端访问读取内容
[root@localhost ~]# cd /var/www/html
[root@localhost html]# vim index.html     
服务器2:172.16.12.13
[root@localhost ~]#systemctl start httpd

#浏览器网址访问:
http://172.16.12.10/
http://172.16.12.12/
http://172.16.12.13/

 以服务器1为例具体操作,服务器2的操作同上即可

①安装完httpd软件后,在/var/www/html/index.html写入文档的访问内容,再重启httpd服务即可

②配置完服务器1和服务器2文件后,重启服务httpd服务,也可访问服务器1和服务器2,获取信息

 以上访问不同的服务器获取的是不同的信息,现在不同的服务器想提供相同的内容服务该怎么操作呢?接下来就需要启用nfs存储服务端

#所有服务器都需要安装软件包
[root@localhost ~]# yum install nfs-utils.x86_64 rpcbind -y
[root@localhost ~]#systemctl start rpcbind
[root@localhost ~]#systemctl start nfs

#nfs存储服务端操作:
#创建共享目录和文件,再写入一些内容给供客户端读取
[root@localhost ~]#mkdir /data
[root@localhost ~]#cd /data
[root@localhost data]#vim index.html
welcome to future
#编辑nfs的配置文件
[root@localhost data]#vim /etc/exports
/data  172.16.12.0/24(rw)
[root@localhost ~]#chmod   777  /data
[root@localhost data]#exportfs -r
[root@localhost data]#exportfs -v
 
#服务器1操作:
#挂载nfs存储服务器的共享目录到本机的存放网站文件的默认目录
[root@localhost html]#mount 172.16.12.10:/data /var/www/html/


#服务器2操作:
#挂载nfs存储服务器的共享目录到本机的存放网站文件的默认目录
[root@localhost html]#mount 172.16.12.10:/data /var/www/html/

 ① nfs存储服务端操作

②服务器1操作:

③服务器2操作:

④客户端浏览器验证,这时候访问多个服务端都是获取相同的内容

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值