搭建 NFS 网络存储与挂载
用 NFS 把一台服务器的目录共享给多台机器,像访问本地磁盘一样读写——附内网安全配置要点。
当多台服务器需要共用同一份文件(比如共享代码、上传目录、日志归档),把文件复制来复制去既低效又容易不一致。NFS(Network File System)让一台机器把某个目录"导出",其他机器直接挂载到本地路径,读写如同本地磁盘。下面以 Ubuntu/Debian 为例,走一遍服务端与客户端配置。
服务端:导出共享目录
先安装 NFS 服务并准备好要共享的目录。
sudo apt update
sudo apt install -y nfs-kernel-server
sudo mkdir -p /srv/share
sudo chown nobody:nogroup /srv/share
配置 /etc/exports
导出规则写在 /etc/exports,一行一条,格式是 目录 允许的网段(选项):
# 只允许 10.0.0.0/24 内网访问,可读写
/srv/share 10.0.0.0/24(rw,sync,no_subtree_check,root_squash)
常用选项说明:
- rw:允许读写(只读用 ro)
- sync:写入落盘后才返回,更安全(async 更快但有丢数据风险)
- rootsquash:把客户端的 root 映射成匿名用户,务必保留,防止客户端 root 直接改服务端文件
- nosubtreecheck:关闭子树检查,提升稳定性
改完让配置生效并放行防火墙:
sudo exportfs -ra # 重新加载 exports
sudo exportfs -v # 查看当前导出
sudo systemctl enable --now nfs-kernel-server
sudo ufw allow from 10.0.0.0/24 to any port nfs
客户端:挂载使用
客户端装上工具,把远端目录挂到本地。假设服务端内网 IP 是 10.0.0.10:
sudo apt install -y nfs-common
sudo mkdir -p /mnt/share
sudo mount -t nfs 10.0.0.10:/srv/share /mnt/share
df -h /mnt/share # 确认挂载成功
开机自动挂载(fstab)
手动 mount 重启后会丢失,写进 /etc/fstab 才能持久:
# /etc/fstab 追加一行
10.0.0.10:/srv/share /mnt/share nfs defaults,_netdev,nofail 0 0
其中 netdev 告诉系统等网络就绪再挂载,nofail 避免 NFS 不可用时卡住开机。
安全提醒
NFS 的默认协议没有加密也没有强身份认证,权限主要靠"来源 IP + 网段"控制,一旦暴露到公网极易被扫描利用。请务必:
- 只在内网使用,绝不把 NFS 端口(2049)暴露到公网
- 在 /etc/exports 里严格限制网段,不要用 或过大的网段
- 始终保留 rootsquash,必要时用 allsquash 进一步收紧
- 用安全组/防火墙只放行可信内网来源;跨机房传输走 VPN 或专线
NFS 还是对象存储?
两者定位不同,别硬套:
- NFS 适合需要 POSIX 文件语义、随机读写、多机共享同一目录的场景(如共享构建产物、临时数据),但扩展性和跨地域能力有限。
- 对象存储(S3 兼容)适合海量、静态、一次写多次读的文件(备份、图片、视频),天然高可用、可跨地域,但通过 HTTP API 访问,不支持就地随机改写。
简单判断:要"像磁盘一样用"选 NFS,要"海量存档 + 全球分发"选对象存储。
小结
NFS 的核心是服务端 exports 导出、客户端 mount 挂载,配合 fstab 持久化。安全上必须坚守"只走内网、限制网段、保留 rootsquash"三条底线。共享目录选 NFS,海量归档选对象存储,按访问模式选型即可。