飞牛OS (FNOS) 解决“死机无日志”及开启日志持久化全纪录
问题描述: 飞牛OS在升级新版本内核(如 1.1.4 / Kernel 6.12+)后,遇到不定时死机、瞬间失联的问题。且重启后查询 journalctl 提示 no persistent journal was found,导致无法查看死机前的报错信息,排查无从下手。
根本原因: 默认配置下,系统日志仅存储在内存中(Volatile),重启即丢失。为了捕获死机瞬间的内核报错(Kernel Panic/Hang),必须开启日志持久化(Persistent Logging)。
第一步:修改日志配置文件
我们需要修改 systemd-journald 的配置,强制要求日志落盘,并限制占用空间防止撑爆硬盘。
-
编辑配置文件:
sudo vim /etc/systemd/journald.conf
2.找到(或在文件末尾添加)以下两行配置:按i编辑
[Journal] # 开启持久化存储 Storage=persistent # 限制日志最大占用 500M 空间(自动清理旧日志) SystemMaxUse=500M
(修改完成后按ESC,输入 :wq 保存退出)
第二步:配置目录权限(最关键的一步)
很多时候只改配置文件无效(表现为目录为空),是因为权限不对。必须手动赋予日志服务对目录的读写权限。
依次执行以下命令:
# 1. 创建日志存放目录 sudo mkdir -p /var/log/journal # 2. 修改目录归属为 root 用户和 systemd-journal 组 sudo chown root:systemd-journal /var/log/journal # 3. 赋予 SGID 权限 (2755),确保新建的日志文件自动继承组权限 sudo chmod 2755 /var/log/journal
第三步:重启日志服务并验证
-
刷新日志服务进程:
# 发送信号强制刷新,比 restart 更彻底 sudo killall -USR1 systemd-journald # 或者使用 sudo systemctl restart systemd-journald
2.验证是否成功: 查看日志目录,必须看到生成的 UUID 文件夹才算成功:
ls -l /var/log/journal
成功示例输出: drwxr-sr-x+ 2 root systemd-journal 4096 ... 3ff8fb40ccee...
附录 1:死机后如何查看“遗言”?
开启上述功能后,如果机器再次死机,强制重启后连接 SSH,执行以下命令查看**“上一次启动期间”**的最后 100 行日志:
# -b -1 代表上一次启动(即死机那次),-n 100 代表最后100行 sudo journalctl -k -b -1 -n 100
通过这最后 100 行,通常能看到 GPU HANG、CPU Error 或 USB 断连等关键死因。
附录 2:AMD CPU + USB网卡 防死机最终方案(修改 GRUB)
如果你的硬件是 AMD Ryzen (如 4750G, 5600G) 搭配 USB 2.5G 网卡,在新内核下极易因“过度节能”导致死机。
解决方案: 修改 /etc/default/grub,在 GRUB_CMDLINE_LINUX_DEFAULT 中加入以下参数:
# 禁止 AMD CPU 进入深层睡眠(C-State) + 禁止 USB 网卡自动休眠 + 关闭 PCIe 链路节能 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash processor.max_cstate=1 usbcore.autosuspend=-1 pcie_aspm=off"
应用生效:
sudo update-grub sudo reboot
查看是否成功
cat /proc/cmdline
成功示例
BOOT_IMAGE=/boot/vmlinuz-6.12.18-trim root=UUID=d7fb4c84-33e0-474e-a416-160e07310fd2 ro modprobe.blacklist=pcspkr quiet splash processor.max_cstate=1 usbcore.autosuspend=-1 pcie_aspm=off