系统优化

飞牛NAS启动项管理:加速开机速度

开机速度是很多 NAS 用户容易忽略的体验痛点。飞牛NAS(fnOS)基于 Debian Linux 深度定制,默认会启用大量系统服务和第三方应用的自启动项。随着你安装 Docker 容器、媒体服务、同步工具增多,开机进入可用状态的时间可能从 30 秒被拉长到两三分钟。本文将手把手教你如何排查、禁用和优化启动项,让飞牛NAS在 15 秒内完成核心服务就绪。

一、理解飞牛NAS的启动链路

飞牛NAS的开机流程大致分为三个阶段:内核引导、Systemd 服务启动、用户态应用自启。其中 Systemd 是绝对核心,所有服务(包括 Docker 容器、Samba、NFS、WebUI 等)都以 unit 文件形式受它管理。因此,优化启动项的本质就是管理 Systemd 的 unit 依赖树。

登录飞牛NAS的 SSH 终端(默认端口 22,使用 root 或管理员账号),我们首先查看当前启动耗时:

systemd-analyze time

输出示例:

Startup finished in 2.847s (kernel) + 31.672s (userspace) = 34.519s
graphical.target reached after 31.672s in userspace

如果 userspace 耗时超过 20 秒,就值得优化。接着查看哪些服务拖慢了启动:

systemd-analyze blame

这条命令会按耗时降序列出所有服务。常见的高耗时项包括 docker.servicesmbd.servicenmbd.servicefnos-web.servicepostgresql.service 等。

二、禁用不必要的系统服务

飞牛NAS默认开启了一些对普通用户无用的服务,比如打印服务、蓝牙、调制解调器等。通过以下命令可以精确禁用:

# 查看服务状态
systemctl status cups.service

# 禁用并停止打印服务(如果不需要)
systemctl disable --now cups.service

# 禁用蓝牙相关
systemctl disable --now bluetooth.service

# 禁用 ModemManager(蜂窝网络管理)
systemctl disable --now ModemManager.service

建议保留的服务包括:dockersmbdnmbdfnos-websshsystemd-journald。不要随意禁用 fnos-corefnos-api 这类基础服务,否则可能导致 WebUI 无法访问。

三、优化 Docker 启动策略

Docker 容器自启动是拖慢开机的大头。飞牛NAS的 Docker 服务本身是必须的,但容器镜像加载需要时间。优化分两步:

第一步,给 Docker 服务增加延迟启动,等待网络和存储就绪:

mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/override.conf << EOF
[Service]
ExecStartPre=/bin/sleep 3
TimeoutStartSec=120
EOF
systemctl daemon-reload

第二步,管理容器的自启动策略。飞牛NAS 的 Docker 容器默认采用 unless-stopped 策略,这会让所有容器同时拉起。建议在 Docker 面板中,将非核心容器(如下载工具、监控容器)改为手动启动。命令行方式如下:

# 查看当前容器重启策略
docker inspect --format='{{.Name}} {{.HostConfig.RestartPolicy.Name}}' $(docker ps -aq)

# 将特定容器改为 no(禁止自动启动)
docker update --restart=no 容器名或ID

对于必须自启的容器(例如 Jellyfin、Portainer),可以设置依赖顺序:

docker update --restart=unless-stopped --memory=512m jellyfin

限制内存也能减少启动时的资源争抢,加快整体就绪。

四、延迟非关键服务的启动

有些服务不是急迫需要的,但也不宜彻底禁用,比如 SMB 的 nmbd(NetBIOS 名称服务)、avahi-daemon(局域网 mDNS 发现)。我们可以用 Systemd 的 Target 机制延迟它们。

创建延迟启动单元目录,修改服务的依赖:

systemctl edit --force --full nmbd.service

在打开的编辑器中,修改 [Unit] 段,添加:

After=network-online.target systemd-networkd-wait-online.service

然后在 [Service] 段添加:

ExecStartPre=/bin/sleep 10

保存后重载:

systemctl daemon-reload
systemctl restart nmbd.service

这样 nmbd 会延迟 10 秒启动,而核心服务(如 smbd、fnos-web)不受影响。类似的方法可用于 avahi-daemonwsdd 等。

五、并行化启动与精简模块

Systemd 默认已经启用并行启动,但某些服务之间没有声明依赖关系,导致串行等待。检查启动关键路径:

systemd-analyze critical-chain

如果发现某个服务前面有大量 wait 时间,可以尝试修改服务的 [Unit] 部分,去掉不必要的 After= 依赖。例如,很多第三方应用依赖 local-fs.target,但实际只需要根文件系统挂载即可。

另外,飞牛NAS内核加载了很多不必要的模块,可以通过 /etc/modules-load.d/ 和黑名单减少加载时间。编辑黑名单:

echo "blacklist bluetooth" >> /etc/modprobe.d/blacklist-custom.conf
echo "blacklist btusb" >> /etc/modprobe.d/blacklist-custom.conf

重启后生效。注意:仅在你确认不需要这些硬件功能时操作。

六、使用开机自检脚本清理残留

飞牛NAS的 /etc/rc.local 或 Systemd 的 multi-user.target 中可能残留一些安装脚本产生的自启动项。检查以下位置:

ls -la /etc/rc*.d/
ls -la /etc/systemd/system/multi-user.target.wants/

对于明显的第三方残留(如百度网盘客户端、迅雷插件),直接删除对应的软链接:

rm /etc/systemd/system/multi-user.target.wants/baidunetdisk.service
systemctl daemon-reload

七、验证优化效果

完成以上步骤后,重启飞牛NAS:

reboot

重新登录后再次运行:

systemd-analyze time

一般来说,userspace 时间能从 30 秒以上缩短到 10-15 秒。再检查关键服务是否正常:

systemctl is-active smbd docker fnos-web

如果某个服务未启动,用 journalctl -u 服务名 查看日志排查。

总结

飞牛NAS的启动优化核心在于合理管理 Systemd 服务依赖和 Docker 容器策略。优先禁用无用的系统服务,延迟非关键网络服务,限制容器并发启动,再配合模块精简,通常能把开机时间缩短一半以上。注意每次修改后务必 daemon-reload,并且不要动 fnos-corefnos-api 这两个基础服务。优化后的系统不仅开机更快,日常运行也更稳定,资源占用更低。建议每安装一个新应用后,重新检查一下 systemd-analyze blame,保持启动链路的清爽。

💬 评论区
发表评论

暂无评论,来说两句吧