神奇的重启方式
发布于 2008年8月21日
如果您曾经遇到远程服务器上的硬盘驱动器发生故障,您可能还记得在尝试发出以下命令后的感受
# reboot bash: /sbin/reboot: Input/output error # shutdown -r now bash: /sbin/shutdown: Input/output error
显然,您的驱动器存在问题。 这些命令失败的原因是内核无法从磁盘加载 /sbin/reboot
和 /sbin/shutdown
二进制文件以执行它们。
下次启动时,fsck 也许能够纠正磁盘的任何问题,但首先您需要让系统重新启动。 如果您的机器位于托管主机提供商处,那么您可以提交重启工单,但您必须等待某人承担责任。
如果有一种方法可以在不需要访问故障驱动器的情况下要求内核重新启动,那不是很好吗? 嗯,有一种方法,而且非常简单。
“magic SysRq 键”提供了一种通过 /proc 文件系统直接向内核发送命令的方法。 它通过内核编译时选项 CONFIG_MAGIC_SYSRQ 启用,这似乎是大多数发行版的标准配置。 首先您必须激活 magic SysRq 选项
echo 1 > /proc/sys/kernel/sysrq
当您准备好重启机器时,只需运行以下命令
echo b > /proc/sysrq-trigger
这不会尝试卸载或同步文件系统,因此仅在绝对必要时才应使用它,但如果您的驱动器已经发生故障,那么这可能不是问题。
除了重新启动系统之外,sysrq技巧还可用于将内存信息转储到控制台、同步所有文件系统、以只读模式重新挂载所有文件系统、向除init之外的所有进程发送SIGTERM或SIGKILL,或者完全关闭机器,等等。
此外,您可以使用sysctl在系统启动时激活magic SysRq 键,而无需每次都回显到 /proc/sys/kernel/sysrq
(如果支持)
echo "kernel.sysrq = 1" >> /etc/sysctl.conf
如果您想了解更多关于magic SysRq的信息,您可以阅读内核文档中的 sysrq.txt 文件。