我最近为我的计算机(AMD CPU、nvidia GPU)购买了一块新的三星 870 EVO SSD,之前它运行在三星 860 EVO SSD 上。我在新磁盘上安装了 Ubuntu 20.04。安装过程中没有出现任何问题。我在使用旧 SSD(相同的 Ubuntu 版本)时没有遇到任何问题。系统启动后运行良好(dmesg 中没有任何错误)。但现在我在启动时随机出现这些错误(大约每 10 次启动中出现 1 次):
ata1.00: status: { DRDY }
ata1.00: failed command: READ FPDMA QUEUED
ata1.00: cmd 60/08:70:58:a6:46/00:00:10:00:00/40 tag 14 ncq 4096 in
发生这种情况时,计算机通常无法启动,或者需要很长时间,并且启动后的操作系统无法使用。只需简单重启即可解决问题,然后一切正常。
我尝试过:
- 将我的第一个 870 寄回去并要求更换 -> 新的也有同样的错误。
- 更换了 SATA 电缆并切换了主板上的 SATA 端口 -> 相同。
- Smartctl -t long 没有发现错误。
很多帖子都提到了同样的问题,似乎唯一能提供的解决方案就是禁用 NCQ。据我所知,禁用它会显著降低系统性能,而这正是我想要避免的。考虑到之前的型号一直运行良好,这款新 SSD 可能存在什么问题?
答案1
笔记:下载Samsung Magician
并检查您的 SSD 固件。https://www.samsung.com/semiconductor/minisite/ssd/download/tools/
本机命令队列 (NCQ) 是串行 ATA 协议的扩展,允许硬盘驱动器内部优化接收的读写命令的执行顺序。
编辑sudo -H gedit /etc/default/grub
并更改以下行以包含此额外参数。然后执行sudo update-grub
将更改写入磁盘。重新启动。监控挂起/等,并观察grep -i FPDMA /var/log/syslog*
或dmesg
是否有持续的错误消息。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash libata.force=noncq"
更新#1:
用户设置libata.force=noncqtrim
,其对性能的影响应该小于libata.force=noncq
。将继续监控。