NFS网络文件系统

# 基本概述
NFS 是 Network File System 的缩写及⽹络⽂件系统。
主要功能是通过局域⽹络让不同的主机系统之间可以共享⽂件或⽬录。

NFS 系统和 Windows ⽹络共享、⽹络驱动器类似, 只不过 windows ⽤于局域⽹, NFS⽤于企业集群架构中, 如
果是⼤型⽹站, 会⽤到更复杂的分布式⽂件系统 FastDFS,glusterfs,HDFS,Ceph,miniio

为什么要使⽤ NFS 服务进⾏数据存储
1.实现多台服务器之间数据共享
2.实现多台服务器之间数据的⼀致

# 安装NFS
1、关闭防火墙
[root@i-m60lx3hh ~]#  systemctl disable firewalld
[root@i-m60lx3hh ~]#  systemctl stop firewalld
[root@i-m60lx3hh ~]#  sed -ri '#^SELINUX=#cSELINUX=Disabled' /etc/selinux/config
[root@i-m60lx3hh ~]#  setenforce 0

2、安装NFS
[root@i-m60lx3hh ~]# yum -y install nfs-utils rpcbind

3、NFS 服务程序的配置⽂件为 /etc/exports 默认⾥⾯没有任何内容。
我们可以按照 共享⽬录的路径 允许访问的NFS客户端(共享权限参数) 格式,定义要共享的⽬录与相应的权限。

NFS共享⽬录 NFS客户端地址1(参数1,参数2,...) 客户端地址2(参数1,参数2,...)
NFS共享⽬录 NFS客户端地址(参数1,参数2,...)
如果想要把 /data ⽬录共享给 10.1.106.0/24 ⽹段内的所有主机
1.主机都拥有读写权限
2.在将数据写⼊到NFS服务器的硬盘中后才会结束操作,最⼤限度保证数据不丢失
3.将所有⽤户映射为本地的匿名⽤户(nfsnobody)

//注意: NFS客户端地址与权限之间没有空格
#/data是共享⽬录的路径,10.1.106.0/24是允许访问该共享⽬录的 IP 地址范围。rw表示该共享⽬录可读可写,
sync表示同步写⼊,all_squash表示将所有⽤户映射为匿名⽤户。
[root@i-m60lx3hh ~]# vim /etc/exports 
/data 10.1.106.0/24(rw,sync,all_squash)

在NFS服务器上建⽴⽤于NFS⽂件共享的⽬录,并设置对应权限
[root@i-m60lx3hh ~]# mkdir /data
[root@i-m60lx3hh ~]# chown -R nfsnobody.nfsnobody /data
//NFS共享⽬录会记录⾄/var/lib/nfs/etab,如果该⽬录不存在共享信息,请检查/etc/exports是否配置错误

4、在使⽤ NFS 服务进⾏⽂件共享之前,需要使⽤ RPC(Remote Procedure Call 远程过程调⽤, 服务将 NFS 服务器
的 IP 地址和端⼝号信息发送给客户端。
因此,在启动 NFS 服务之前,需要先重启并启⽤ rpcbind 服务程序,同时都加⼊开机⾃启动

[root@i-m60lx3hh ~]# systemctl restart rpcbind
[root@i-m60lx3hh ~]# systemctl restart nfs-server
[root@i-m60lx3hh ~]# systemctl enable rpcbind
[root@i-m60lx3hh ~]# systemctl enable nfs-server

# NFS挂载
NFS客户端的配置步骤也⼗分简单。先使⽤ showmount 命令,查询 NFS 服务器的远程共享信息,其输出格式为“共享
的⽬录名称 允许使⽤客户端地址”。

1.安装客户端⼯具,仅启动 rpcbind 服务
[root@i-m60lx3hh ~]# yum -y install nfs-utils rpcbind
[root@i-m60lx3hh ~]# systemctl restart rpcbind
[root@i-m60lx3hh ~]# systemctl enable rpcbind

2.客户端使⽤ showmount -e 查看远程服务器 rpc 提供的可挂载 nfs 信息
[root@i-m60lx3hh ~]# showmount -e 10.1.106.66
Export list for 10.1.106.66:
/data 10.1.106.0/24

3.在 NFS 客户端创建⼀个挂载⽬录, 使⽤ mount 命令并结合 -t 参数, 指定要挂载的⽂件系统的类型, 并在命令后⾯写
上服务器的 IP 地址, 以及服务器上的共享⽬录, 最后需要写上要挂载到本地系统(客户端)的⽬录。
[root@i-m60lx3hh ~]# mkdir /nfsdir
[root@i-m60lx3hh ~]# mount -t nfs 10.1.106.66:/data /nfsdir
//查看挂载信息(mount也可以查看)
[root@nfs-client ~]# df –h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 62G 845M 58G 2% /
tmpfs 244M 0 244M 0% /dev/shm
/dev/sda1 190M 26M 155M 14% /boot
10.1.106.66:/data 62G 880M 58G 2% /nfsdir

4.挂载成功后可以进⾏增删改操作
//使⽤客户端往nfs存储写⼊
[root@nfs-client ~]# echo "nfs-client" >> /nfsdir/test.txt
//检查nfs服务端是否存在客户端创建的新⽂件
[root@nfs-client ~]# cat /data/test.txt
nfs-client

5.如果希望 NFS ⽂件共享服务能⼀直有效,则需要将其写⼊到 fstab ⽂件中
[root@nfs-client ~]# vim /etc/fstab
10.1.106.66:/data /nfsdir nfs defaults 0 0

6.如果不希望使⽤ NFS 共享, 可进⾏卸载
[root@nfs-client ~]# umount /nfsdir
注意:卸载的时候如果提示”umount.nfs: /nfsdir: device is busy” 
1.切换⾄其他⽬录, 然后在进⾏卸载。
2.NFS Server宕机, 强制卸载umount -lf /nfsdir

7.在企业⼯作场景,通常情况NFS服务器共享的只是普通静态数据(图⽚、附件、视频),不需要执⾏ suid、
exec 等权限,挂载的这个⽂件系统只能作为数据存取之⽤,⽆法执⾏程序,对于客户端来讲增加了安全性。例如:
很多⽊⻢篡改站点⽂件都是由上传⼊⼝上传的程序到存储⽬录。然后执⾏的。
通过mount -o指定挂载参数,禁⽌使⽤suid,exec,增加安全性能
[root@nfs-client ~]# mount -t nfs -o nosuid,noexec,nodev 10.1.106.66:/data /mnt

8.有时也需要考虑性能相关参数[可选]
通过mount -o指定挂载参数,禁⽌更新⽬录及⽂件时间戳挂载
[root@nfs-client ~]# mount -t nfs -o noatime,nodiratime 10.1.106.66:/data /mnt
posted @ 2025-03-10 18:47  basickill  阅读(102)  评论(0)    收藏  举报