几天前,我的 Linux 因滚动升级出问题导致内核出 bug,无论使用 reboot 还是 init 6 都无法解决问题,输入重启命令后控制台卡住,并且 dmesg 里显示偏移错误,在浏览大量相关页面后终于找到了解决方案。
Magic SysRq key 方法
Magic SysRq key 是一串能直接与 Linux 内核沟通的组合键,允许用户就算在系统进入死循环濒临崩溃时,直接调用系统底层将数据写入文件系统或重启,避免尚未写入文件系统与硬盘的数据在关机后消失。效果类似于计算机上的电源键或重启键,但能运行更多操作。
重启:
echo 1 > /proc/sys/kernel/sysrq
echo b > /proc/sysrq-trigger
关机:
echo 1 > /proc/sys/kernel/sysrq
echo o > /proc/sysrq-trigger
Watchdog 方法
Watchdog 是 Linux 系统一个很重要的机制,其目的是监测系统运行的情况,一旦出现锁死,死机的情况,能及时重启机器(取决于设置策略),并收集 Crash Dump。如果 Linux kernel 未开启 Magic SysRq key 或者不起作用,可以尝试使用 Watchdog 重启方法。
加载 Watchdog 模块:
modprobe softdog
加载模块完毕后输入以下命令:
cat /dev/watchdog
接下来会报错并且退出,同时日志会显示:
softdog: Unexpected close, not stopping watchdog!
- 等待六十秒系统自动重启即可。
本文参考
- https://zohead.com/archives/linux-force-reboot/
- https://blog.csdn.net/ericstarmars/article/details/81750919