
首先确认当前使用的 linux 内核支持 sysrq:
<code># grep "config_magic_sysrq" /boot/config-`uname -r`</code>
<code>config_magic_sysrq=y</code>
如果系统默认关闭了 kernel.sysrq 的话,需要打开。为了保证每次系统重启内核参数都生效,建议把配置写到 sysctl.conf 文件里:
<code># sysctl kernel.sysrq</code>
<code>kernel.sysrq = 0</code>
<code></code>
<code># sysctl -w kernel.sysrq=1</code>
<code>kernel.sysrq = 1</code>
<code># vi /etc/sysctl.conf</code>
<code>...</code>
<code># controls the system request debugging functionality of the kernel</code>
sysrq 配置好后就可以开始用了。sysrq 安全重启的推荐按键组合是 alt + sysrq + r-e-i-s-u-b,先按下 alt 键和 sysrq 键,然后依次按下 r e i s u b 键(不区分大小写)。这个 r e i s u b 序列组合的意思是:
r – 把键盘设置为 ascii 模式 e – 向除 init 外所有进程发送 sigterm 信号 i – 向除 init 外所有进程发送 sigkill 信号 s – 磁盘缓冲区同步 u – 重新挂载为只读模式 b – 重启系统
需要注意的是这些按键之间有顺序,而且按键之间有时间间隔(因为要等待前一个操作的完成),推荐的时间间隔是:
<code>r</code> – 1 秒 – <code>e</code> – 30 秒 – <code>i</code> – 10 秒 – <code>s</code> – 5 秒 – <code>u</code> – 5 秒 – <code>b</code>。
即使是 magic sysrq 对不 non-interruptible 的 system hang 也没办法。不过 sysrq 在关键时刻能帮上大忙,避免数据不一致和丢失,甚至文件系统损坏。 一般是这么记的 => busier 顺序倒过来,意味着接下去会越来越忙?
我们通常只在意数据是否安全的同步到了磁盘,所以我们一般只用 s-b 组合,按下 alt + sysrq + s 后等待 emergency sync complete 提示,同步完成确认后用 alt + sysrq + b 立刻重启。
原文发布时间为:2013-10-04
本文来自云栖社区合作伙伴“linux中国”