NFS使用
环境: CentOS 7.6
全称: Network File System(网络文件系统)
3. NFS 共享的实现
3.1 需求
在虚拟机 server0 上配置 NFS 服务:
| 共享目录 | 权限 | 访问范围 |
|---|---|---|
/public |
只读(ro) | 仅 example.com 域内系统可访问 |
/protected |
可读写(rw) | example.com 域内系统可访问 |
在虚拟机 desktop0 上访问 NFS 共享:
| 项 | 要求 |
|---|---|
| 挂载 | 将 server0 的 /public 挂到本地 /mnt/nfsmount |
| 开机挂载 | 系统启动时自动挂载 |
说明: 实验网段通常为
172.25.0.0/24,对应example.com域主机。
/etc/exports中常用该网段表示“域内可访问”;也可写成*.example.com(需 DNS/主机名可解析)。
3.2 方法
普通 NFS 共享要点:
- 服务端需运行
nfs-server.service - 客户端一般不必单独常驻特定业务服务(使用
mount/fstab即可;涉及开机挂载网络盘时注意_netdev)
/etc/exports 记录格式:
共享目录绝对路径 客户地址1(ro|rw,...) 客户地址2(ro|rw,...) ...
常用参数:
| 参数 | 含义 |
|---|---|
ro |
只读 |
rw |
读写 |
sync |
请求写入完成后再返回(更稳妥,默认策略因版本而异) |
no_root_squash |
客户端 root 不映射为 nfsnobody(安全性低,一般不滥用) |
3.3 步骤
步骤一:在 server0 上发布 NFS 共享
1)准备共享目录
[root@server0 ~]# mkdir /public
[root@server0 ~]# mkdir /protected
补充: 若需客户端可写
/protected,除 exports 中rw外,目录本身权限也要允许写入,例如:
chmod 777 /protected或按业务设置属主/属组(考试环境常放宽权限)。
2)编写 NFS 共享配置
[root@server0 ~]# vim /etc/exports
内容示例(网段方式,与常见实验环境一致):
/public 172.25.0.0/24(ro)
/protected 172.25.0.0/24(rw)
若按域名通配(需名字解析正常):
/public *.example.com(ro)
/protected *.example.com(rw)
修改后可立即生效(无需重启服务时):
[root@server0 ~]# exportfs -r
# 或 exportfs -a
3)启动 nfs-server 并设置开机自启
[root@server0 ~]# systemctl restart nfs-server
[root@server0 ~]# systemctl enable nfs-server
# enable 成功后会创建类似如下的符号链接(路径以系统提示为准)
# ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.target.wants/nfs-server.service'
可选补充(防火墙): 若启用 firewalld,可放行 NFS 相关服务,例如:
firewall-cmd --permanent --add-service=nfs --add-service=mountd --add-service=rpc-bind && firewall-cmd --reload
可选补充(SELinux): 若共享非默认策略目录且被拒绝,可结合
ausearch/setsebool排查;简单实验环境有时会临时setenforce 0(生产不推荐)。
步骤二:在 desktop0 上挂载 /public
1)创建挂载点
[root@desktop0 ~]# mkdir /mnt/nfsmount
2)查看 server0 导出的共享
[root@desktop0 ~]# showmount -e server0.example.com
Export list for server0.example.com:
/protected 172.25.0.0/24
/public 172.25.0.0/24
也可使用 IP:
showmount -e 172.25.0.11(以 server0 实际地址为准)。
3)配置开机自动挂载
[root@desktop0 ~]# vim /etc/fstab
追加(注意是 _netdev,不是转义后的 \_netdev):
server0.example.com:/public /mnt/nfsmount nfs _netdev 0 0
| 字段 | 说明 |
|---|---|
server0.example.com:/public |
远端共享 |
/mnt/nfsmount |
本地挂载点 |
nfs |
文件系统类型(也可写 nfs4) |
_netdev |
等待网络就绪后再挂载,避免开机失败 |
0 0 |
不做 dump;不做 fsck(网络文件系统常见写法) |
4)测试挂载
[root@desktop0 ~]# mount -a
[root@desktop0 ~]# df -hT /mnt/nfsmount/
Filesystem Type Size Used Avail Use% Mounted on
server0.example.com:/public nfs4 10G 3.2G 6.8G 32% /mnt/nfsmount
临时挂载(不写 fstab)可用:
mount -t nfs server0.example.com:/public /mnt/nfsmount
配置对照
| 角色 | 主机 | 操作要点 |
|---|---|---|
| 服务端 | server0 | /etc/exports 导出 /public(ro)、/protected(rw);systemctl enable --now nfs-server |
| 客户端 | desktop0 | showmount -e 确认;fstab 挂载 :/public → /mnt/nfsmount,选项含 _netdev |
本题客户端要求只挂载
/public;/protected在服务端已发布,需要时可另行挂载测试读写。
常见问题
showmount无输出或失败: 检查服务端nfs-server状态、/etc/exports语法、防火墙、以及客户端到 server0 的网络/DNS。mount -a卡住或失败: 确认_netdev、主机名可解析、服务端导出与权限;可先用 IP 挂载排查 DNS。- 可读不可写
/protected: 检查 exports 是否为rw,以及目录本地权限/SELinux。 - 修改 exports 不生效: 执行
exportfs -r或重启nfs-server。