[原]Linux Magic Key——SysRq(R-E-I-S-U-B)

    很久以前,曾在分析Linux死机故障一文中提到SysRq大法。而有时候,系统发生故障,核心仍在运行,键盘可用,但无法登陆或重启。这时,如果有打开SysRq功能的话,也可以利用SysRq的一些快捷键来实现安全关机的。

一、安全关机的重要性
为了提高性能,Linux 把大量的数据放在内存缓存中,并不是实时同步写入磁盘。只有在手动执行sync 或触发某些条件的情况下,核心才会把内存中的数据回写到物理磁盘。
当故障发生时,可能本地或远端已经无法登陆系统,无法执行重启或关闭的操作。但实际上,大部分情况下,这时的Linux 核心并不一定完全死掉。这时,如果强制关闭电源,内存中的数据将会丢失,甚至导致文件系统损坏。
为了在这样的情况下实现安全关机,我们可以借助SysRq 大法。

二、激活SysRq
默认情况下,安全起见,SysRq 功能是关闭的。(原因?在后面会提到)

引用
# cat /proc/sys/kernel/sysrq
0

要激活SysRq 功能,可执行下面的命令:

# echo "1" > /proc/sys/kernel/sysrq

或修改/etc/sysctl.conf,把下面的设定改为1:

引用
kernel.sysrq = 0

三、常见的SysRq功能键
万一发生故障,而SysRq是打开的,并且键盘是有响应的话(这说明Kernel 没有完全死掉)。就可以使用SysRq大法,在标准的QWERTY键盘中,使用“Alt+SysRq+功能键”的方式调用相关的功能。
可用功能键如下:
点击在新窗口中浏览此图片# vi /usr/share/doc/kernel-doc-2.6.18/Documentation/sysrq.txt

常用下面几个获得系统状态信息:

引用
T 获得进程系统堆栈信息
M 获得内存分配信息
W 获得当前寄存器信息

而用下面几个执行某些操作:

引用
R: Switch the keyboard from raw mode to XLATE mode. 将键盘控制从 X Server 那里抢回来(unRaw)
E: Send the SIGTERM signal to all processes except init.  给所有进程发送 SIGTERM 信号,让他们自己解决善后(tErminate)
I: Send the SIGKILL signal to all processes except init. 给所有进程发送 SIGKILL 信号,强制他们马上关闭(kIll)
S: Sync all mounted file systems (IMPORTANT). 将所有数据同步至磁盘(Sync)
U: Remount all mounted file systems in read-only mode. 将所有分区挂载为只读模式(Unmount)
B: Immediately reboot the system, without un-mounting partitions or syncing. 重启(reBoot)

一般的执行顺序就是R-E-I-S-U-B。
※ 注意,直接执行B命令将强制重启,这时内存中的数据是没有回写到磁盘中的。因此,应尽量用S 同步数据后,才进行reboot的操作。

四、附录
1、那里可以找到SysRq键
SysRq 键通常在键盘的右上角:
点击在新窗口中浏览此图片# echo b > /proc/sysrq-trigger

其效果将与敲入“ALT+SysRq+b” 的作用是相同的。

五、参考资料
Magic SysRq key
/usr/share/doc/kernel-doc-2.6.18/Documentation/sysrq.txt

Asianux 4.0 的拯救模式
使用dd命令协助拯救0磁道损坏的硬盘

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/104185.html

(0)
上一篇 2021年8月25日
下一篇 2021年8月25日

相关推荐

发表回复

登录后才能评论