Linux Magic Key----SysRq(R-E-I-S-U-B)

| No Comments | No TrackBacks

来源:http://www.linuxfly.org/post/545/

有时候,系统发生故障,核心仍在运行,键盘可用,但无法登陆或重启。这时,如果有打开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+功能键”的方式调用相关的功能。

linux-sysrq.png

也可参考kernel-doc 包中的说明,例如:

# 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 键通常在键盘的右上角,“print screen”、“SysRq”。

如果是笔记本键盘,可能会与delete或用Fn才能使用。这时,上述的“ALT+SysRq+Key” 将要变成“ALT+Fn+SysRq+Key” 才能达到同样的效果。

2、SysRq 的安全问题
由于SysRq 直接作用于核心,打开该功能后,可能会引起一些安全问题。例如,下面的命令:

# echo b > /proc/sysrq-trigger

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

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

No TrackBacks

TrackBack URL: http://blog.mylover.cn/mt-sources/mt-tb.fcgi/104

Leave a comment

About this Entry

This page contains a single entry by mag published on March 5, 2011 3:41 PM.

squid 3.2.0.5 在 Debian 6 squeeze 下的 configure 参数 was the previous entry in this blog.

在Debian终端中显示中文 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.