有把 Linux
作为日常操作系统使用的决心,也相应地就要有随时紧急抢救的觉悟和能力。
以及之前在实验室负责维护一批比赛用的 NUC
,对于在赛场内外的系统异常情况处置需要有一定要求。
因此我会在这里汇总并实时更新一些常用的应急抢救手段,也欢迎大家在评论区提及关键词补充。
SysRq
以下引用 WIKI 的介绍:
Magic SysRq 组合键是一串能直接与 Linux 内核沟通的组合键,允许用户就算在系统进入死循环濒临崩溃时,直接调用系统底层将资料写入文件系统或重启,避免尚未写入文件系统与硬盘的数据在关机后消失。效果类似于电脑上的电源键或重启键,但能执行更多操作。
根据系统默认设定,可能需要手动开启。
DebugShell
当面对开机/关机过程中出现的问题时,可能需要一个尽可能随时可用的 shell
以方便在当下及时处理。
开启 DebugShell
后,Systemd
会在 tty9
维护一个默认以 root
账户登录的 sh
,并确保它在开机时尽可能早和关机时尽可能晚都保持可用状态,用于随时进入进行操作。
注意可能存在的安全风险。
开启方法
|
|
CtrlAltDel
由 systemd
维护的一组 Ctrl+Alt+Del
快捷键,按下时将会触发 SIGINT
信号以实现系统 reboot
。而当在2秒内连续收到超过7次这个信号,那么systemd将会不顾一切的立即强制重启。
chvt
通常情况下,systemd
运行于 tty1
,桌面环境运行于 tty2
。而部分桌面环境(例如 KDE
)运行时可能会屏蔽切换 tty
的快捷键(Ctrl+Alt+Fn
),可以通过在终端执行 chvt
来实现这一目的。
例如切换至tty6:
|
|
systemd-analyze
systemd-analyze
是 systemd
提供的用于调试系统启动过程和 systemd
系统管理器自身状态的工具。
详见 systemd-analyze(1) — Arch manual pages
系统启动过程
|
|
- 用于显示如下信息
- 系统在进入引导之前,固件加载所用时间
- 系统在内核启动之前,引导加载程序所用时间
- 系统在启动第一个用户态进程(init,也就是systemd)之前,内核启动所用时间
- 系统可被使用前,系统用户空间初始化所用时间
我的设备的真实输出情况:
|
|
展示在系统启动过程中,位于关键点上的单元的启动情况。
当在启动过程中,某个单元若未启动成功,则过程将被阻塞而无法继续进行,那么这个单元将视为关键点。
其中 @
后的时间为该单元启动时的绝对时间点,+
后的时间为该单元启动时所使用的时间。
我的设备的真实输出情况:
|
|
展示目前正在活动中的单元,按启动所花费的时间降序排列。
我的设备的部分真实输出情况:
|
|
输出一张名为 plot.svg
的图像,其上详细展示了系统的启动过程,能够表现出单元的启动时刻、完成时刻、启动花费时长以及可能的依赖关系。
我的设备的部分真实输出情况:
...