Linux reboot 命令 'Input/output error' 错误处理
OpenWrt 用 dd 命令刷系统时候,刷新完成后 reboot 命令报 ‘Input/output error’。查了资料估计是硬盘锁死,内核无法从磁盘上读取二进制程序 /sbin/reboot 和 /sbin/shutdown 来执行,所以命令失败。最后使用 /proc/sys/kernel/sysrq 和 /proc/sysrq-trigger 给内核发送命令去重启设置。
先说一下,让设备重启方法,输入下面两个命令就可以让设备重启了。
echo 1 > /proc/sys/kernel/sysrq |
让我们细看这个命令
/proc/sys/kernel/sysrq 和 /proc/sysrq-trigger
当 Linux 系统遇到一些紧急情况时,需要执行一些特殊的操作来解决问题。这些操作通常可以通过按下 Alt + SysRq 组合键来触发系统请求(system request)。但是,在某些情况下,无法使用组合键,例如系统已经崩溃或无法进入交互式 shell。这时,可以使用 /proc/sysrq-trigger 文件来触发系统请求。同时,/proc/sys/kernel/sysrq 参数可以用来控制系统请求按键的响应方式。
在本文中,我们将介绍 /proc/sys/kernel/sysrq 和 /proc/sysrq-trigger,并说明如何使用它们来解决系统问题。
/proc/sys/kernel/sysrq
/proc/sys/kernel/sysrq 是一个内核参数,用于控制系统请求按键的响应方式。通过修改该参数的值,可以启用或禁用不同的系统请求按键。该参数的默认值为 1,表示所有的系统请求按键都是启用的。
以下是 /proc/sys/kernel/sysrq 参数的取值及其含义:
- 0:禁用所有系统请求按键
- 1:启用所有系统请求按键(默认)
- 2:启用仅 REISUB 组合键(用于安全地重新启动系统)
- 3:启用仅 REISU 组合键(用于安全地卸载系统)
要修改 /proc/sys/kernel/sysrq 参数的值,可以使用以下命令:
echo <value> > /proc/sys/kernel/sysrq |
其中,<value> 为参数的取值。
/proc/sysrq-trigger
/proc/sysrq-trigger 是一个特殊的文件,用于触发系统请求。通过写入不同的字符序列到该文件中,可以触发不同的系统请求。
以下是 /proc/sysrq-trigger 文件支持的字符序列及其含义:
- h:显示系统请求的帮助信息
- b:立即重启系统
- c:立即关闭系统
- e:向所有进程发送 SIGTERM 信号,以关闭所有进程并结束会话
- f:立即强制结束所有进程
- i:向所有进程发送 SIGKILL 信号,以立即结束所有进程
- k:向指定进程 ID 发送 SIGTERM 信号,以关闭该进程
- l:显示系统锁的状态
- m:显示当前内存使用情况
- n:显示所有已经分配的内存页的数量
- o:向所有进程发送 SIGKILL 信号,以立即结束所有进程,但不重启系统
- p:显示当前进程的状态
- q:立即强制结束所有
使用方法也是
echo <value> > /proc/sysrq-trigger |
其中,<value> 为参数的取值。