NFS挂载 在web站点调用访问 使用 mount --bind(抛弃软链接) 一个重要避坑 不能直接fstab 绑定
2026-09-02
临时绑定(立即生效)
mount --bind /home/NAS/uploads /home/wwwroot/all.fozhuyuan.cn/uploads
设置开机自动挂载,编辑 /etc/fstab,在最后一行追加
/home/NAS/uploads /home/wwwroot/all.fozhuyuan.cn/uploads none bind 0 0
完整 fstab 末尾示例:
192.168.31.234:/volume2/photo /home/NAS nfs defaults 0 0
/home/NAS/uploads /home/wwwroot/all.fozhuyuan.cn/uploads none bind 0 0 这是错误的
home‑NAS.mount(NFS 挂载)启动失败bind 挂载
/home/wwwroot/all.fozhuyuan.cn/uploads依赖前面的 NFS 挂载,连带失败systemd 出现启动顺序循环依赖(Ordering cycle),网络 / NFS 挂载时序错乱
/etc/fstab 直接写两条记录时,systemd 默认不知道先后顺序:
NFS:
/home/NASBind:
/home/wwwroot/all.fozhuyuan.cn/uploads
systemd 并行挂载,bind 先执行,但 NFS 还没挂好 → 依赖雪崩,系统进入 emergency 模式
fstab 只保留 NFS 一行(带_netdev)
192.168.*.*:/volume2/photo /home/NAS nfs defaults, 0 0
删掉 fstab 中的 bind 记录
写开机执行脚本,等待 NFS 就绪后执行 bind
nano /etc/rc.local
写入:
#!/bin/bash sleep 5 mount --bind /home/NAS/uploads /home/wwwroot/all.fozhuyuan.cn/uploads exit 0
赋予权限:
chmod +x /etc/rc.local
手动测试挂载流程(修复后验证)
#先挂载NFS mount /home/NAS #再挂载bind mount --bind /home/NAS/uploads /home/wwwroot/all.fozhuyuan.cn/uploads
没有报错才代表配置正常。
不要直接在 fstab 同时写 NFS + bind 两条自动挂载 → systemd 并行执行,时序错乱开机失败
NFS 必须增加
_netdev参数,告诉系统这是网络文件系统,等网卡就绪bind 挂载必须强制依赖 home‑NAS.mount,保证先后顺序
临时挂载(重启失效)
mount -t nfs 192.168.1.100:/share/upload_img /home/NAS/uploads mount -t nfs 192.168.1.100:/share/backup_file /home/NAS/backup mount -t nfs 192.168.1.100:/share/video /home/NAS/video
Linux 支持同一个服务器挂载多个 Nfs 共享,规则讲清楚
1. 基础结论
✅ 一台 Linux 可以挂载多条 NFS,数量没有硬性上限(受系统资源限制)
可以同一台 NAS,多个共享目录分别挂载
可以多台不同 NAS 服务器各自挂载
挂载点必须是本地不同空目录,不能重复挂载到同一个路径
同一个本地目录不能重复挂载多个 NFS
一份 NAS 文件,本地多个访问路径,两种方案区别很大。
方案 1:NFS 只挂载 1 次,本地用软链接做多个别名(最简单)
流程:
NFS 只挂载一次:
# /etc/fstab NAS_IP:/share/uploads /home/NAS/uploads nfs defaults 0 0
mount -a
在不同位置建立软链接指向这个已经挂载好的目录
ln -s /home/NAS/uploads /home/wwwroot/a/public/uploads ln -s /home/NAS/uploads /home/wwwroot/b/public/uploads ln -s /home/NAS/uploads /home/wwwroot/c/public/uploads
✅ 文件是同一份,修改任意位置全部同步 ⚠️ 缺点:本质还是软链接,你之前遇到的 Apache 403(外部目录软链接)问题依然存在。
方案 2:bind 挂载(推荐!绕过软链接权限问题)
Linux 的 mount --bind,可以把已经挂载好的目录,再映射到另外一个本地路径。
底层文件还是 NAS 上那一份,不是复制;但对 Apache 来说它是真实目录,不是符号链接。
操作示例
原始 NFS 挂载(只挂一次)
mkdir -p /home/NAS/uploads mount -t nfs NAS_IP:/share/uploads /home/NAS/uploads
bind 映射到站点目录(多条 bind)
mkdir -p /home/wwwroot/site1/public/uploads mount --bind /home/NAS/uploads /home/wwwroot/site1/public/uploads mkdir -p /home/wwwroot/site2/public/uploads mount --bind /home/NAS/uploads /home/wwwroot/site2/public/uploads
开机自启写入 /etc/fstab
#原始NFS NAS_IP:/share/uploads /home/NAS/uploads nfs defaults 0 0 #bind挂载多条(同一个源映射到多个站点) /home/NAS/uploads /home/wwwroot/site1/public/uploads none bind 0 0 /home/NAS/uploads /home/wwwroot/site2/public/uploads none bind 0 0
优势(对你当前 403 场景非常关键)
不是
ln -s软链接,Apache 识别为真实物理目录不需要配置跨目录 FollowSymLinks
SELinux 只需要开启一次
httpd_use_nfs on多个站点共用 NAS 一份文件,数据唯一
卸载方式
umount /home/wwwroot/site1/public/uploads
两种方式对比
表格
| 方式 | 是否真实目录 | Apache 访问特点 | 适用场景 |
|---|---|---|---|
| ln -s 软链接 | 符号链接 | 容易 403,需要 FollowSymLinks + 外部目录授权 | 简单测试 |
| mount --bind | 真实挂载点 | Apache 无软链接拦截,权限更好控制 | 多站点共用同一套 NAS 资源(生产推荐) |
| 多次 mount nfs | ❌不支持 | 同一个 NFS 共享不能 mount 多次到不同本地目录 | 不可行 |