我正在运行无头 Ubuntu 服务器作为媒体服务器。由于我很少需要访问数据,因此我会在系统空闲时将其挂起。该命令systemctl suspend
用于挂起系统。
这在 Ubuntu 20.04 LTS 上运行得很好,但自从升级到 22.04 LTS 后,suspense 就完全不起作用了。注意:升级之前,我在这里描述的问题也很少发生。
我面临的问题:运行命令后,屏幕变黑(如果已连接)和/或 ssh 会话终止。硬盘似乎断电了,但系统风扇仍在旋转。然后服务器变得无响应,对 WOL 命令甚至电源按钮都无反应。我无法再唤醒系统。作为最后的手段,我必须按住电源按钮 5 秒钟才能切断电源并重新启动服务器。
在查阅了大量文档后,我现在不知道如何进一步调试该问题。是否有任何我可以遵循的调试程序?是否有任何日志可以检查错误?有谁遇到过类似的问题?
更多细节:
- 系统运行的是 Ubuntu 22.04 LTS,内核版本
5.15.0-76-generic
- BIOS 中激活了 S3 暂停/STR
- 经过无数次尝试,终于有一次成功了,而且暂停正确,所以这似乎是可能的,但目前看来只是靠运气
- 按照某些线程中的建议更改为较旧的内核(
5.4.0-153-generic
)并按描述进行操作这里导致系统无法启动,所以我不得不恢复
编辑1:根据要求,我在此处发布了输出journalctl --grep='suspend|sleep' --no-pager --since="-1hour"
:https://pastebin.com/izdBMWmv
编辑2journalctl
:删除 systemd 服务后该命令的更多输出autosuspend
:https://pastebin.com/T5fwcfpK
编辑3:命令的输出for s in "0000:03:00" "0000:05:00"; do lspci -nnk -s "$s"; done
:https://pastebin.com/eEUtBfcM
答案1
如何调查?
您需要查看系统在挂起/睡眠时后台发生的情况...您可以先使用journalctl
以下命令检查相关的系统消息:
journalctl --grep='suspend|sleep' --no-pager --since="-1week"
您可以更改--since="-1week"
为仅显示过去七天的消息,以显示过去一天--since="-1day"
或过去一小时--since="-1hour"
...等等。并且--grep='suspend|sleep'
(如果模式全部为小写,则不区分大小写suspend
) 将仅显示包含或的消息,sleep
而--no-pager
将禁用分页器行为并立即打印输出,从而使您可以轻松地通过单个操作复制整个输出。
如何扩大你的调查?
journalctl
可以通过在选项中添加更多相关搜索词来扩展搜索/输出,--grep=
这些搜索词用|
(分隔或者)正则表达式运算符,例如:
journalctl --grep='suspend|sleep|acpi' --no-pager --since="-1hour"
还可以指定消息的优先级,例如打印优先级消息4
(警告)以及更为关键的“emerg”(0)、“alert”(1)、“crit”(2)、“err”(3)、“warning”(4)”,你可以像这样使用它:
journalctl --priority=4 --no-pager --since="-1hour"
等等 ...
您的日志揭示了什么?
第 #1 期
在您的日志中,/opt/autosuspend/bin/autosuspend
似乎有一个 Python 脚本试图from autosuspend import main
导入系统 Python 报告不存在的模块(未安装)ModuleNotFoundError: No module named 'autosuspend'
...相关行是:
Jul 16 23:30:03 homse1 autosuspend[1292]: File "/opt/autosuspend/bin/autosuspend", line 5, in <module>
Jul 16 23:30:03 homse1 autosuspend[1292]: from autosuspend import main
Jul 16 23:30:03 homse1 autosuspend[1292]: ModuleNotFoundError: No module named 'autosuspend'
例如,在升级带有较新系统 Python 版本的 Ubuntu 版本后,可能会发生这种情况...例如,请参见升级到 22.04.2 后的 python3.8 和 pip
因此,作为解决方法,您可能首先想尝试:
python3 -m pip install -U autosuspend
或者sudo
如果全局安装(取决于你的脚本如何运行)。
第 #2 期
在您的日志中,两个 PCI 控制器/插槽似乎未完全符合系统挂起/睡眠要求...相关行如下:
Jul 17 22:34:48 homse1 kernel: pci 0000:03:00.0: async suspend disabled to avoid multi-function power-on ordering issue
Jul 17 22:34:48 homse1 kernel: pci 0000:03:00.1: async suspend disabled to avoid multi-function power-on ordering issue
Jul 17 22:34:48 homse1 kernel: pci 0000:05:00.0: async suspend disabled to avoid multi-function power-on ordering issue
Jul 17 22:34:48 homse1 kernel: pci 0000:05:00.1: async suspend disabled to avoid multi-function power-on ordering issue
因此,您需要进一步调查这些是什么以及它们使用了哪些内核模块/驱动程序,方法是lspci -nnk -s
逐个或一次全部运行命令,如下所示:
for s in "0000:03:00" "0000:05:00"; do lspci -nnk -s "$s"; done
和你的输出:
03:00.0 SATA controller [0106]: JMicron Technology Corp. JMB363 SATA/IDE Controller [197b:2363] (rev 03)
Subsystem: Gigabyte Technology Co., Ltd Motherboard [1458:b000]
Kernel driver in use: ahci
Kernel modules: ahci
03:00.1 IDE interface [0101]: JMicron Technology Corp. JMB363 SATA/IDE Controller [197b:2363] (rev 03)
Subsystem: Gigabyte Technology Co., Ltd Motherboard [1458:b000]
Kernel driver in use: pata_jmicron
Kernel modules: pata_jmicron, pata_acpi
05:00.0 SATA controller [0106]: JMicron Technology Corp. JMB363 SATA/IDE Controller [197b:2363] (rev 02)
Subsystem: Gigabyte Technology Co., Ltd Motherboard [1458:b000]
Kernel driver in use: ahci
Kernel modules: ahci
05:00.1 IDE interface [0101]: JMicron Technology Corp. JMB363 SATA/IDE Controller [197b:2363] (rev 02)
Subsystem: Gigabyte Technology Co., Ltd Motherboard [1458:b000]
Kernel driver in use: pata_jmicron
Kernel modules: pata_jmicron, pata_acpi
揭示了那些JMicron Technology Corp. JMB363 SATA/IDE 控制器例如,据报告,某些内核存在电源管理问题这里和这里并且该问题也已孤立于pata_acpi
(在您的系统上使用)内核模块为例这里...因此,这可能与防止您的系统进入睡眠状态有关,您可能需要阅读有关此事的链接资源和其他内容,然后进行故障排除,并通过试验例如将pata_acpi
内核模块列入黑名单来查看什么可能对您有用,看看是否有帮助。