我有一台通过 SSH 远程管理的服务器,由于各种原因,需要重新启动。但是,当我尝试这样做时,shutdown
在发送消息后几乎立即进入不间断睡眠状态。
$ ps aux | grep 'shutdown'
root 4754 0.0 0.1 1888 720 ? D 07:26 0:00 shutdown -r 0 w
我目前无法物理访问该计算机。我该怎么办?服务器仍在响应,我仍然可以登录。
答案1
状态 D 不是“死亡”,而是被阻塞并等待磁盘 IO。
类似“reboot -n -f”这样的命令更有力,可能有用。您有文件系统问题吗?shutdown 命令在告诉 init 关闭之前会写入 wtmp 条目。
答案2
使用以下方法启用 Magic SysRq 键:
echo "1" > /proc/sys/kernel/sysrq
并按照以下步骤进行干净重启:
- Alt + SysRq + e
- Alt + SysRq + u
- Alt + SysRq + i
- Alt + SysRq + b
答案3
shutdown
可能正在等待写入类似内容/dev/initctl
——用来strace -p 4754
查看它挂在哪里,然后修复任何损坏的东西。
答案4
如果有(过时的)NFS 挂载或服务器连接到 SAN,我曾见过关机挂起的情况。以下是一份清单:
- 您是否还可以看到所有磁盘挂载
df -h
(或以其他方式访问这些挂载)? shutdown
除了州内之外,还有其他流程吗D
?- 是否
dmesg
返回一些有关 I/O 的信息,或者是否有一个小的内核恐慌在等着你? - 如果有使用某些 SAN/NFS 挂载的进程,您能否手动停止这些进程,验证
lsof
该挂载上没有打开任何文件,然后再验证umount
该挂载? - 如果
btrace
安装了,会btrace /your/disk
返回一些东西吗?
如果所有其他方法都失败了,@quanta 提供的 SysRq 节应该可以起作用,但首先要确保有人可以在服务器因某种原因无法正常启动时亲自照看服务器。