我有一个从 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
它,对我来说解决了问题。
我目前不知道这种设置的副作用(如果有的话)。