nvme fstrim 导致 Linux 上崩溃,使用 systemctl 禁用并没有帮助

nvme fstrim 导致 Linux 上崩溃,使用 systemctl 禁用并没有帮助

我有一个从 M2 nvme 磁盘启动的 Linux(Ubuntu 18,内核 4.15)桌面。

每周一次,它会在午夜左右崩溃。 /var/log/syslog.* 的相关日志文件输出如下:

7 月 16 日 00:00:00rabbitcruncher systemd[1]:开始丢弃未使用的块...

7月16日00:00:00rabbitcruncher内核:[559644.954267] nvme 0000:41:00.0:AMD-Vi:记录事件[IO_PAGE_FAULT域=0x0014地址=0x0000000000000000标志=0x0000]

7 月 16 日 00:00:00rabbitcruncher 内核:[559644.975805] nvme nvme0:异步事件结果 00010300

7 月 16 日 00:00:30rabbitcruncher 内核:[559675.338834] nvme nvme0:控制器已关闭;将重置:CSTS=0x3,PCI_STATUS=0x1010

7月16日00:00:31rabbitcruncher内核:[559675.621182] nvme 0000:41:00.0:AMD-Vi:记录事件[IO_PAGE_FAULT域=0x0014地址=0x0000000000000000标志=0x0000]

7 月 16 日 00:01:01rabbitcruncher 内核:[559706.346300] nvme nvme0:控制器已关闭;将重置:CSTS=0x3,PCI_STATUS=0x1010

7 月 16 日 00:01:01rabbitcruncher 内核:[559706.378641] nvme nvme0:识别命名空间失败

7 月 16 日 13:39:24rabbitcruncher systemd-fsck[962]:/dev/nvme0n1p1:12 个文件,1186/130812 个集群

7 月 16 日 13:39:24rabbitcruncher 内核:[1.052853] nvme nvme0:pci 函数 0000:41:00.0

7 月 16 日 13:39:24rabbitcruncher 内核:[1.285806] nvme0n1:p1 p2

7 月 16 日 13:39:24rabbitcruncher 内核:[5.036910] EXT4-fs(nvme0n1p2):使用有序数据模式安装的文件系统。选项:(空)

7 月 16 日 13:39:24rabbitcruncher 内核:[5.318742] EXT4-fs(nvme0n1p2):重新安装。选择:errors=remount-ro

我理解“丢弃未使用的块”意味着Linux正在尝试运行fstrim。但是,我已经使用 systemctl 禁用了 fstrim,但它仍然发生!

systemctl 状态 fstrim.service

● fstrim.service - 丢弃未使用的块

已加载:已加载(/lib/systemd/system/fstrim.service;静态;供应商预设:已启用)

活跃:不活跃(死亡)

我不知道如何解决这个问题。有人可以提供建议吗?

答案1

你的乌班图kvm正在虚拟机内运行AMD-Vi所以它不应该运行fstrim

fstrim服务运行在timer这样的基础上root

rm /var/lib/systemd/timers/stamp-fstrim.timer
systemctl stop fstrim.service fstrim.timer
systemctl disable fstrim.service fstrim.timer
systemctl mask fstrim.service fstrim.timer

答案2

您的问题似乎与此有关描述每次 TRIMming 被触发时的崩溃fstrim.timer。这似乎是最近的一个内核问题,在 AMD 上可以通过它来规避iommu=soft(我找到了处方这里关于原因没有更多详细信息) - 根据 NVME SSD 的最佳实践,您现在可以fstrim.timer再次启用 M.2 NVME 磁盘。

我在英特尔上遇到了(我想是)同样的问题 - 我报告了它这里- 以及我如何回避这个问题(intel_iommu=pt,这是英特尔的等效项iommu=soft)。

一旦我确定问题涉及 IOMMU,我就开始寻找改变其行为的方法;这就是我发现的这里关于配置主机进行 PCI 直通的最佳实践的 Red Hat 文档 - 一个稍微相关的问题 - 提到intel_iommu=pt它,对我来说解决了问题。

我目前不知道这种设置的副作用(如果有的话)。

相关内容