linux 强制重启 sysrq,在Linux上,如何启用所有SysRq功能

目的

了解如何启用SysRq功能,以及如何使用通过命令键调用它们。

要求

根权限

启用”CONFIG_MAGIC_SYSRQ”选项编译的Linux内核

困难

简单

约定

#-要求给出linux命令可以直接以root用户身份或通过使用root特权以root特权执行sudo命令

$-要求给出linux命令以普通非特权用户身份执行

介绍

在某些特定情况下,可以使用SysRq组合键将命令直接发送到Linux内核:内核将响应使用以下命令发送的命令command keys立即将其锁定,除非它已完全锁定。各种command keys完成特定任务,并且可以将它们组合在一起以将系统还原到安全状态,或者在无其他操作的情况下获得干净的重新引导:这是我们可以通过reisub顺序。

在本教程中,我们将看到如何使用标准安装来启用所有SysRq功能。Ubuntu 18.04 - Bionic

Beaver作为基础。

SysRq魔术钥匙

的SysRq组合键包含三个可同时按下的键:ALT + SysRq + command key。您可能想知道什么是SysRq键盘上的琴键。假设您使用的是QWERTY键盘,SysRq键对应于print键。

最后,命令键是键盘上的键,在此特殊模式下按下该键将立即向内核发送命令。稍后我们将看到其中一些键以及与它们相关的功能,但是在继续之前,我们必须确保所使用的内核已编译并启用了所需的选项。

CONFIG_MAGIC_SYSRQ内核选项

如上所述,对于SysRq要使用组合键,内核必须已使用CONFIG_MAGIC_SYSRQ选项已启用。在所有主要发行版中通常都是这种情况,但是了解如何检查其状态可能很有用。这是我们可以做到的。我们要知道的第一件事是我们正在使用的内核的版本和名称。获得此信息非常容易,我们只需运行:

$ uname -r

4.13.0-25-generic

如您所知,uname命令用于检索一些系统信息。在这种情况下,我们将其与-r标记,因为我们只想了解kernel release该命令的结果是4.13.0-25-generic:这是我们系统使用的内核的名称。现在,我们可以查看内部/boot相应配置文件的目录:此文件包含编译内核时使用的所有选项。我们可以搜索用于CONFIG_MAGIC_SYSRQ在里面:

$ ls /boot

abi-4.13.0-25-generic initrd.img-4.13.0-25-generic memtest86+_multiboot.bin

config-4.13.0-25-generic memtest86+.bin System.map-4.13.0-25-generic

grub memtest86+.elf vmlinuz-4.13.0-25-generic

如预期的那样,该文件存在:config-4.13.0.25-generic是我们正在寻找的。现在我们有了所需的一切,让我们进行检查:

$ grep -i CONFIG_MAGIC_SYSRQ /boot/config-4.13.0-25-generic

CONFIG_MAGIC_SYSRQ=y

CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x01b6

CONFIG_MAGIC_SYSRQ_SERIAL=y

如第一行所示,该选项CONFIG_MAGIC_SYSRQ已y作为其值,意味着在配置内核时将其设置为内置。其他行代表什么?的CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE选项确实指定了启用的默认功能:该值表示为hexadecimal形式,在这种情况下0x01b6确实对应438以十进制形式。

正如我们将在本教程的后面看到的那样,该值表示默认情况下启用了大多数功能。但是,出于安全原因,大多数发行版都通过键组合禁用了调用。第三种选择对我们来说现在不是很重要:它是关于启用SysRq key在串行。

检查当前的SysRq值

大多数发行版都禁止访问某些SysRq出于安全原因,通过组合键实现功能(但是,如果通过调用,则所有功能始终可用/proc/sysrq-trigger具有root权限)。要检查系统中可用的功能,我们可以运行:

$ cat /proc/sys/kernel/sysrq

176

该命令返回的值为176。如何获得此值,它代表什么?每个值都对应一个特定的函数,如下面的列表所示:

0 - disable sysrq completely

1 - enable all functions of sysrq

2 - enable control of console logging level

4 - enable control of keyboard (SAK, unraw)

8 - enable debugging dumps of processes etc.

16 - enable sync command

32 - enable remount read-only

64 - enable signaling of processes (term, kill, oom-kill)

128 - allow reboot/poweroff

256 - allow nicing of all RT tasks

虽然值0禁用所有SysRq功能和值1启用所有这些,并提供大于1的值,我们可以启用特定的值。如上所述,我们有一个SysRq的价值176。这是从128(允许重新启动和关闭电源)+32(以只读模式重新挂载文件系统的能力)+16,启用同步命令。同样,438从2 + 4 + 16 + 32 + 128 + 256的总和中获得,因此启用了所有相应的功能。

如何更改SysRq值

现在我们知道SysRq价值是,但是我们如何改变它呢?要立即更改此值,我们只需要将所需的值写入/proc/sys/kernel/sysrq文件,通过运行:

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

这样,更改将立即生效,但在重新启动后将无法生存。如何使其持久化?那很简单。在所有linux发行版中都有效的通用解决方案是赋予kernel.sysrq在里面/etc/sysctl.d/99-sysctl.conf文件:

# echo "kernel.sysrq = 1" >> /etc/sysctl.d/99-sysctl.conf

请注意我们如何使用>>重定向运算符:这会将文本附加到文件中,并且不会覆盖它可能已经包含的其他设置。

reisub序列

在所有命令键序列中,reisub可能是最著名的。为了更好地记住此顺序,通常将其用作“抬高大象太无聊”的首字母缩写。这个序列完成什么工作?保持alt+sysrq key,我们继续按顺序按命令键,结果如下:

首先r从切换键盘raw至XLATE模式,e发送一个SIGTERM向所有进程发出信号,以便在可能的情况下以优美的方式关闭它们。之后,我们发送一个SIGKILL按下即可发出信号i,以终止未响应先前信号的其余过程。用s我们尝试同步所有已挂载的文件系统,并立即将所有更改从高速缓存刷新到磁盘。通过使用u我们重新挂载所有文件系统read only模式,最后按b,我们执行系统重启。

的reisub当系统变得非常无响应,并且其他解决方案不足以解决问题时,可以在某些情况下使用序列。但是,构成此序列的命令键只是可用键的一个子集:有关完整列表,您可以查看SysRq内核文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值