添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

1. SysRq介绍

我第一次接触到SysRq是由于硬件同事调试时突然发现串口打印了HELP信息,还以为软件出问题了,我就去了解了一下SysRq。而我真正用上SysRq是为了破解一个禁止了所有命令的系统……(很有帮助哈哈)。

SysRq是Linux提供的一个“Magic System Request Key”,它可以在系统出现故障的时候协助恢复和调试系统。只要你的虚拟终端或串口还可以接收键盘输入(系统还能响应键盘的按键中断),SysRq就可用,你可以借助它来查看当时的内存、进程状态等信息,而不是直接强行拔掉电源重启系统。

SysRq能做的事情看HELP就知道了:

[16037.132214] SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) 
kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) 
show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) 
unraw(r) sync(s) show-task-states(t) unmount(u) show-blocked-tasks(w) dump-ftrace-buffer(z)

2. SysRq的用法

2.1 启用SysRq

首先要确保内核打开了CONFIG_MAGIC_SYSRQ配置项,这样SysRq的底层处理才可用。
另外内核中有一个宏定义SYSRQ_DEFAULT_ENABLE,表示系统默认情况下是否启用SysRq功能键。当然,不管这个值是不是yes,你都可以通过proc文件系统来开启或关闭SysRq键:
查看当前SysRq是否被开启(0表示关闭):

# cat /proc/sys/kernel/sysrq

开启SysRq:

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

也可以使用sysctl命令:

# sysctl -w kernel.sysrq=1
kernel.sysrq = 1

实际上sysctl这条命令就是通过修改/proc/sys/kernel/sysrq来生效的。可以把“kernel.sysrq = 1”设置到/etc/sysctl.conf中,使SysRq在下次系统重启仍生效。

上面说0表示完全关闭SysRq,1表示使能SysRq的所有功能,还可以设置成其他数字来选择开启部分功能,可参考内核里的Documentation/sysrq.txt。
SysRq支持的所有功能列表及相应的handler见drivers/tty/sysrq.c中静态数组sysrq_key_table[]的定义,当然,也可以通过下面提到的SysRq的help信息了解到。

2.2 使用SysRq

我们可以直接通过按键的方式或者通过写/proc/sysrq-trigger的方式来触发SysRq的操作。SysRq支持的操作可参考下面的HELP输出:

# echo > /proc/sysrq-trigger
[16037.132214] SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) show-blocked-tasks(w) dump-ftrace-buffer(z)

即, “SysRq键+一个字母” 来触发一个操作,例如 SysRq + t 打印所有任务的状态。

那么如何产生一个SysRq键呢?

  • 在Ubuntu下,图形界面环境不能使用SysRq,需进入文本虚拟终端环境(Ctrl+Alt+F1从图形桌面切换到虚拟终端,Alt+F7可切回来),然后同时按下Alt和Print Screen键以及相应的字母键。
  • 在嵌入式设备上,通过串口工具也可以触发SysRq,如果使用SecureCRT,则同时按下Alt和Print Screen键,会出现上述HELP,然后紧接着按下某个字母。如果使用teraTerm,则点击菜单中的Control->Send Break,会出现上述HELP,然后紧接着按下某个字母。

也可以不通过按键,而是写/proc/sysrq-trigger的方式,用法形如:

echo c > /proc/sysrq-trigger

即,向sysrq-trigger写入相应的字母即可。并且,无论/proc/sys/kernel/sysrq是什么值,这种方式都是可用的。

3. SysRq有什么用

从上述HELP信息就能看出来SysRq都能干什么,在Documentation/sysrq.txt中也有详细介绍。例如,在系统卡住或出现其他异常但还没完全死掉(没有panic或触发watchdog)时,可以人为地制造OOM或panic,看看当前内核在干什么。下面这篇文章对SysRq的使用场景有较全面的介绍和举例,贴在这里供参考:
https://www.ibm.com/developerworks/cn/linux/l-cn-sysrq/

我上面提到了sysrq的handlers定义的代码位置,如果需要,你甚至可以添加自定义的操作。

sysrq key是什么 sysrq key是一组kernel在任何时候都可以响应的组合热键。 在嵌入式设备上我们一般没法使用组合按键,而是通过访问proc文件来发送command给kernel。 sysrq的enable需要配置Magic SysRq key (CONFIG_MAGIC_SYSRQ)。 /proc/sysrq-trigger 操作该目录来触发对应的功
CentOS5.4  Linux 2.6.18-164.el5 执行  echo 1 > /proc/sys/kernel/sysrq  开启魔术键, 若要永久生效则需修改配置文件 /etc/sysctl.conf 里面的 kernel.sysrq = 0 置为1重启即可。 比较常用的组合键为: alt + sys rq + m,打印出内存信息,alt + sysrq + b 重启系统,
Linux Magic System Request Key Hacks Documentation for sysrq.c *  What is the magic SysRq key? It is a 'magical' key combo you can hit which the kernel will respond to regardless of whatever else it
本课程中所说的组件(Component),是指一个大型系统中,某一个可以独立工作的、封装完整的组成部分。在微服务架构中,组件实际上就代表着微服务本身,或者说单个微服务。以下将其称为“单服务测试”(Single-service Test)。 这个测试的实质,就是将一个微服务与其所依赖的所有其他服务或资源全部隔离开,从该服务外部“用户”的角度来审视服务能否提供预期的输出。 这样做有很多好处:通过把...
这是一组“魔术组合键”,只要内核没有被完全锁住,不管内核在做什么事情,使用这些组合键能即时打印出内核的信息。 使用SysRq组合键是了解系统目前运行情况的最佳方式。如果系统出现挂起的情况或在诊断一些和内核相关,比较怪异,比较难重现的问题的时候,使用SysRq键是个比较好的方式。 怎么打开和关闭SysRq组合键? 为了安全起见,在红帽企业版Lin...
匿名答题,发表于2014年,此外没有留下任何多余信息。 2年躺赚200万,相当于普通程序员10年的工资。没想到Pyhon这么强大,怪不得有人说“除了不会生孩子,Python什么都会。” Python能够这么火其中一个重要的原因是数据分析带起来的。Python的优点有很多,要是能运用到工作中,会发现工作的效率大大提升,当然涨薪也是再正常不过的事情。 互联网公司很多人都喜欢用Python.