SSD 每周一当地时间 00:00 冻结

SSD 每周一当地时间 00:00 冻结

我有这个 SSD:

$ lsscsi --verbose 9
[9:0:0:0]    disk    ATA      Samsung SSD 860  4B6Q  /dev/sdb 
  dir: /sys/bus/scsi/devices/9:0:0:0  [/sys/devices/pci0000:00/0000:00:01.3/0000:01:00.2/0000:02:06.0/0000:07:00.0/ata10/host9/target9:0:0/9:0:0:0]

它通常运行良好,但每周一 00:00 当地时间它都会出现故障。如果计算机在 00:00 开启并运行 Ubuntu 18.04,则每次磁盘访问都会失败几分钟,然后恢复正常。内核消息如下所示:

[33597.552222] ata10.00: exception Emask 0x0 SAct 0x438c0 SErr 0x0 action 0x6 frozen
[33597.552228] ata10.00: failed command: WRITE FPDMA QUEUED
[33597.552236] ata10.00: cmd 61/68:30:b0:a0:7d/01:00:05:00:00/40 tag 6 ncq dma 184320 out
                        res 40/00:01:00:4f:c2/00:00:00:00:00/00 Emask 0x4 (timeout)
[33597.552239] ata10.00: status: { DRDY }
[33597.552294] ata10: hard resetting link
[33598.028219] ata10: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[33598.028480] ata10.00: supports DRM functions and may not be fully accessible
[33598.030650] ata10.00: supports DRM functions and may not be fully accessible
[33598.032509] ata10.00: configured for UDMA/133
[33598.032534] sd 9:0:0:0: [sdb] tag#12 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[33598.032538] sd 9:0:0:0: [sdb] tag#12 Sense Key : Illegal Request [current] 
[33598.032541] sd 9:0:0:0: [sdb] tag#12 Add. Sense: Unaligned write command
[33598.032544] sd 9:0:0:0: [sdb] tag#12 CDB: Read(10) 28 00 01 15 57 88 00 00 38 00
[33598.032548] blk_update_request: I/O error, dev sdb, sector 18175880 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0
[33598.032559] ata10: EH complete
[33598.032642] ata10.00: Enabling discard_zeroes_data

此消息序列以 30 秒的间隔重复 4 次,然后恢复正常。

如果计算机在 00:00 关闭,则在周一第一次打开时会出现问题。 GRUB 从同一磁盘加载正常,但当 Ubuntu 开始加载时,似乎磁盘停止工作,启动挂起。 按下重置后,它正常启动。

什么原因导致如此奇怪的行为?

答案1

您遇到了两个问题之一...

  1. 您的三星 860 SSD 中的固件需要更新。

  2. 您遇到了 NCQ 错误,需要修补。

固件

下载Samsung Magician 这里,并检查您的三星固件。

文件系统检查

让我们检查您的文件系统是否存在错误...

  • 以“试用 Ubuntu”模式启动 Ubuntu Live DVD/USB
  • terminalCtrl+ Alt+打开窗口T
  • 类型sudo fdisk -l
  • 识别“Linux 文件系统”的 /dev/sdXX 设备名称
  • 输入sudo fsck -f /dev/sdXX,替换sdXX为您之前找到的数字
  • fsck如果有错误则重复命令
  • 类型reboot

全国资格考试

NCQ 错误可以在这里看到...

[33597.552222] ata10.00: exception Emask 0x0 SAct 0x438c0 SErr 0x0 action 0x6 frozen
[33597.552228] ata10.00: failed command: WRITE FPDMA QUEUED
[33597.552236] ata10.00: cmd 61/68:30:b0:a0:7d/01:00:05:00:00/40 tag 6 ncq dma 184320 out
                        res 40/00:01:00:4f:c2/00:00:00:00:00/00 Emask 0x4 (timeout)
[33597.552239] ata10.00: status: { DRDY }
[33597.552294] ata10: hard resetting link

本机命令队列 (NCQ) 是串行 ATA 协议的扩展,允许硬盘驱动器内部优化接收的读写命令的执行顺序。

编辑sudo -H gedit /etc/default/grub并更改以下行以包含此额外参数。然后执行sudo update-grub将更改写入磁盘。重新启动。监视器挂起,并观察/var/log/syslogdmesg是否继续出现错误消息。

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash libata.force=noncq"

答案2

时机的把握是由于弗斯特里姆定期修剪未使用的数据块以刷新 SSD 性能的服务。默认情况下,它配置为每周一 00:00 运行一次。

要查看服务运行:

systemctl status fstrim.timer

在设计合理的驱动器上,这是完全正确且无害的,但三星 SSD 的 NCQ 实现存在错误,与修剪交互不良。错误是否出现可能取决于主板的存储控制器或其他神秘因素。

三星喜欢宣传他们修复了该漏洞,但实际上并没有。我不知道。这是一个整体问题。参见:

如果您知道只有在定期修剪运行时才会出现问题,而其他时间不会出现问题,您可能希望启用 NCQ 以获得更好的整体性能,然后禁用修剪:

systemctl stop fstrim.timer
systemctl disable fstrim.timer

相关内容