有把 Linux 作为日常操作系统使用的决心,也相应地就要有随时紧急抢救的觉悟和能力。

以及之前在实验室负责维护一批比赛用的 NUC,对于在赛场内外的系统异常情况处置需要有一定要求。

因此我会在这里汇总并实时更新一些常用的应急抢救手段,也欢迎大家在评论区提及关键词补充。

SysRq

以下引用 WIKI 的介绍:

Magic SysRq 组合键是一串能直接与 Linux 内核沟通的组合键,允许用户就算在系统进入死循环濒临崩溃时,直接调用系统底层将资料写入文件系统或重启,避免尚未写入文件系统与硬盘的数据在关机后消失。效果类似于电脑上的电源键或重启键,但能执行更多操作。

根据系统默认设定,可能需要手动开启。

详见 Linux MagicSysRq 应用

DebugShell

当面对开机/关机过程中出现的问题时,可能需要一个尽可能随时可用的 shell 以方便在当下及时处理。

开启 DebugShell 后,Systemd 会在 tty9 维护一个默认以 root 账户登录的 sh,并确保它在开机时尽可能早关机时尽可能晚都保持可用状态,用于随时进入进行操作。

注意可能存在的安全风险。

开启方法

1
systemctl enable --now debug-shell

CtrlAltDel

systemd 维护的一组 Ctrl+Alt+Del 快捷键,按下时将会触发 SIGINT 信号以实现系统 reboot。而当在2秒内连续收到超过7次这个信号,那么systemd将会不顾一切的立即强制重启。

chvt

通常情况下,systemd 运行于 tty1,桌面环境运行于 tty2。而部分桌面环境(例如 KDE)运行时可能会屏蔽切换 tty 的快捷键(Ctrl+Alt+Fn),可以通过在终端执行 chvt 来实现这一目的。

例如切换至tty6:

1
sudo chvt 6

systemd-analyze

systemd-analyzesystemd 提供的用于调试系统启动过程和 systemd 系统管理器自身状态的工具。

详见 systemd-analyze(1) — Arch manual pages

系统启动过程

1
systemd-analyze time
  • 用于显示如下信息
    • 系统在进入引导之前,固件加载所用时间
    • 系统在内核启动之前,引导加载程序所用时间
    • 系统在启动第一个用户态进程(init,也就是systemd)之前,内核启动所用时间
    • 系统可被使用前,系统用户空间初始化所用时间

我的设备的真实输出情况:

1
systemd-analyze critical-chain

展示在系统启动过程中,位于关键点上的单元的启动情况。

当在启动过程中,某个单元若未启动成功,则过程将被阻塞而无法继续进行,那么这个单元将视为关键点。

其中 @ 后的时间为该单元启动时的绝对时间点,+ 后的时间为该单元启动时所使用的时间。

我的设备的真实输出情况:

1
systemd-analyze blame

展示目前正在活动中的单元,按启动所花费的时间降序排列。

我的设备的部分真实输出情况:

1
systemd-analyze plot > plot.svg

输出一张名为 plot.svg 的图像,其上详细展示了系统的启动过程,能够表现出单元的启动时刻、完成时刻、启动花费时长以及可能的依赖关系。

我的设备的部分真实输出情况: