笔记本电脑进入睡眠模式几个小时后,当我尝试恢复会话时出现以下错误:
交换设备上的读取错误
发生这种情况后,登录屏幕需要大约 30 秒才能加载。登录后,屏幕会一秒钟内空白一两次,我的程序都不再打开。我收到“检测到系统问题”提示。当我点击“发送报告”时,会弹出另一个通知,内容为:
抱歉,程序“Xorg”意外关闭。您的计算机没有足够的可用内存来自动分析问题并向开发人员发送报告。
到目前为止,我尝试过的方法是增加可用的交换空间。最初大约有 2 GB,我创建了另一个 9 GB 的交换文件。这没有帮助。崩溃后占用的交换空间(根据 swapon 命令)始终在 170MB 左右。
当我恢复会话时,直到交换设备上的读取错误为止的 DMESG 如下:
[64046.474054] ACPI:低级恢复完成 [64046.474162] ACPI:EC:EC 已启动 [64046.474162] PM:恢复平台 NVS 内存 [64046.475139] 启用非启动 CPU ... [64046.475196] x86: 启动 SMP 配置: [64046.475196] smpboot:启动节点 0 处理器 1 APIC 0x2 [64046.475663] 缓存:父 CPU1 不应处于休眠状态 [64046.475859] CPU1 已启动 [64046.475910] smpboot:启动节点 0 处理器 2 APIC 0x4 [64046.476330] 缓存:父 cpu2 不应处于休眠状态 [64046.476506] CPU2 已启动 [64046.476539] smpboot:启动节点 0 处理器 3 APIC 0x6 [64046.477071] 缓存:父 CPU3 不应处于休眠状态 [64046.477255] CPU3 已启动 [64046.477274] smpboot:启动节点 0 处理器 4 APIC 0x1 [64046.477721] 缓存:父 cpu4 不应处于休眠状态 [64046.477922] CPU4 已启动 [64046.477947] smpboot:启动节点 0 处理器 5 APIC 0x3 [64046.478371] 缓存:父 cpu5 不应处于休眠状态 [64046.478571] CPU5 已启动 [64046.478591] smpboot:启动节点 0 处理器 6 APIC 0x5 [64046.479018] 缓存:父 cpu6 不应处于休眠状态 [64046.479229] CPU6 已启动 [64046.479247] smpboot:启动节点 0 处理器 7 APIC 0x7 [64046.479675] 缓存:父 cpu7 不应处于休眠状态 [64046.479899] CPU7 已启动 [64046.485913] ACPI: 从系统睡眠状态 S3 唤醒 [64046.639206] ACPI:EC:事件已解除阻止 [64046.639711] sd 2:0:0:0:[sda] 启动磁盘 [64046.873289] usb 1-11:使用 xhci_hcd 重置全速 USB 设备编号 2 [64046.976869] ata4:SATA 链接断开(SStatus 4 SControl 300) [64046.976892] ata2:SATA 链接断开(SStatus 4 SControl 300) [64047.149289] usb 1-6:使用 xhci_hcd 重置高速 USB 设备号 40 [64047.437370] psmouse serio1:synaptics:查询最大坐标:x [..5660],y [..4570] [64047.476302] psmouse serio1:synaptics:查询最小坐标:x [1364..],y [1284..] [64047.922603] OOM 杀手已启用。 [64047.922605] 重新启动任务...完成。 [64047.928727] thermal thermal_zone1:无法读取热区(-61) [64047.930036] 蓝牙:hci0:Bootloader 修订版 0.0 构建 2 2014 年第 52 周 [64047.935036]蓝牙:hci0:设备修订版为 5 [64047.935037]蓝牙:hci0:安全启动已启用 [64047.935038]蓝牙:hci0:OTP 锁已启用 [64047.935038]蓝牙:hci0:API 锁已启用 [64047.935039]蓝牙:hci0:调试锁已禁用 [64047.935040] 蓝牙:hci0:最低固件版本 2014 年 10 月 1 日 [64047.935042]蓝牙:hci0:找到设备固件:intel/ibt-11-5.sfi [64047.944372] PM:暂停退出 [64048.050329] 交换设备上的读取错误(8:0:1543400288) [64048.460888] [drm] RC6 已开启
如果需要任何其他信息,请告诉我。
答案1
您当前使用的 Ubuntu 18.04 内核缺少一个相当重要的错误修复。
上游 Linux 内核版本 4.16.8 中已经修复了这个问题。(挂起错误实际上在内核版本 4.15 中开始出现)。Ubuntu 只需要从上游挑选这个小补丁。该错误经常导致 Xorg 在挂起后立即崩溃,即它导致整个图形登录会话崩溃。
注意这个错误经常发生没有显示Read-error on swap device
。大多数情况下,内核日志中没有错误。(少数情况下,它显示EXT4-fs error
和Buffer I/O error
)。此外,这些错误消息可能是由硬件故障引起的。诊断此问题时,请关注其他更明显的细节。
该 Ubuntu 错误的末尾提供了一个测试内核,即在此评论中:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1776887/comments/5
到目前为止,还没有人报告使用 Ubuntu 测试内核暂停的结果。 如果有人能报告成功,这可能会鼓励 Ubuntu 开发人员最终修复错误。但我可能错了,我不能 100% 确定是什么阻碍了这一点。
还有一种已知的解决方法。如果您配置内核命令行以包含选项scsi_mod.scan=sync
,则可以避免崩溃。
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1776887
已确认上游错误会影响 Ubuntu 用户[1]。根据修复提交(见下文),最常见的症状是当笔记本电脑从系统睡眠状态唤醒时,Xorg/Xwayland 会崩溃,即整个 GUI 会消失。错误发生的频率被描述为每隔几天一次[2]。
[1] 例如,该用户确认了该错误以及非常具体的解决方法: https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/1760450/comments/11
[2] 例如以下崩溃日志: https://bugzilla.redhat.com/show_bug.cgi?id=1553979#c23
这是 blk-core.c 中的一个错误。它并不特定于任何一个硬件驱动程序。从技术上讲,挂起错误是由 SCSI 核心触发的 - 它由所有 SATA 设备。
此次提交还包含一个测试,可以快速可靠地证明可怕的错误存在。
我猜只有当您在 NVMe 上有 root 权限时,您才可能避免此错误。避免 Xorg 崩溃的另一种方法是,如果您不使用所有 RAM,那么就不会产生导致 Xorg 冷页面被交换的压力。此外,如果您立即暂停并恢复,则不会重现 Xorg 崩溃。(这一度让我的测试很沮丧,它只在午餐时间让系统暂停后触发 :)。
修复:“阻止:不要在任何地方使用可中断等待”
在内核 4.17 中: https://github.com/torvalds/linux/commit/1dc3039bc87ae7d19a990c3ee71cfd8a9068f428
4.15.0-24.26(ubuntu 18.04)中缺少修复: https://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/bionic/tree/block/blk-core.c?id=Ubuntu-4.15.0-24.26#n856
也就是说,这个 bug 仍然存在于 Ubuntu 源包 linux-4.15.0-24.26(和 4.15.0-23.25)中。我附上了已知会发生此 bug 的系统的硬件详细信息(lspci-vnvn.log)。
问候艾伦
解决方法:使用内核参数:scsi_mod.scan=sync