fnOS SMB/NMBD 启动超时导致系统启动变慢问题反馈
问题概述
fnOS 启动时 nmbd.service 会卡住约 90 秒,最终以 timeout 失败,导致整机启动时间从约 24 秒增加到约 1 分 41 秒。
该问题出现在 SMB 服务开启的情况下。smbd.service 正常启动,问题集中在 nmbd.service 的 systemd 启动方式。
环境信息
- 系统:fnOS,基于 Debian GNU/Linux 12 bookworm
- Samba 版本:4.17.12-Debian
- 运行环境:Proxmox VE 虚拟机
- VM 配置:VirtIO SCSI 系统盘,VirtIO 网卡,qemu-guest-agent 已安装
- 测试时间:2026-07-03
现象
启动慢时 systemd-**yze 显示:
Startup finished in 9.343s (kernel) + 1min 31.916s (userspace) = 1min 41.259s
graphical.target reached after 1min 31.907s in userspace.
查看 nmbd.service:
nmbd.service: start operation timed out. Terminating.
nmbd.service: Failed with result 'timeout'.
Failed to start nmbd.service - Samba NMB Daemon.
TimeoutStartUSec=1min 30s
ExecStart=/usr/sbin/nmbd -D $NMBDOPTIONS
Type=notify
启动过程中 nmbd 实际已经在运行并输出日志,但 systemd 一直未判定服务启动完成,直到 90 秒超时。
疑似原因
当前 nmbd.service 配置为:
Type=notify
ExecStart=/usr/sbin/nmbd -D $NMBDOPTIONS
-D 会让 nmbd 以 daemon/background 模式运行,而 systemd unit 又使用 Type=notify。这会导致 systemd 等待启动完成通知,但服务进程的启动方式与 systemd 期望不匹配,最终卡满默认 TimeoutStartSec=90s。
临时规避方案
将 nmbd.service 的启动命令从后台模式改为前台模式:
ExecStart=/usr/sbin/nmbd --foreground --no-process-group $NMBDOPTIONS
执行:
sudo cp /etc/systemd/system/nmbd.service /etc/systemd/system/nmbd.service.bak
sudo sed -i 's#^ExecStart=/usr/sbin/nmbd -D \$NMBDOPTIONS#ExecStart=/usr/sbin/nmbd --foreground --no-process-group $NMBDOPTIONS#' /etc/systemd/system/nmbd.service
sudo systemctl daemon-reload
sudo systemctl reset-failed nmbd
sudo systemctl restart nmbd
修复后 nmbd.service 状态正常:
Active: active (running)
Main PID: /usr/sbin/nmbd --foreground --no-process-group
Status: "nmbd: ready to serve connections..."
修复后启动时间恢复:
Startup finished in 9.033s (kernel) + 15.359s (userspace) = 24.392s
graphical.target reached after 14.964s in userspace.
影响范围
- SMB 文件共享本身的
smbd.service 可以正常运行。
- 问题主要影响开机速度,并导致
nmbd.service 在系统中显示 failed。
- 如果用户依赖 NetBIOS/局域网工作组发现,
nmbd failed 可能影响旧式网络邻居发现或 NetBIOS 名称解析。
- 使用
\\IP地址 访问 SMB 通常不受影响。
建议修复
建议官方检查 fnOS 中 nmbd.service 的 systemd unit 配置,将 nmbd 调整为符合 systemd 管理方式的前台运行模式,例如:
Type=notify
ExecStart=/usr/sbin/nmbd --foreground --no-process-group $NMBDOPTIONS
或者根据 Samba/Debian 官方 unit 的推荐方式调整 Type 与 ExecStart,避免 Type=notify 与 -D 后台化组合导致 systemd 启动超时。
附加说明
同环境下修改 ExecStart 后多次验证,nmbd 不再卡 90 秒,系统启动时间从约 1 分 41 秒下降到约 24 秒,说明该问题与 nmbd.service 启动方式高度相关。