NFS与Autofs快速讲解-从原理到实战配置

NFS的功能特点

网络文件系统(NFS)是一种分布式文件系统协议,允许客户端计算机通过网络访问远程文件系统,如同访问本地文件。其主要功能特点包括:

跨平台共享:支持不同操作系统(如Linux、Unix、Windows)之间共享文件,实现异构环境下的数据互通。

透明访问:用户和应用程序无需修改即可访问远程文件,操作方式与本地文件一致。

高性能:通过缓存机制减少网络传输,提升读写效率。

可扩展性:支持多客户端同时访问同一文件系统,适合大规模集群环境。

权限管理:基于标准的Unix文件权限或Kerberos认证,保障数据安全。

RPC在NFS中的作用

远程过程调用(RPC)是NFS实现的核心机制,其作用包括:

协议封装:NFS将文件操作(如读写、删除)封装为RPC请求,由客户端发送到服务端执行。

状态无关性:NFS设计为无状态协议,RPC的每次调用独立,服务端不保存客户端状态,故障恢复更简单。

端口动态分配:RPC通过端口映射器(portmapper)动态分配端口号,解决NFS服务端端口不固定的问题。

NFS访问原理

挂载阶段

客户端通过mount命令发起挂载请求,RPC将请求转发至服务端的mountd守护进程。服务端验证客户端权限后,返回文件系统句柄,客户端将其与本地目录关联。

文件操作阶段

客户端应用发起文件操作,内核的NFS客户端模块将其转换为RPC调用,发送至服务端的nfsd守护进程。服务端执行操作并返回结果。

缓存机制

客户端缓存常用文件属性和文件数据,通过定期检查服务端的时间戳确保缓存一致性。

协议版本差异

NFSv3:使用异步写入,提升性能但可能丢失数据;依赖UDP/TCP传输。

NFSv4:引入复合操作、强一致性和集成安全(Kerberos支持)。

Autofs 核心功能

按需挂载:仅在访问挂载目录时自动挂载文件系统,超时后自动卸载。

动态管理:支持热更新配置,无需重启服务。

多协议支持:支持 NFS、SMB/CIFS、FTP 等网络文件系统协议。

1.在172.25.254.10主机中(服务器端)

a.关闭火墙

b. 安装nfs服务

复制代码
[root@node1 ~]# dnf install nfs-utils.x86_64 -y

c.启动服务

bash 复制代码
[root@node1 ~]# systemctl enable --now nfs-server
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.

d. 共享目录

bash 复制代码
[root@node1 ~]# mkdir  /mm	
[root@node1 ~]# chmod  777 /mm
[root@node1 ~]# vim /etc/exports
/mm    *(rw,sync,no_root_squash)

[root@node1 ~]# exportfs -rv
exporting *:/mm

rw :read-write,读写权限;只读写 ro

sync :同步写入:客户端写文件,数据立刻同步到服务器磁盘;

对比 async 异步,先放缓存再落盘,速度快但断电丢数据,生产推荐 sync

no_root_squash :客户端 root 保持 root 权限,可修改文件。

默认 root_squash :客户端 root 用户访问共享时,会映射成服务器匿名用户 nfsnobody,无写入权限;

all_squash:所有客户端用户全部映射为匿名用户

anonuid:指定匿名用户 UID/GID

2.在172.25.254.20(客户端)

bash 复制代码
[root@node2 ~]# dnf install nfs-utils -y
[root@node2 ~]# showmount -e 172.25.254.10
Export list for 172.25.254.10:
/mm *

[root@node2 ~]# mount 172.25.254.10:/mm   /mnt/

[root@node2 ~]# df -h
文件系统             容量  已用  可用 已用% 挂载点
devtmpfs             4.0M     0  4.0M    0% /dev
tmpfs                870M     0  870M    0% /dev/shm
tmpfs                348M  5.2M  343M    2% /run
/dev/nvme0n1p3        96G  3.0G   93G    4% /
/dev/nvme0n1p1       960M  319M  642M   34% /boot
/dev/sr0              12G   12G     0  10% /rhel9
tmpfs                174M     0  174M    0% /run/user/0
172.25.254.10:/mm   96G  3.0G   93G    4% /mnt

showmount -e 172.25.254.10

-e:export,查看目标服务器开放的 NFS 共享列表 报错排查:防火墙、nfs-server 未启动、exports 配置错误

BASH 复制代码
[root@node2 ~]# umount /mnt

[root@node2 ~]# dnf install autofs-1:5.1.7-60.el9.x86_64  -y

[root@node2 ~]# vim /etc/autofs.conf
timeout = 3

[root@node2 ~]# vim /etc/auto.master
/nfs    /etc/auto.mm

[root@node2 ~]# vim /etc/auto.mm
mm     -ro     172.25.254.10:/mm
# ro 只读

[root@node2 ~]# systemctl restart autofs.service
[root@node2 ~]# systemctl enable  autofs.service
Created symlink /etc/systemd/system/multi-user.target.wants/autofs.service → /usr/lib/systemd/system/autofs.service.


#测试:
[root@node2 ~]# cd /nfs/mm

[root@node2 mm]# df
文件系统               1K-块     已用     可用 已用% 挂载点
devtmpfs                4096        0     4096    0% /dev
tmpfs                 890352        0   890352    0% /dev/shm
tmpfs                 356144     5296   350848    2% /run
/dev/nvme0n1p3      99638272  3109900 96528372    4% /
/dev/nvme0n1p1        983040   326192   656848   34% /boot
/dev/sr0            12462174 12462174        0  10% /rhel9
tmpfs                 178068        0   178068    0% /run/user/0
172.25.254.10:/mm 99638272  3108096 96530176    4% /nfs/mm

[root@node2 mm]# cd
#退出后等待4秒

[root@node2 ~]# df
文件系统          1K-块     已用     可用 已用% 挂载点
devtmpfs           4096        0     4096    0% /dev
tmpfs            890352        0   890352    0% /dev/shm
tmpfs            356144     5292   350852    2% /run
/dev/nvme0n1p3 99638272  3109900 96528372    4% /
/dev/nvme0n1p1   983040   326192   656848   34% /boot
/dev/sr0       12462174 12462174        0  10% /rhel9
tmpfs            178068        0   178068    0% /run/user/0
相关推荐
皮卡狮1 小时前
文件系统:磁盘硬件寻址和系统软件寻址
linux
是潮汕的灿灿展吖2 小时前
Centos离线部署nfs操作
linux·运维·centos
Kina_C2 小时前
Apache HTTP Server 安装、配置与高级功能详解
linux·http·apache
治愈系贝壳2 小时前
ARM --- day 6 时钟
linux·arm开发·学习
Molesidy2 小时前
【GUI】【AWTK】基于开阳平台的GUI界面设计环境搭建
linux·gui·awtk
RisunJan3 小时前
Linux命令-semanage(SELinux 策略管理)
linux·运维·服务器
流浪0013 小时前
Linux系统篇 21:文件(五)——动静态库、ELF 底层原理全解
linux·运维·服务器
Dawn-bit3 小时前
Linux救援模式和系统恢复
linux·运维·服务器·云计算·运维开发
十八岁牛爷爷3 小时前
Linux 进程与进程状态・三层级深度解析
linux·运维·服务器