我发现了一些对我来说很奇怪的事情:
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed without error 00% 8003 -
# 2 Extended offline Completed: read failure 90% 8001 5907400
# 3 Extended offline Completed: read failure 90% 8001 5907400
# 4 Extended offline Completed: read failure 90% 8001 5907400
# 5 Extended offline Completed: read failure 90% 8001 5907400
# 6 Short offline Completed: read failure 80% 8001 5907400
# 7 Short offline Completed: read failure 80% 8000 5907400
# 8 Extended offline Completed without error 00% 1 -
我的驱动器抛出大量 ATA 错误,数据无法读取。我决定对它进行 RMA,因此我运行了hdparm
安全擦除程序并扔掉shred
了它。由于这是一个小型(500GB Samsung EVO)SSD,因此速度相对较快。我运行了另一个smartctl -t short
,然后......它“修复”了自己。
该驱动器仍然具有ATA Error Count: 207
以下属性:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0033 075 075 010 Pre-fail Always - 123
9 Power_On_Hours 0x0032 098 098 000 Old_age Always - 8004
12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 27
177 Wear_Leveling_Count 0x0013 099 099 000 Pre-fail Always - 4
179 Used_Rsvd_Blk_Cnt_Tot 0x0013 075 075 010 Pre-fail Always - 123
181 Program_Fail_Cnt_Total 0x0032 100 100 010 Old_age Always - 0
182 Erase_Fail_Count_Total 0x0032 100 100 010 Old_age Always - 0
183 Runtime_Bad_Block 0x0013 075 075 010 Pre-fail Always - 123
187 Reported_Uncorrect 0x0032 099 099 000 Old_age Always - 207
190 Airflow_Temperature_Cel 0x0032 060 051 000 Old_age Always - 40
195 Hardware_ECC_Recovered 0x001a 199 199 000 Old_age Always - 207
199 UDMA_CRC_Error_Count 0x003e 099 099 000 Old_age Always - 1
235 Unknown_Attribute 0x0012 099 099 000 Old_age Always - 12
241 Total_LBAs_Written 0x0032 099 099 000 Old_age Always - 3737223587
是什么原因导致 SMART 测试突然“自行修复”?我认为该驱动器不再值得信任?但是,我怀疑三星现在不会将其退回,因为它并没有通过测试……
编辑:为了故事的完整性,三星确实更换了全新的驱动器。
答案1
数据与纠错信息一起存储,纠错信息允许纠正多个位错误并检测(更多)位错误。
简单的情况是四位中的多数票:
0000 - '0', no error
0001 - '0', 1 error
0010 - '0', 1 error
0011 - uncorrectable
0100 - '0', 1 error
0101 - uncorrectable
0110 - uncorrectable
0111 - '1', 1 error
1000 - '0', 1 error
1001 - uncorrectable
1010 - uncorrectable
1011 - '1', 1 error
1100 - uncorrectable
1101 - '1', 1 error
1110 - '1', 1 error
1111 - '1', 0 errors
该方法允许纠正 1 个错误,并检测 2 个错误。如果有 3 个错误,您将得到错误的结果。当然,实际方法使用更大的组,因此它仅将数据扩展了百分之几,而不是 4 倍,同时还考虑到错误通常聚集在一起。
因此,“不可纠正”的错误不一定是介质损坏,它只是意味着数据现在无法恢复。覆盖数据可以很容易地修复这个问题,我怀疑这就是发生的事情。
在显示错误之前,通常会多次尝试读取错误。如果这些尝试之一成功,则该块将被重新映射,并显示在Used_Rsvd_Blk_Cnt_Tot
.由于原始值 123 被转换为 75,我预计大约会使用四分之一的保留块,因此可能存在大约 500 个。FAILING_NOW
当还剩下 10% 的块时(即 50 左右),此属性将进入状态。
所以,是的,我认为 SSD 有点狡猾,因为除了读取失败之外,它还获取了许多重新分配的扇区。