故障dmesg info:

[1667774.596438] ata1.00: exception Emask 0x10 SAct 0xfff9ffff SErr 0x440100 action 0x6 frozen
[1667774.596450] ata1.00: irq_stat 0x08000008, interface fatal error
[1667774.596454] ata1: SError: { UnrecovData CommWake Handshk }
[1667774.596459] ata1.00: failed command: WRITE FPDMA QUEUED
[1667774.596463] ata1.00: cmd 61/20:00:a0:83:6e/00:00:01:00:00/40 tag 0 ncq dma 16384 out
                          res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x10 (ATA bus error)
[1667774.596474] ata1.00: status: { DRDY }
[1667774.596478] ata1.00: failed command: WRITE FPDMA QUEUED
[1667774.596481] ata1.00: cmd 61/40:08:20:84:6e/00:00:01:00:00/40 tag 1 ncq dma 32768 out
                          res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x10 (ATA bus error)
......
[1667774.596896] ata1.00: status: { DRDY }
[1667774.596899] ata1.00: failed command: WRITE FPDMA QUEUED
[1667774.596902] ata1.00: cmd 61/40:f0:20:82:6e/00:00:01:00:00/40 tag 30 ncq dma 32768 out
                          res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x10 (ATA bus error)
[1667774.596911] ata1.00: status: { DRDY }
[1667774.596914] ata1.00: failed command: WRITE FPDMA QUEUED
[1667774.596917] ata1.00: cmd 61/20:f8:a0:7c:6e/00:00:01:00:00/40 tag 31 ncq dma 16384 out
                          res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x10 (ATA bus error)
[1667774.596926] ata1.00: status: { DRDY }
[1667774.596931] ata1: hard resetting link
[1667774.911390] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[1667774.922194] ata1.00: configured for UDMA/133
[1667774.932261] ahci 0000:00:17.0: port does not support device sleep
[1667774.932598] ata1: EH complete

原因是NCQ的问题。
硬盘问题,千万别买西数绿盘!!

什么是NCQ?
http://baike.baidu.com/view/17501.htm
NCQ(Native Command Queuing,全速命令队列)是被设计用于改进在日益增加的负荷情况下硬盘的性能和稳定性的技术。当用户的应用程序发送多条指令到用户的硬盘,NCQ硬盘可以优化完成这些指令的顺序,从而降低机械负荷达到提升性能的目的。 NCQ技术是一种使硬盘内部优化工作负荷执行顺序,通过对内部队列中的命令进行重新排序实现智能数据管理,改善硬盘因机械部件而受到的各种性能制约。
貌似对SSD没什么用,所以是SSD的话,可以关闭它。
对于ssd来说,目前原生支持SATA的SSD都能支持NCQ,SSD虽然没有机械臂,但是SSD有多通道。开启NCQ后,SSD主控制器会根据数据的请求和NAND内部数据的分布,充分利用主控制器通道的带宽达到提升性能的目地。目前的SSD都建议开启NCQ模式

一般SSD都会有缓存(主控内的小缓存或者外置的大缓存),开启NCQ后,SSD主控对于4kb这样的小文件写入命令会进行整合,形成连续的大文件,减少Nand Flash实际占用的空间(Page/Block)。

实际影响是小文件写入变快了(因为主机发送的小文件写入命令堆积在缓存中,主控可以立即返回写入成功了的状态给主机,这样NCQ32可以堆积32个写入命令,显得小文件写入速度变快了。实际的情况是主控收到32个写入命令后先存入缓存,然后再写入Nand Flash中。)

长期影响就是延长了SSD的寿命(因为整合后写入Nand Flash的数据更连续了,造成的垃圾更少了,固件做垃圾回收或者损耗均衡的次数更少了,减少了Nand Flash的P/E Cycle.)。

NCQ对大文件写入基本没什么影响。

有机械盘又有SSD的情况,禁用SSD NCQ:
echo 1 > /sys/block/sdX/device/queue_depth

直接禁用NCQ服务:

vi /etc/default/grub 

GRUB_CMDLINE_LINUX="rhgb quiet libata.force=noncq"
最后修改:2023 年 01 月 23 日 11 : 28 AM
如果觉得我的文章对你有用,无需赞赏用心感谢!