![命令失败的根本原因:WRITE FPDMA QUEUED](https://linux22.com/image/184582/%E5%91%BD%E4%BB%A4%E5%A4%B1%E8%B4%A5%E7%9A%84%E6%A0%B9%E6%9C%AC%E5%8E%9F%E5%9B%A0%EF%BC%9AWRITE%20FPDMA%20QUEUED.png)
在配备全新三星 SSD 860 EVO 250GB RVT04B6Q 的全新英特尔 NUC(第 10 代)上,该 SSD 会产生一些 WRITE FPDMA QUEUED 命令失败,如下所示:
Nov 28 21:25:26 ata3.00: exception Emask 0x10 SAct 0x60 SErr 0x400100 action 0x6 frozen
Nov 28 21:25:26 ata3.00: irq_stat 0x08000000, interface fatal error
Nov 28 21:25:26 ata3: SError: { UnrecovData Handshk }
Nov 28 21:25:26 ata3.00: failed command: WRITE FPDMA QUEUED
Nov 28 21:25:26 ata3.00: cmd 61/40:28:00:d7:31/00:00:00:00:00/40 tag 5 ncq dma 32768 out
res 40/00:28:00:d7:31/00:00:00:00:00/40 Emask 0x10 (ATA bus error)
Nov 28 21:25:26 ata3.00: status: { DRDY }
Nov 28 21:25:26 ata3.00: failed command: WRITE FPDMA QUEUED
Nov 28 21:25:26 ata3.00: cmd 61/20:30:40:d7:31/00:00:00:00:00/40 tag 6 ncq dma 16384 out
res 40/00:28:00:d7:31/00:00:00:00:00/40 Emask 0x10 (ATA bus error)
Nov 28 21:25:26 ata3.00: status: { DRDY }
Nov 28 21:25:26 ata3: hard resetting link
Nov 28 21:25:27 ata3: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
Nov 28 21:25:27 ata3.00: supports DRM functions and may not be fully accessible
Nov 28 21:25:27 ata3.00: supports DRM functions and may not be fully accessible
Nov 28 21:25:27 ata3.00: configured for UDMA/133
Nov 28 21:25:27 ata3: EH complete
Nov 28 21:25:27 ata3.00: Enabling discard_zeroes_data
这些会定期发生,每天大约 20 次,而 IO 发生的次数相对较少。到目前为止,Btrfs 文件系统尚未抱怨校验和错误。
那么,这是否只是三星销售质量保证较差的 SSD,可能是电缆损坏,或者是一个更系统的问题 - 例如三星没有在其固件中以符合标准的方式执行命令?
更新 2020-01-09:
全新的替换三星 SSD(同一型号)可产生同样的错误在那个 NUC 中。每次出现此类错误时,CRC_ERROR_COUNT SMART 计数器都会加一。
打开 NUC 显示 SATA 电缆已折叠(参见左下角):
也许这种尖锐的折叠是英特尔在生产过程中故意采用的。但似乎没有必要。而且如果是故意的,为什么只有一折呢?我的意思是,两个比对称更有意义(因为 SSD 位于主板顶部,即集成在顶盖中)。另外,折叠的 45 度方向是否最佳?我不是电气工程师,因此所有这些可能与这个问题完全无关。
重现此错误的一个好方法是使用fio
.我的意思是它也会在正常使用期间发生(例如升级/安装包时),但使用 fio 更容易重现。例子:
fio --rw=randrw --name=lol --bs=128k --direct=1 --filename=/dev/nvme0n1 \
--numjobs=1 --ioengine=libaio --iodepth=32 --refill_buffers
如果您连续运行此命令(例如,连续两次)并且没有看到此错误,那么这很好地表明您的硬件良好且不存在此问题。
答案1
所以我在这里可能是错的,但我没有足够的代表来发表评论,所以这是我的 2 美分。
我有一台配备相同 SSD 的台式机,但出现完全相同的错误。这是由于 AMD SATA 芯片组和三星固件的错误 - 它是 AMD 系统吗?如果是这样,您可以在内核参数中使用 libata.force=noncq 禁用 NCQ。
正如您在智能报告中看到的,CRC_ERROR_COUNT 是受此影响的参数(之一?)。它可能是由 NCQ 和此错误引起的,也可能是由 SATA 电缆故障引起的。所以我会先尝试禁用 NCQ。但这会损害性能。
编辑:尽管如此,我也确实看到英特尔控制器出现了一些问题:https://bugzilla.kernel.org/show_bug.cgi?id=203475#c14