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

挂载时没加 _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 可能静默失败,并在后台不断重试(尤其配合 auto 或 noauto,x-systemd.automount 时),拖慢系统响应甚至耗尽连接数。
建议做法:
- 用
credentials=/path/to/credfile替代明文写在 fstab 中的username=/password= - 确保 credfile 权限为
600(chmod 600 /path/to/credfile),否则 mount 会拒绝读取 - 对 SMB3 共享,显式指定协议版本:加
vers=3.0或vers=3.1.1,避免协商失败退到不安全的 SMB1 - 加上
cache=strict和actimeo=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,不推荐长期用,只是应急) - 检查是否有
systemdautomount 单元残留:systemctl list-units --type=automount | grep nas
真正稳定的关键,往往不在挂载命令本身,而在于谁在用它、什么时候用、以及断连后是否有人负责清理。NAS 挂载不是“配一次就完事”的静态配置,而是持续运行环境里的动态契约。










