m2硬盘安装ubuntu出现I/O错误: DMAR fault的排查记录(含解决方案)

在旧台式机安装Ubuntu24.04 的过程中,我遇到一个非常棘手的问题:

  1. 第一次安装失败; 安装过程中, 提示io错误
  2. 关机后, 再次安装, 安装成功
  3. 进入系统后, 硬盘灯持续规律闪烁, 频繁出现 I/O 错误、系统卡顿、硬盘灯间隔性闪烁、并伴随 DMAR/IOMMU 报错

最开始遇到这个问题, 我以为是硬盘问题, 更换为 sata硬盘后, 问题消失。似乎从某种程序上证明是此硬盘问题; 随后此”坏硬盘“, 就安静的放在角落; 今天整理物品, 发现这块硬盘, 突然想到, 让ai帮忙分析分析硬盘是什么原因导致的故障, 以后如何避免买到类似的硬盘;

这篇文章记录整个排查过程,希望给未来遇到类似问题的人提供一个可参考的解决思路。


1. 硬件与环境背景

  • 主板:Gigabyte Z97X-UD3H(2014年)
  • CPU:Intel i7-4790K(Haswell)
  • NVMe:YMTC PC300 512GB(支持 HMB,NVMe1.4)
  • 系统:Ubuntu 24.04
  • NVMe 安装在主析的m2硬盘槽位

这是典型的“老主板 + 新 NVMe 控制器”的组合,在 Linux 下非常容易触发兼容性问题。


2. 问题现象

(1)安装 Ubuntu 时随机 I/O 错误

  • 系统安装过程中文件复制中断
  • 安装流程偶尔直接失败
  • 重试偶尔能安装成功

(2)安装成功后,进入系统, 硬盘灯持续规律闪烁

  • 开机后系统明显不顺畅。
  • 复制文件时,会出现卡顿, 此时硬盘灯一直有规律的闪烁;

(3)复制大文件(如 ubuntu.iso 6GB)出现卡顿

  • 传输速度会突然降到零,直到系统无响应。

(4)dmesg 出现 DMAR/IOMMU 报错

DMAR: DRHD: handling fault status reg 2
DMAR: [DMA Write] Request device [01:00.0] fault addr ...
DMAR: write no_pasid

(5) 硬盘smart 检测无异常

使用 smartctl 读取 NVMe 健康状态: smartctl -x /dev/nvme0

SMART overall-health self-assessment: PASSED
Media and Data Integrity Errors: 0
Temperature: 27~31C

这一步至关重要:
硬盘smart信息说明: NVMe 并没有坏。 但是硬盘灯闪烁,似乎是硬盘无法写入, 有故障;


4. 排查思路与定位过程

(1) 没加散热器, 高温导致硬盘进入防御模式

购买并中装置散热器,问题依然存在.

(2) 进入命令行模式, 复制文件, 发现报错

(3) dmsg 中查看 DMAR 错误

从 DMAR 错误入手 → 怀疑 IOMMU(VT-d)

Google 搜索关键字:

DMAR write no_pasid

Device fault VT-d NVMe

Z97 NVMe IOMMU issue

大量报告显示: Z97/H97/B85/X99 等老主板的 IOMMU 对新 NVMe 控制器支持极差。

特别是支持 HMB 的 NVMe,会频繁触发 DMA remapping 错误。

尝试关闭 IOMMU(最终突破)

sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX="intel_iommu=off"
sudo update-grub

重启后

dmesg | grep -i dmar
DMAR: IOMMU disabled

随后系统立刻恢复流畅,所有异常消失。

总结: 软件/兼容性问题,而不是硬盘故障

YMTC PC300 属于新 NVMe 控制器(支持 NVMe1.4 + HMB), 而 Gigabyte Z97 主板发布于 2014 年,BIOS 对新型 DMA 功能支持不完整。

当 Linux 使用 Intel IOMMU 进行 DMA 页表(I/O Page Table)映射时,会触发:

PASID 错误

IOMMU Translation Fault

NVMe DMA 超时

关闭 IOMMU 后,NVMe 直接使用传统 DMA → 完全恢复正常。

结语

这次排查耗费了近五天时间,从怀疑硬盘损坏、到怀疑 BIOS、文件系统、驱动,再到最终定位到 IOMMU 与 NVMe 控制器的不兼容。

最终的解决方法却只是一行:

intel_iommu=off

参考链接