NFS(Network File System)网络文件系统

NFS概念

  • NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。文件系统就是磁盘在内核上的一个映射。
  • 网络文件系统 (NFS) 是 Unix 系统和网络附加存储文件管理器常用的网络文件系统,允许多个客户端通过网络共享文件访问。它可用于提供对共享二进制目录的访问,也可用于允许用户在同一工作组中从不同客户端访问其文件。
  • NFS 协议有多个版本 :Linux 支持版本 4 、版本 3 和版本 2, 而大多数系统管理员熟悉的是 NFSv3 。默认情况下 , 该协议并不安全 , 但是更新的版本 ( 如 NFSv4) 提供了对更安全的身份验证的支持 , 甚至可以通过 kerberos 进行加密。
  • 用途:网络上与他人共享目录和文件。
  • 优点:1.节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用;2.用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。3.一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。

实验准备

  • 在两台虚拟机中分别配置网络,搭建yum源,修改主机名,并做好本地解析:
  • 客户端主机:
    在这里插入图片描述
  • 服务端主机:
    在这里插入图片描述

搭建NFS

  • 在服务端主机中,下载nfs的安装包,并修改配置文件:
yum search nfs
yum install nfs-utils.x86_64 -y

vim /etc/exports
/mnt                172.25.254.0/24(ro,async)
共享的目录   共享给谁(共享的方式:只读或读写;实时同步或不实时同步)
exportfs -rv    ##刷新,让他生效

我们可以man 5 exports查询具体的说明和帮助。
sync:实时同步,将内存数据和硬盘数据同步,数据会同步写入到内存与硬盘中操作起来慢,但是效果好;
async :不实时同步,数据会先暂存于内存当中,而非直接写入硬盘,效果不好,但速度快。

在这里插入图片描述

  • 在客户端主机,同样的先安装nfs
yum install nfs-utils -y
showmount -e 172.25.254.124

在这里插入图片描述

  • 在服务端:
systemctl stop firewalld.service 
  • 在客户端:
showmount -e 172.25.254.124

在这里插入图片描述

  • 在服务端:
[root@server ~]# systemctl start nfs-server
[root@server ~]# exportfs -rv
  • 在客户端:
showmount -e 172.25.254.124
mount 172.25.254.124:/mnt /mnt

在这里插入图片描述
注意:1.nfs服务不能重启,否则客户端的挂载会出问题。服务器会有空档期,端口会关。客户端的访问会被影响。可以刷新exportfs -rv
2.在Vim编辑器里,写是在内存, :wq退出保存才是到硬盘里。

挂载参数说明

rw挂载可读写的文件系统
ro挂载只读文件系统
vers=4尝试只使用指定的 NFS 版本进行挂载。如果服务器不支持该版本 , 则挂载请求失败
soft如果 NFS 请求超时 , 三次尝试后返回错误。权衡数据完整性与提高客户端响应性。 ( 默认行为 hard, 将无限期地重试 )
  • rw:读写,设置之后客户端也无法新建文件的原因是服务端文件系统会限制,即目录的权限限制。

在服务端:

vim /etc/exports      修改为:
/mnt   172.25.254.0/24(rw,async)    读写挂载

exportfs -vr

在客户端:

showmount -e 172.25.254.124
cd /mnt/
touch file

在这里插入图片描述
在服务器端:

chmod 777 /mnt/
ls -ld /mnt/

此时客户端可以在此目录下新建文件,在服务端查看,此时新建文件的用户身份是nfsnobody。
在这里插入图片描述

  • anonuid=1001,anongid=1001
    指定客户端的用户身份为服务端已经存在的用户身份
    就是客户端建立文件的身份是服务端指定的服务端自己存在的用户,客户端不存在这个用户。
    在服务端,新建用户,并修改配置文件,刷新:
[root@server ~]# useradd westos
[root@server ~]# id westos
uid=1001(westos) gid=1001(westos) groups=1001(westos)

vim /etc/exports
/mnt   172.25.254.0/24(rw,async,anonuid=1001,anongid=1001)
使得在客户端建立的文件属于服务端的指定的用户westos

exportfs -rv

在客户端:

showmount -e 172.25.254.124
mount 172.25.254.124:/mnt /mnt
df
cd /mnt
touch file1

在这里插入图片描述
在这里插入图片描述

  • no_root_squash
    当客户端使用哪个用户身份挂载时,沿用客户端的用户身份到服务器端
    即谁管理就用谁的身份,有了这个前面的2不生效,沿用客户端的用户身份
    在服务端:
vim /etc/exports
/mnt   172.25.254.0/24(rw,async,anonuid=1001,anongid=1001,no_root_squash)
让文件属于客户端谁建立就属于谁
exportfs -rv

在客户端测试:
在这里插入图片描述
在服务端查看:
在这里插入图片描述

  • all_squash
    所有的用户身份都做转换,优先级最高。
    不管客户端以哪个身份建立文件,文件的所有人所有组均为服务器指定转换为服务器自己存在的用户身份。
    前面没有指定anonuid=1001,anongid=1001都会被映射成服务端匿名用户nfsnobody,如果指定了,就是指定的用户身份。

在服务端:

vim /etc/exports
/mnt   172.25.254.0/24(rw,async,anonuid=1001,anongid=1001,no_root_squash,all_squash)
使得客户端建立的文件均属于服务端的用户

exportfs -rv

在客户端新建文件:
在这里插入图片描述
在服务端查看:
在这里插入图片描述

注意:数据不同步,有可能是因为做了多次挂载。

autofs

在企业里的用途?

集群:具有相同功能的主机集合。
企业中,如果把所有用户的注册信息的时候都放在一台主机里面,那么当这台主机挂了,所有用户就都登陆不了了,当把多个用户分别放到多台主机的时候,每个用户的信息都在自己的服务器里面放着,当其中一个服务器挂了,那么这台主机的用户不能正常登陆。
所以实际在企业当中采用系统和存储分离的模式。
主机和存储设备相连,当客户端挂载了却没有使用的时候,会占用存储资源,而且客户端每次访问完后要手动卸载太麻烦了,所以我们引用自动挂载服务autofs,即在客户端可以自动挂载卸载的服务。

  • 在客户端下载自动挂载卸载的服务autofs:
yum install autofs.x86_64 -y
  • 当我们没有开启服务时,/net目录是不存在的。
    在这里插入图片描述
  • 服务开启之后,可以进入服务端的共享目录下,且进入之后就会自动挂载:
    在这里插入图片描述在这里插入图片描述
  • 在配置文件中可以修改自动卸载的时间,即退出当前目录后多久设备自动卸载。默认300s自动卸载。
rpm -qc autofs       ##查看安装配置文件
/etc/auto.master     ##主策略文件
/etc/sysconfig/autofs        ##7.0系统的配置文件
/etc/autofs.conf        ##7.3系统的配置文件

在这里插入图片描述在这里插入图片描述

  • 我们修改自动卸载时间为8s,并重启服务systemctl restart autofs.service查看:
    在这里插入图片描述
    在这里插入图片描述

挂载到指定目录

改变挂载策略,将服务端的共享目录挂载到客户端指定的目录上。
客户端/mnt/zhang是不存在的

vim /etc/auto.master    ##主策略文件中写入:
/mnt              /etc/auto.nfs
最终挂载点的上层目录    子策略文件

vim /etc/auto.nfs        ##新建子策略文件,其中写入:
zhang      -ro,vers=3    172.25.254.124:/mnt
最终挂载点  只读挂载,nfs版本为3    最终挂载点挂载的设备,为服务端的共享的/mnt目录 

systemctl restart autofs.service
df
mount

在这里插入图片描述
在这里插入图片描述

客户端挂载的目录和服务端的共享目录匹配

目的是:只要你进入的目录的名字,跟共享目录的名字一致,就可以直接把共享目录挂载到你进的目录上。
前提是共享目录必须存在

  • 首先在服务器端新建匹配的目录:mkdir /mnt/zhang{1..5}
  • 在客户端,修改子策略文件为如下:
vim /etc/auto.nfs      
*      -ro,vers=3    172.25.254.124:/mnt/&
不确定客户端进的是哪个所以用*表示,&与*对应
systemctl restart autofs.service 

在这里插入图片描述

  • 但是当共享目录不存在时,我们需要先在服务端建立出共享目录,客户端才能实现挂载。
cd /mnt/westos   ##客户端
mkdir /mnt/westos   ##服务端
systemctl restart autofs.service  ##客户端

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值