Linux NAS 挂载不稳定的原因

2次阅读

加_netdev可解决NFS/CIFS开机挂载失败,因它使systemd将挂载单元绑定到network-online.target;CIFS应使用credentials文件并设vers=3.0+;NFS推荐hard,timeo=14,retrans=3;卸载失败需用fuser排查占用进程。

Linux NAS 挂载不稳定的原因

挂载时没加 _netdev 导致开机失败

linux 启动早期网络还没就绪,但默认挂载顺序不检查网络依赖。如果 /etc/fstab 里直接写 NFS/CIFS 挂载项,系统可能在网卡未 up、dns 未通、Samba 服务未响应时强行尝试挂载,最终超时失败并卡住或跳过——后者会导致后续依赖该挂载点的服务异常。

解决方法是在 fstab 对应行的第四个字段(options)中加入 _netdev,例如:

192.168.1.100:/volume1/video /mnt/nas nfs _netdev,hard,intr,rsize=8192,wsize=8192 0 0

注意:_netdev 是 systemd 识别网络设备挂载的关键标记,不加它,systemd-fstab-generator 就不会把挂载单元绑定到 network-online.target

CIFS 挂载因认证失效反复重试

使用用户名密码挂载 CIFS(如 Samba 共享)时,若凭据过期、用户被锁定、或 NAS 端启用了 Kerberos/NTLMv2 强制策略,mount.cifs 可能静默失败,并在后台不断重试(尤其配合 autonoauto,x-systemd.automount 时),拖慢系统响应甚至耗尽连接数。

建议做法:

  • credentials=/path/to/credfile 替代明文写在 fstab 中的 username=/password=
  • 确保 credfile 权限为 600chmod 600 /path/to/credfile),否则 mount 会拒绝读取
  • 对 SMB3 共享,显式指定协议版本:加 vers=3.0vers=3.1.1,避免协商失败退到不安全的 SMB1
  • 加上 cache=strictactimeo=30 减少元数据不一致引发的 IO 阻塞

NFS 挂载 hard/intr 设置不当引发假死

NFS 默认是 soft 模式,出错直接报错返回;但多数 NAS 场景需要一致性,所以常设为 hard。问题在于:若没配 intr(或现代内核中的 hard,soft, intr 已被弃用,改用 hard,nointr,forever),NFS 请求卡住时,进程会不可中断(D 状态),kill -9 也无效,只能等服务器恢复或重启。

稳妥组合是:

  • hard:保证写操作不丢数据
  • timeo=14:超时时间设为 1.4 秒(单位是 0.1s),避免等太久
  • retrans=3:最多重传 3 次
  • acregmin=60,acregmax=120:平衡属性缓存与实时性

特别注意:Linux 5.10+ 内核中 intr 已被移除,改用 hard,nointr,forever + timeo/retrans 控制行为。

挂载点被其他进程占用导致 umount 失败

看似“挂载不稳定”,实则是卸载失败后残留,下次挂载时报 device is busy。常见于:shell 当前工作目录在挂载点下、rsync/rsnapshot 正在扫描文件、logrotate 打开挂载点下的日志、或 systemd 服务 Unit 文件里写了 BindPaths= 却没设 BindReadOnly=true

排查命令:

lsof +D /mnt/nas

或更轻量:

fuser -vm /mnt/nas

临时释放可试:

  • fuser -k /mnt/nas(杀掉所有访问进程)
  • umount -l /mnt/nas(lazy unmount,不推荐长期用,只是应急)
  • 检查是否有 systemd automount 单元残留:systemctl list-units --type=automount | grep nas

真正稳定的关键,往往不在挂载命令本身,而在于谁在用它、什么时候用、以及断连后是否有人负责清理。NAS 挂载不是“配一次就完事”的静态配置,而是持续运行环境里的动态契约。

text=ZqhQzanResources