wordpress shell 程序员 开源 centos Android google linux nginx mysql 微软 apache java php Python Ubuntu linux命令 Windows HTML5 Firefox

使用 SysRq 键安全重启挂起的 Linux

最近有台 NFS 服务器挂机,可以 ping 通,但不能 ssh 登陆,也不能通过本地终端登陆,只能重启了。我们一般处理文件服务器这种类型的重启都格外小心,不到迫不得已不会直接硬重启。Linux 运行过程中(为了提高性能)会把大量的数据暂时放在内存缓存中,而不是实时同步写入到磁盘,Linux 根据情况只有在需要(触发某条件)的时候才写入磁盘,所以这个时候挂机,数据还留在内存,没有办法及时写到磁盘,强制断电重启会造成数据不一致、部分数据丢失、文件系统损坏等。

为了在这样的情况下实现安全重启,我们可以利用 SysRq,当然有个条件是,系统虽然罢工停止了对大部分服务的响应,但仍然能处理键盘的中断请求。SysRq (System request) 常被称为 Magic SysRq key,在 Linux 下它被定义为一系列按键组合,之所以说它 magic,是因为它常能在系统挂起、多数服务都无法响应的时候做点事(预定义的操作),而且能在磁盘数据安全的情况下完成重启,除此之外还能捕获一些有用的系统运行信息。

首先确认当前使用的 Linux 内核支持 SysRq:

# grep "CONFIG_MAGIC_SYSRQ" /boot/config-`uname -r`
CONFIG_MAGIC_SYSRQ=y

如果系统默认关闭了 kernel.sysrq 的话,需要打开。为了保证每次系统重启内核参数都生效,建议把配置写到 sysctl.conf 文件里:

# sysctl kernel.sysrq
kernel.sysrq = 0

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

# vi /etc/sysctl.conf
...
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 1
...

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 – 重启系统

需要注意的是这些按键之间有顺序,而且按键之间有时间间隔(因为要等待前一个操作的完成),推荐的时间间隔是 R – 1 秒 – E – 30 秒 – I – 10 秒 – S – 5 秒 – U – 5 秒 – B.

我们通常只在意数据是否安全的同步到了磁盘,所以我们一般只用 S-B 组合,按下 Alt + SysRq + S 后等待 Emergency sync complete 提示,同步完成确认后用 Alt + SysRq + B 立刻重启。

延伸阅读

  • 抱歉,暂无相关内容!

评论