一、为什么要单独研究 /etc/exports¶
原始笔记明确指出,NFS 服务端最核心的配置文件就是:
/etc/exports
并且还补充了一点非常重要的背景:
systemctl对 NFS 的管理背后,本质上会调用exportfs
这意味着如果你真的想理解 NFS 的共享逻辑,/etc/exports 是必须掌握的入口。
二、/etc/exports 的基本格式是什么¶
原始笔记把配置格式拆成了两部分:
- 第 1 部分:共享目录
- 第 2 部分:网段(以及选项)
一个典型示例就是:
/data/ 192.168.1.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)
它可以拆成:
- 共享目录:
/data/ - 允许访问的网段:
192.168.1.0/24 - 共享选项:括号中的一组参数
三、NFS 中的网络配置怎么写¶
原始笔记列出了几种常见写法:
172.16.1.0/24:最常用,按网段授权172.16.1.7:按单个 IP 授权baidu.com:按域名授权
在实验环境和企业内网里,最常见也最好管理的通常还是:
- 按固定网段授权
这样更适合统一管理多个客户端节点。
四、服务端核心配置选项怎么理解¶
原始笔记重点强调了下面这些选项。
4.1 rw 和 ro¶
rw:允许读写ro:只读
它们决定了客户端挂载后是否能修改共享目录内容。
4.2 sync 和 async¶
这是 NFS 里非常重要的一组选项。
4.2.1 sync¶
表示同步写入:只要用户上传数据,就立即把数据写到磁盘。
优点:
- 数据更稳妥
缺点:
- 性能通常不如异步
4.2.2 async¶
表示异步写入:NFS 可以先把数据临时放在内存里,过一段时间再写入磁盘。
优点:
- 并发性能更高
缺点:
- 极端情况下存在数据丢失风险
4.3 怎么理解“同步”和“异步”¶
原始笔记用了一个很形象的比喻:
- 同步:逐个确认,再处理
- 异步:先集中起来,之后统一处理
放到网站架构里,也可以延伸理解为:
- 同步更强调立即完成
- 异步更强调先响应、后处理
五、什么是 NFS 的用户压缩¶
原始笔记把它称为“用户压缩”或“用户映射”。本质上就是:
- NFS 客户端访问服务端共享目录时,服务端会把客户端用户映射成什么身份
一个典型现象是:
- 客户端挂载后创建的文件,默认可能属于
nfsnobody
这就是用户压缩在起作用。
5.1 用户压缩相关核心选项¶
原始笔记列出了下面几项:
root_squashno_all_squashall_squashanonuidanongid
5.1.1 root_squash¶
如果客户端是 root 用户访问,到了服务端会被压缩成匿名用户。
这是默认行为,也是更安全的做法。
5.1.2 no_all_squash¶
如果客户端不是 root 用户访问,就不进行统一压缩,保留原始用户身份。
5.1.3 all_squash¶
所有用户都统一压缩成匿名用户。
这在某些场景下方便统一权限,但如果配置不当,也可能带来安全问题。
5.1.4 anonuid 和 anongid¶
用于指定匿名用户映射成谁,例如:
anonuid=1999anongid=1999
这样就可以把匿名访问统一映射为某个指定业务用户。
六、用户压缩案例怎么落地¶
原始笔记给出了一个很典型的案例:
- 服务端共享目录:
/nfsdata - 客户端挂载目录:
/upload-video - 匿名用户映射为
www www的 UID/GID 统一为1999
6.1 服务端和客户端统一用户¶
在所有相关主机上先创建统一的 www 用户:
groupadd -g 1999 www
useradd -u 1999 -g www -s /sbin/nologin -M www
6.2 服务端配置共享目录¶
原始笔记中的配置示例如下:
/data/ 172.16.1.0/24(rw)
/nfsdata/ 172.16.1.0/24(rw,all_squash,anonuid=1999,anongid=1999)
这表示:
/nfsdata/对指定网段开放- 所有用户统一压缩
- 匿名用户身份映射为
www
6.3 客户端挂载测试¶
mount -t nfs 172.16.1.31:/nfsdata /upload-video/
然后通过:
touch /upload-video/lidao.txt
ll /upload-video/
就可以验证最终文件身份是否符合预期。
七、NFS 优化时该先考虑什么¶
原始笔记给出了一个很有方向感的目标:
- 尽可能让用户请求在访问网站架构之前就被处理掉,也就是尽量把请求往前推
这其实是在提醒:
- 真正的架构优化,不一定全靠 NFS 本身
- 很多优化应该在接入层、缓存层甚至对象存储层完成
7.1 硬件层面¶
NFS 的性能优化首先离不开硬件:
- 更好的服务器
- 更好的磁盘
- 更稳定的网络
7.2 客户端安全挂载¶
原始笔记还给出了一组非常实用的安全挂载参数:
mount -o noexec,nosuid,nodev -t nfs 172.16.1.31:/data /video/
这些参数的含义分别是:
noexec:不允许在挂载目录执行二进制程序nosuid:禁止setuidnodev:不允许创建设备文件
这类参数非常适合上传目录、媒体目录等“只希望写入和读取,不希望执行”的场景。
八、NFS 的局限性是什么¶
原始笔记最后也点出了 NFS 的典型问题:
- 存在单点故障
这意味着一旦 NFS 服务端本身故障,客户端共享目录就会受到影响。
因此在更高要求的生产环境中,常见替代方向包括:
- 分布式存储
- 公有云对象存储,如阿里云
OSS
对象存储通常不是靠 Linux 挂载来使用,而是更多通过应用代码直接调用接口。
九、小结¶
NFS 学到这一步,最值得真正掌握的不是“命令能敲出来”,而是下面这些关键理解:
/etc/exports是服务端配置核心- 网段授权方式要会写
rw、ro、sync、async等核心选项要会解释- 用户压缩和匿名映射要能看懂
- 客户端安全挂载参数要会用
- 要清楚 NFS 有单点问题,不能无限放大它的适用范围
当这些点都真正理解之后,你对 NFS 的掌握就不再只是“会挂载”,而是已经进入“能配置、能解释、能优化”的阶段了。