一、什么是 NFS
NFS(Network File System,网络文件系统)是一种基于网络的文件共享协议,由 Sun 公司开发,主要应用于 Linux/Unix 系统之间共享目录。
使用 NFS 后,客户端可以像访问本地目录一样访问服务器上的共享目录,实现多台服务器共享同一份数据。
常见应用场景:
Kubernetes(K8s)共享存储(PV/PVC)
Web 集群共享静态资源
日志集中存储
备份服务器
自动化运维共享脚本
二、NFS 工作原理
整个访问过程如下:
写入文件
+-------------+
| NFS Client |
+-------------+
│
│ RPC请求
▼
+----------------+
| rpcbind(111) |
+----------------+
│
▼
+----------------+
| nfs-server |
+----------------+
│
▼
/nfs_file整个流程:
客户端首先联系 rpcbind
rpcbind 告诉客户端 NFS 服务端口
客户端连接 nfs-server
将远程目录挂载到本地
后续读写都直接操作服务器目录
三、实验环境
四、服务端安装配置
1)安装 NFS
yum install -y nfs-utilsCentOS7 中安装 nfs-utils 即可。
2)创建共享目录
mkdir /nfs_file设置权限(实验环境可使用 777,生产环境建议按需授权)
chmod 777 /nfs_file查看目录
ls -ld /nfs_file例如:
drwxrwxrwx root root /nfs_file3)配置共享目录
编辑
vim /etc/exports添加
/nfs_file 172.21.30.*(rw,sync,no_root_squash)也可以使用
echo "/nfs_file 172.21.30.*(rw,sync,no_root_squash)" >> /etc/exports参数说明:
4)启动服务
启动 rpcbind
systemctl start rpcbind启动 NFS
systemctl start nfs设置开机启动
systemctl enable rpcbind
systemctl enable nfs5)发布共享目录
exportfs -rv输出:
exporting 172.21.30.*:/nfs_file参数说明:
-r
重新导出
-v
显示详细信息6)查看共享目录
showmount -e输出:
Export list for localhost:
/nfs_file 172.21.30.*说明共享目录发布成功。
五、客户端配置
1)安装 NFS
yum install -y nfs-utils2)启动服务
systemctl start rpcbind
systemctl start nfs3)查看服务端共享
showmount -e 172.21.30.143结果:
Export list for 172.21.30.143:
/nfs_file 172.21.30.*说明客户端已经能够访问服务端。
4)创建挂载点
mkdir /nfs_file这里的目录只是挂载点(Mount Point)。
5)挂载共享目录
mount 172.21.30.143:/nfs_file /nfs_file6)确认挂载
df -h | grep 172.21.30.143例如:
172.21.30.143:/nfs_file 36G 2.1G 34G 6% /nfs_file也可以查看
mount | grep nfs六、测试共享
客户端创建文件
echo "这是一个测试" > test01.txt查看
lstest01.txt随后在服务端查看
ls /nfs_file同样能够看到
test01.txt说明共享成功。
七、本次实验遇到的问题
实验过程中出现了一个比较容易踩坑的问题。
现象
第一次测试时:
客户端能够看到
test01.txt但是服务端却没有该文件。
退出目录重新进入后:
test01.txt又消失了。
重新创建文件后,服务端终于能够看到。
当时的操作
客户端执行:
mkdir /nfs_file
cd /nfs_file
mount 172.21.30.143:/nfs_file /nfs_file随后立即:
echo "这是一个测试" > test01.txt八、原因分析
这是 Linux 挂载点的经典问题。
在执行:
cd /nfs_file之后,Shell 当前工作目录(Current Working Directory,CWD)已经位于本地文件系统中的 /nfs_file。
此时再执行:
mount 172.21.30.143:/nfs_file /nfs_file虽然挂载成功,但 Shell 当前目录仍然引用挂载前的本地目录。
因此:
echo "这是一个测试" > test01.txt实际上写入的是客户端本地目录,而不是 NFS 服务器上的共享目录。
可以理解为:
挂载前
客户端
/nfs_file
↑
当前目录执行挂载:
mount ...
/nfs_file
│
├── 已变成NFS目录
│
└── 但是Shell仍然停留在旧目录因此:
test01.txt写进了客户端本地硬盘。
九、如何验证
可以退出目录重新进入:
cd /
cd /nfs_file或者
pwd重新进入挂载目录后,再创建文件:
echo "这是一个测试" > test01.txt此时:
客户端:
/nfs_file/test01.txt服务端:
/nfs_file/test01.txt两边都能够看到该文件,说明已经真正写入了 NFS 共享目录。
十、正确的操作顺序
推荐始终按照下面的流程进行:
mkdir /nfs_file
mount 172.21.30.143:/nfs_file /nfs_file
cd /nfs_file
touch test.txt不要在 进入目录之后再进行挂载。
十一、实验总结
本实验完成了 NFS 文件共享服务的搭建,并验证了客户端与服务端之间的文件共享功能。
实验过程中还遇到了一个典型问题:在挂载点目录内执行 mount 后,Shell 当前工作目录仍可能停留在挂载前的本地文件系统,导致新建文件实际上写入客户端本地,而不是 NFS 共享目录。 通过退出并重新进入挂载目录后再进行文件操作,即可正确访问共享目录。
通过本次实验,掌握了以下内容:
NFS 的工作原理及适用场景
服务端共享目录的配置方法(
/etc/exports)rpcbind与nfs-server服务的作用客户端挂载 NFS 共享目录的方法
使用
showmount、exportfs、mount、df等命令进行验证挂载点与当前工作目录(CWD)的关系及常见问题排查方法
这些内容也是日常 Linux 运维和 Kubernetes 共享存储配置中最常用的基础知识。