您的位置:首页 > 其它

利用 SysRq 键排除和诊断系统故障

2011-02-26 10:24 281 查看
永久生效在/etc/sysctl.conf里增加:

kernel.sysrq=1

# cat /proc/sys/kernel/sysrq
1

问在只有 shell,init、halt、shutdown 等命令都不工作的情况下如何重启系统。答案就是 SysRq,通过 SysRq – B 来完成系统的重启。

SysRq 键(与 PrintScreen在一个键上)

(1)Alt-SysRq-R,然后Ctrl-Alt-Backspace,如果无效,则依次采用如下步骤

(2)Alt-SysRq-S       保存

(3)Alt-SysRq-E    终止所有进程

(4)Alt-SysRq-I     杀死尚未终止的进程

(5)Alt-SysRq-U       umount

(6)Alt-SysRq-B       reboot,O 便是关机

早期的 SysRq 只支持键盘操作。要使用 SysRq,必须直接对主机进行键盘操作。要想执行 SysRq-B
来重启系统,只能通过直接键盘操作 Alt – SysRq – B 来完成(这里的 B 仅指 B 按键,不区分大小写)。

kernel
2.5.64 上的一个 patch 增加了 /proc/sysrq-trigger 接口,使得用户可能通过 /proc 接口来进行 SysRq
操作,换而言之,在现今大部分构建在 2.6 内核上的发行版,对主机键盘的物理接触已经不再是 SysRq
的必要条件。用户只需要登录到系统上,就可以直接使用 echo “ b ” > /proc/sysrq-trigger
来重启系统。在下文中,为描述的简洁,SysRq-<?> 均代表 Alt-SysRq-<?> 或者 echo “ ? ”
> /proc/sysrq-trigger 。

众所周知,系统挂起的很多时候 ssh 登录也未必响应,在缺乏对主机物理操作条件下,/proc/sysrq-trigger
也因为无法获取登录 shell 而无法操作。于是出现了一个名为 sysrqd 的开源项目,它允许通过网络来直接来触发 SysRq 。该程序只有
300 行左右代码,监听 TCP 端口 4094,通过自定义密码验证过后,即可对 /proc/sysrq-trigger
进行操作。但是由于此程序在用户空间实现,在系统挂起时该程序的可用性,以及其安全性均受到广泛质疑。其实如果这个服务做到内核空间,以类似响应 ARP

形式进行处理,再加上合理的认证方式,或许在大多数系统挂起的时候可以起到更加实际的作用。当然,在现代服务器的远程管理模块日趋先进的前提下,是否能通
过网络来触发 SysRq 好像并不是那么重要。

这个 SysRq 序列是 R-E-I-S-U-B 。要知道,该序列早在 SysRq 首次于 Linux 实现的 2.1.43 内核中就存在了。它基本等价于 reboot 命令,

会依次停止系统上运行的进程,回写磁盘缓冲区,再安全的重启系统。

所以,R-E-I-S-U-B 这个序列的推荐使用方式是:R – 1 秒 – E – 30 秒 – I – 10 秒 – S – 5 秒 – U – 5 秒 – B,而不是一气呵成地按下这六个键

busier倒过来看就行了。

SysRq 定义了一组与结束进程相关的序列:E-I-K-F,我们可以用它们来恢复系统挂起。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: