我偶尔会遇到磁盘读取错误。通常,我会认为 SSD 快要坏了,但这些问题是有原因的:
- 2017 年春季:我购买了新的三星 SSD 850 Pro(所以当问题开始出现时它才刚使用两年)
- 2018 年夏季:发生了一次雷击,雷电通过固定电话线进入我家,摧毁了我的路由器、USB/以太网适配器、后面的 Raspberry PI,穿过了我的交换机(毫发无损),穿过了我的主板(可能毫发无损),摧毁了我的 USB 打印机和屏幕上的 USB 集线器
- 2018 年冬季 / 2019 年春季:当我早上打开电脑时,Linux 启动正常,但启动 Windows 失败,并打印“硬盘读取错误,按任意键重启“。在 Linux 启动 1-2 小时后启动 Windows 通常就可以了。
而这个问题在过去两年一直没有得到解决,既没有恶化,也没有改善。
我已经使用三星的“SSD Magician”软件进行了检查,但它声称我的 SSD 状况良好,没有坏扇区/移动扇区。
Windows 仅在正常运行 1-2 小时后才能部分可靠地启动,这对我来说看起来像是一种热效应。
Linux 似乎在清晨启动时遇到同样的问题,但恢复能力更强。dmesg
例如,以下是我今天早上遇到的情况:
[ 3.678283] ata1.00: exception Emask 0x10 SAct 0x6800001 SErr 0x280100 action 0x6 frozen
[ 3.678285] ata1.00: irq_stat 0x08000000, interface fatal error
[ 3.678287] ata1: SError: { UnrecovData 10B8B BadCRC }
[ 3.678289] ata1.00: failed command: READ FPDMA QUEUED
[ 3.678294] ata1.00: cmd 60/20:00:e0:5a:dd/00:00:33:00:00/40 tag 0 ncq dma 16384 in
res 40/00:00:e0:5a:dd/00:00:33:00:00/40 Emask 0x10 (ATA bus error)
...
[ 3.678335] ata1: hard resetting link
[ 3.993153] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
...
[ 4.000672] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 4.000677] sd 0:0:0:0: [sda] tag#0 Sense Key : Illegal Request [current]
[ 4.000681] sd 0:0:0:0: [sda] tag#0 Add. Sense: Unaligned write command
[ 4.000686] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 33 dd 5a e0 00 00 20 00
[ 4.000691] blk_update_request: I/O error, dev sda, sector 870144736 op 0x0:(READ) flags 0x80700 phys_seg 4 prio class 0
...
[ 4.000796] ata1: EH complete
[ 5.062260] EXT4-fs (sda4): re-mounted. Opts: (null)
[ 5.282271] ata1.00: exception Emask 0x10 SAct 0x4000 SErr 0x280100 action 0x6 frozen
[ 5.282273] ata1.00: irq_stat 0x08000000, interface fatal error
[ 5.282276] ata1: SError: { UnrecovData 10B8B BadCRC }
[ 5.282279] ata1.00: failed command: READ FPDMA QUEUED
[ 5.282286] ata1.00: cmd 60/68:70:20:65:89/00:00:27:00:00/40 tag 14 ncq dma 53248 in
res 40/00:70:20:65:89/00:00:27:00:00/40 Emask 0x10 (ATA bus error)
[ 5.282287] ata1.00: status: { DRDY }
[ 5.282292] ata1: hard resetting link
...
[ 5.604751] sd 0:0:0:0: [sda] tag#14 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 5.604755] sd 0:0:0:0: [sda] tag#14 Sense Key : Illegal Request [current]
[ 5.604759] sd 0:0:0:0: [sda] tag#14 Add. Sense: Unaligned write command
[ 5.604765] sd 0:0:0:0: [sda] tag#14 CDB: Read(10) 28 00 27 89 65 20 00 00 68 00
[ 5.604769] blk_update_request: I/O error, dev sda, sector 663315744 op 0x0:(READ) flags 0x80700 phys_seg 13 prio class 0
[ 5.604788] ata1: EH complete
[ 28.274273] ata1.00: exception Emask 0x10 SAct 0x60c1 SErr 0x280100 action 0x6 frozen
[ 28.274276] ata1.00: irq_stat 0x08000000, interface fatal error
[ 28.274278] ata1: SError: { UnrecovData 10B8B BadCRC }
[ 28.274281] ata1.00: failed command: READ FPDMA QUEUED
[ 28.274286] ata1.00: cmd 60/50:00:b0:4f:19/00:00:30:00:00/40 tag 0 ncq dma 40960 in
res 40/00:68:28:d6:b8/00:00:26:00:00/40 Emask 0x10 (ATA bus error)
完整日志在此:PasteBin 上的完整 dmesg SATA 错误日志
是否有任何线索表明我是否需要更换主板或 SSD 来解决这些问题?
答案1
您收到的错误确实意味着 SSD 的某些部分有问题。但仅从此日志无法判断是主板还是 SSD(或两者兼而有之)。您可以通过交叉测试各个组件(例如,尝试将主板与不同的 SSD 连接,尝试将 SSD 与不同的主板连接等)来进行排除。第一步(也是最简单的一步)是更换电缆并将 SSD 插入不同的端口。
当您启动操作系统时,SSD 可能仍然能够工作(取决于实际使用的数据、驱动器如何重新映射无法访问的扇区、温度等),但由于它不能可靠地工作,所以它与根本不能工作是一样的。
测试 SSD 时,不要fsck
只依赖它 -badblocks
以读/写/验证模式使用。这将保证每个扇区都经过测试,包括可用空间。为了考虑热效应,让它运行 3 次或更多次,如果仍然出现类似错误,请换一个新的。