一、问题现象
在飞牛 FNOS 中通过应用中心安装新发布的 QWRT(Docker 应用)后,系统出现以下异常:
- **开机后能短暂看到 **
login
- 很快出现报错并自动重启
- 普通模式无法进入控制台
recovery mode 也来不及登录就重启
系统配置
- CPU:AMD Ryzen 7 4800U with Radeon Graphics8核16 线程
- 内存:16 GB 4266MHz LPDDR4
典型报错示例:
init: Failed to stat /dev/console: No such file or directory
mount_root: failed to launch kmodloader from internal overlay
block: unable to load configuration (fstab: Entry not found)
Please press Enter to activate this console.
二、问题判断
结合现象,基本可判断为:
- QWRT 安装后触发了 Docker 自启链路
- QWRT 容器或其相关配置影响了系统启动流程
- 可能连带影响了挂载、overlay、fstab 或启动服务
- 导致系统一进入正常启动阶段就迅速异常并重启
因此,处理思路不是直接“修好 QWRT”,而是:
- 先阻止 Docker / QWRT 自动启动
- 让 FNOS 先恢复可正常启动
- 再在系统内停用、删除 QWRT
- 最后恢复 Docker 服务
三、抢救入口说明
1. GRUB 菜单项区别
fnos GNU/Linux:普通启动
Advanced options for fnos GNU/Linux:高级启动
fnos GNU/Linux with Linux 6.12.18-trim:该内核的正常启动模式
fnos GNU/Linux with Linux 6.12.18-trim (recovery mode):该内核的恢复模式
2. 当 recovery mode 也无法进入时
**如果 recovery mode 仍然快速重启,可以通过 **GRUB 编辑启动参数 的方式抢救。
进入方式:
- 开机进入 GRUB 菜单
- 选中对应启动项
- **按 **
e
- 进入启动参数编辑页
看到类似:
linux /boot/vmlinuz-6.12.18-trim root=UUID=xxxx ro modprobe.blacklist=pcspkr quiet splash
四、紧急止血步骤(推荐顺序)
方案 A:尝试进入救援目标
**把 **linux 这一行末尾的:
quiet splash
改为:
systemd.unit=rescue.target
类似:
linux /boot/vmlinuz-6.12.18-trim root=UUID=xxxx ro modprobe.blacklist=pcspkr systemd.unit=rescue.target
然后按:
启动。
方案 B:直接进入最底层 shell(更强)
**如果 **rescue.target 仍不行,则将末尾改为:
init=/bin/bash
类似:
linux /boot/vmlinuz-6.12.18-trim root=UUID=xxxx ro modprobe.blacklist=pcspkr init=/bin/bash
然后按:
启动。
这个方式通常更容易绕过自动重启的服务。
五、进入 shell 后的第一步操作
如果成功进入命令行,先把根分区切为可写:
mount -o remount,rw /
六、停用 Docker 自启,阻止 QWRT 再次拉起
标准做法(推荐)
**如果 **systemctl 可用:
systemctl stop docker
systemctl disable docker
systemctl stop containerd
systemctl disable containerd
底层应急做法
**如果 **systemctl 不可用,可临时移走自启链接:
mv /etc/systemd/system/multi-user.target.wants/docker.service /etc/systemd/system/multi-user.target.wants/docker.service.bak 2>/dev/null
mv /etc/systemd/system/multi-user.target.wants/containerd.service /etc/systemd/system/multi-user.target.wants/containerd.service.bak 2>/dev/null
**这里使用 **mv 比 rm -f 更稳妥,便于保留现场和回滚。
七、必要时临时隔离 Docker 数据目录
如果怀疑 Docker 一启动系统就又异常,可以临时把 Docker 数据目录改名:
mv /var/lib/docker /var/lib/docker.bak
sync
这样可以避免原有容器立即被重新拉起。
注意:这是较激进手段,但常用于紧急止血。
八、检查 fstab(因为报错中出现 Entry not found)
报错中有:
block: unable to load configuration (fstab: Entry not found)
因此恢复后应检查:
cp /etc/fstab /etc/fstab.bak
cat /etc/fstab
lsblk -f
blkid
**如果 **fstab 中存在明显异常的挂载项、错误 UUID 或无效挂载点,应先备份后修正或注释。
九、让系统恢复正常启动
完成止血后,重启系统:
reboot
**如果之前是通过 GRUB 临时添加 **init=/bin/bash 或 systemd.unit=rescue.target 启动的,下一次正常从默认启动项进入即可。
十、系统恢复正常启动后必须做的事情
第一步:先在飞牛 Web 中停用并删除 QWRT 应用
**系统恢复正常启动后,**先不要急着恢复 Docker 自启。
应先在飞牛 Web 管理界面中:
- 打开应用中心
- 找到 QWRT
- 先停用
- 再删除 / 卸载
这样做的原因:
- QWRT 是通过应用中心安装的
- 只删容器可能不够
- 应用中心可能会再次创建容器或重新拉起服务
**因此,**先在 Web 中停用、删除 QWRT,是避免问题复发的关键一步。
十一、恢复 Docker 服务的正确顺序
在确认 QWRT 已经从飞牛 Web 中停用、删除后,再恢复 Docker。
1. 查看当前状态
systemctl status docker
systemctl status containerd
systemctl is-enabled docker
systemctl is-enabled containerd
ls -ld /var/lib/docker*
2. 如果之前移动过 Docker 数据目录
**若存在 **/var/lib/docker.bak,可恢复:
mv /var/lib/docker.bak /var/lib/docker
**如果 **/var/lib/docker 已存在,先确认是否为空目录,再决定是否改名备份。
3. 恢复服务自启
systemctl enable containerd
systemctl enable docker
**如果之前做过 **mask,则先执行:
systemctl unmask containerd
systemctl unmask docker
4. 手动启动服务
systemctl start containerd
systemctl start docker
5. 检查状态
systemctl status containerd
systemctl status docker
docker ps -a
十二、如果 Docker 恢复后仍看到 QWRT 容器
如果应用中心删除后,Docker 中仍有 QWRT 相关容器,可进一步手工删除。
查看容器
docker ps -a --format 'table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}'
停止并删除容器
docker stop <容器名>
docker rm -f <容器名>
查看镜像
docker images
删除镜像
docker rmi <镜像ID>
十三、推荐的完整恢复顺序
A. 系统崩溃、无限重启阶段
- 进入 GRUB 编辑页
- **修改 **
linux 行
- 优先尝试:
systemd.unit=rescue.target
- 不行再尝试:
- 进入 shell 后:
- 停止/禁用 Docker 与 containerd
- **必要时临时改名 **
/var/lib/docker
- **检查 **
/etc/fstab
- 重启
B. 系统恢复正常启动后
- 登录飞牛 Web
- 在应用中心停用 QWRT
- 在应用中心删除 QWRT
- 检查 Docker 是否仍被禁用
- **恢复 **
/var/lib/docker(如果此前改名)
enable 并 start Docker / containerd
- 检查容器列表
- 如有残留,再手工删除 QWRT 容器和镜像
- 再次重启验证系统稳定性
十四、推荐命令速查
1. 临时进入可写根分区
mount -o remount,rw /
2. 停止并禁用 Docker
systemctl stop docker
systemctl disable docker
systemctl stop containerd
systemctl disable containerd
3. 备份方式移走自启链接
mv /etc/systemd/system/multi-user.target.wants/docker.service /etc/systemd/system/multi-user.target.wants/docker.service.bak 2>/dev/null
mv /etc/systemd/system/multi-user.target.wants/containerd.service /etc/systemd/system/multi-user.target.wants/containerd.service.bak 2>/dev/null
4. 临时隔离 Docker 数据目录
mv /var/lib/docker /var/lib/docker.bak
sync
5. 检查挂载配置
cp /etc/fstab /etc/fstab.bak
cat /etc/fstab
lsblk -f
blkid
6. 恢复 Docker
systemctl unmask containerd 2>/dev/null
systemctl unmask docker 2>/dev/null
systemctl enable containerd
systemctl enable docker
systemctl start containerd
systemctl start docker
7. 查看容器
docker ps -a --format 'table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}'
十五、经验总结
这次问题的核心经验是:
- 出现无限重启时,不要反复硬启动
- 优先切断异常应用的自启链路
- **抢救阶段优先保现场,能 **
mv 就尽量不要直接 rm
- 通过飞牛应用中心安装的应用,恢复后应优先在 Web 中停用、删除
- 恢复 Docker 前,必须确认问题应用已被彻底处理
十六、后续建议
- 后续安装新应用前,先确认是否有用户反馈和兼容性问题
- 关键 NAS 业务环境尽量在安装前做配置备份
- 对 Docker 自启、挂载目录、系统配置变更,优先保留可回退方案
- 恢复完成后,建议再次检查:
- Docker 是否正常
- 现有容器是否齐全
- 存储挂载是否正常
- Web 管理界面是否稳定
十七、备注
本文档基于一次实际的 FNOS + QWRT 安装后无限重启故障排查过程整理,适合作为后续归档和同类问题处理参考。