从睡眠状态唤醒时Ubuntu 18.04错误:交换设备上的读取错误

笔记本电脑处于睡眠模式几个小时后,当我尝试恢复会话时出现以下错误:

交换设备上的读错误

登录屏幕加载发布此事件大约需要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] cache:parent cpu1不应该正在hibernate
 [64046.475859] CPU1已启动
 [64046.475910] smpboot:引导节点0处理器2 APIC 0x4
 [64046.476330] cache:parent cpu2不应该正在hibernate
 [64046.476506] CPU2已启动
 [64046.476539] smpboot:引导节点0处理器3 APIC 0x6
 [64046.477071]缓存:父cpu3不应该正在hibernate
 [64046.477255] CPU3已启动
 [64046.477274] smpboot:引导节点0处理器4 APIC 0x1
 [64046.477721]缓存:父cpu4不应该正在hibernate
 [64046.477922] CPU4已启动
 [64046.477947] smpboot:引导节点0处理器5 APIC 0x3
 [64046.478371]缓存:父cpu5不应该正在hibernate
 [64046.478571] CPU5已启动
 [64046.478591] smpboot:引导节点0处理器6 APIC 0x5
 [64046.479018]缓存:父cpu6不应该hibernate
 [64046.479229] CPU6已启动
 [64046.479247] smpboot:引导节点0处理器7 APIC 0x7
 [64046.479675]缓存:父cpu7不应该正在hibernate
 [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 build 2 week 52 2014
 [64047.935036]蓝牙:hci0:设备版本为5
 [64047.935037]蓝牙:hci0:启用安全启动
 [64047.935038]蓝牙:hci0:启用OTP锁定
 [64047.935038]蓝牙:hci0:启用API锁定
 [64047.935039]蓝牙:hci0:禁用调试锁定
 [64047.935040]蓝牙:hci0:最低固件版本2014年1周10
 [64047.935042]蓝牙:hci0:找到设备固件:intel / ibt-11-5.sfi
 [64047.944372] PM:暂停退出
 [64048.050329]交换设备上的读取错误(8:0:1543400288)
 [64048.460888] [drm] RC6上

如果需要任何其他信息,请告诉我。

您当前使用的Ubuntu 18.04内核缺少一个相当重要的错误修复程序。

对此的修复已经出现在上游Linux内核版本4.16.8中。 (暂停bug有效地开始在内核版本4.15中发生)。 Ubuntu只需从上游挑选这个小补丁。 该错误经常导致Xorg在挂起后立即崩溃,即它崩溃了整个图形登录会话。

请注意,此错误经常发生, 而不会 Read-error on swap device显示Read-error on swap device 。 大多数情况下,内核日志中没有错误。 (有几次,它显示了EXT4-fs errorBuffer I/O error )。 此外,这些错误消息可能是由硬件故障引起的。 在诊断此问题时,请关注其他更明确的细节。

在这个Ubuntu bug的末尾有一个测试内核,即在这个评论中: https : //bugs.launchpad.net/ubuntu/+source/linux/+bug/1776887/comments/5

到目前为止,没有人通过Ubuntu测试内核报告他们的结果。 可能是因为有人可以报告成功,它会鼓励Ubuntu开发人员最终包含错误修复。 我可能是错的,我不是百分之百确定是什么阻碍了这一点。

还有一个已知的解决方法。 如果将内核命令行配置为包含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设备都使用它。

提交还包括一个测试,可以快速可靠地certificate存在可怕的错误。

我猜你只有在NVMe上拥有root权限才能避免这个bug。 另一种不打击Xorg崩溃的方法是,如果你不使用所有的RAM,那么就没有压力导致Xorg的冷页被交换。 此外,如果您立即暂停+恢复,则不会重现Xorg崩溃。 (这使我的测试在某一点上受挫,它只是在系统暂停午餐后才触发:)。

修复:“阻止:不要在任何地方使用可中断的等待”

在内核4.17中: https : //github.com/torvalds/linux/commit/1dc3039bc87ae7d19a990c3ee71cfd8a9068f428

在内核4.16.8中: https ://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/ ? h = linux-4.16.y & id = 7859056bc73dea2c3714b00c83b253d4c22bf7b6

缺乏修复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)中。 我附加了已知此错误发生的系统的硬件详细信息(lspci-vnvn.log)。

关心艾伦

变通方法:使用内核参数:scsi_mod.scan = sync