為什麼這個 SSD 驅動器會出現壞扇區,它是否可以預測?
注意:這個問題以前被關閉為題外話。你可以閱讀討論。我在這裡問的原因是:
- 該驅動器位於贊比亞農村學校的離線內容記憶體伺服器中。
- 伺服器是從磁碟映像創建的,所有內容都是可替換的。
- 它必須便宜,因為贊比亞的學校預算有限,而且數量很多。
- 它還必須可靠,因為在糟糕的道路上單程可能需要 8 小時才能更換。
- 我不允許在這裡問什麼驅動器不是“超便宜的廢話”。
- 因此,我們正在對符合這些標準的驅動器進行自己的研究和實驗。
- 我無法通過覆蓋壞扇區(自動重新分配)來修復它們,這違背了我的假設,我想知道為什麼。
- 我想也許安全擦除可能會修復壞扇區,但在我丟棄驅動器之前想徵求其他人的意見。
- 我想我可能錯過了 SMART 數據中可能預測失敗的某些內容。
這是一塊金士頓240GB SSD盤,現場正常執行3個月左右,突然出現壞道:
smartctl 5.41 2011-06-09 r3365 [i686-linux-3.2.20-net6501-121115-1cw] (local build) Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net === START OF INFORMATION SECTION === Device Model: KINGSTON SVP200S3240G Serial Number: 50026B7228010E5C LU WWN Device Id: 5 0026b7 228010e5c Firmware Version: 502ABBF0 User Capacity: 240,057,409,536 bytes [240 GB] Sector Size: 512 bytes logical/physical Device is: Not in smartctl database [for details use: -P showall] ATA Version is: 8 ATA Standard is: ACS-2 revision 3 Local Time is: Tue Mar 5 17:10:24 2013 CAT SMART support is: Available - device has SMART capability. SMART support is: Enabled === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED General SMART Values: Offline data collection status: (0x02) Offline data collection activity was completed without error. Auto Offline Data Collection: Disabled. Self-test execution status: ( 0) The previous self-test routine completed without error or no self-test has ever been run. Total time to complete Offline data collection: ( 0) seconds. Offline data collection capabilities: (0x7b) SMART execute Offline immediate. Auto Offline data collection on/off support. Suspend Offline collection upon new command. Offline surface scan supported. Self-test supported. Conveyance Self-test supported. Selective Self-test supported. SMART capabilities: (0x0003) Saves SMART data before entering power-saving mode. Supports SMART auto save timer. Error logging capability: (0x01) Error logging supported. General Purpose Logging supported. Short self-test routine recommended polling time: ( 1) minutes. Extended self-test routine recommended polling time: ( 48) minutes. Conveyance self-test routine recommended polling time: ( 2) minutes. SCT capabilities: (0x0021) SCT Status supported. SCT Data Table supported. SMART Attributes Data Structure revision number: 10 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 084 084 050 Pre-fail Always - 10965286670575 5 Reallocated_Sector_Ct 0x0033 100 100 003 Pre-fail Always - 16 9 Power_On_Hours 0x0032 000 000 000 Old_age Always - 46823733462185 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 127 171 Unknown_Attribute 0x0032 000 000 000 Old_age Always - 0 172 Unknown_Attribute 0x0032 000 000 000 Old_age Always - 0 174 Unknown_Attribute 0x0030 000 000 000 Old_age Offline - 131 177 Wear_Leveling_Count 0x0000 000 000 000 Old_age Offline - 1 181 Program_Fail_Cnt_Total 0x0032 000 000 000 Old_age Always - 0 182 Erase_Fail_Count_Total 0x0032 000 000 000 Old_age Always - 0 187 Reported_Uncorrect 0x0032 000 000 000 Old_age Always - 49900 194 Temperature_Celsius 0x0022 033 078 000 Old_age Always - 33 (Min/Max 21/78) 195 Hardware_ECC_Recovered 0x001c 120 120 000 Old_age Offline - 235163887 196 Reallocated_Event_Count 0x0033 100 100 003 Pre-fail Always - 16 201 Soft_Read_Error_Rate 0x001c 120 120 000 Old_age Offline - 235163887 204 Soft_ECC_Correction 0x001c 120 120 000 Old_age Offline - 235163887 230 Head_Amplitude 0x0013 100 100 000 Pre-fail Always - 100 231 Temperature_Celsius 0x0013 100 100 010 Pre-fail Always - 0 233 Media_Wearout_Indicator 0x0000 000 000 000 Old_age Offline - 363 234 Unknown_Attribute 0x0032 000 000 000 Old_age Always - 208 241 Total_LBAs_Written 0x0032 000 000 000 Old_age Always - 208 242 Total_LBAs_Read 0x0032 000 000 000 Old_age Always - 1001 SMART Error Log not supported SMART Self-test Log not supported SMART Selective self-test log data structure revision number 1 SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS 1 0 0 Not_testing 2 0 0 Not_testing 3 0 0 Not_testing 4 0 0 Not_testing 5 0 0 Not_testing Selective self-test flags (0x0): After scanning selected spans, do NOT read-scan remainder of disk. If Selective self-test is pending on power-up, resume after 0 minute delay.
現在我在磁碟上的某些地方得到了壞塊:
root@iPad2:~# badblocks /dev/sda -v Checking blocks 0 to 234431063 Checking for bad blocks (read-only test): 8394752 done, 1:15 elapsed 8394756 done, 1:21 elapsed 8394757 done, 1:23 elapsed 8394758 done, 1:24 elapsed 8394759 done, 1:27 elapsed ... 190882871one, 29:49 elapsed 190882888one, 29:53 elapsed 190882889one, 29:54 elapsed 190882890one, 29:56 elapsed 190882891one, 29:58 elapsed done Pass completed, 80 bad blocks found.
它們似乎是可重複的,並且自動重新分配失敗,因此無法通過寫入它們來修復它們:
root@iPad2:~# badblocks /dev/sda -wvf 8394756 8394756 /dev/sda is apparently in use by the system; badblocks forced anyway. Checking for bad blocks in read-write mode From block 8394756 to 8394756 Testing with pattern 0xaa: 8394756 done Reading and comparing: done Testing with pattern 0x55: done Reading and comparing: done Testing with pattern 0xff: done Reading and comparing: done Testing with pattern 0x00: done Reading and comparing: done Pass completed, 1 bad blocks found.
我在系統日誌中收到這樣的錯誤:
ata1.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x0 ata1.00: irq_stat 0x40000000 ata1.00: failed command: READ FPDMA QUEUED ata1.00: cmd 60/08:00:08:30:00/00:00:01:00:00/40 tag 0 ncq 4096 in res 51/40:08:08:30:00/00:00:01:00:00/40 Emask 0x409 (media error) <F> ata1.00: status: { DRDY ERR } ata1.00: error: { UNC } ata1.00: configured for UDMA/133 sd 0:0:0:0: [sda] Unhandled sense code sd 0:0:0:0: [sda] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE sd 0:0:0:0: [sda] Sense Key : Medium Error [current] [descriptor] Descriptor sense data with sense descriptors (in hex): 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00 01 00 30 08 sd 0:0:0:0: [sda] Add. Sense: Unrecovered read error - auto reallocate failed sd 0:0:0:0: [sda] CDB: Read(10): 28 00 01 00 30 08 00 00 08 00 end_request: I/O error, dev sda, sector 16789512 Buffer I/O error on device sda, logical block 2098689 ata1: EH complete
現在我不明白為什麼自動重新分配在這個磁碟上失敗了。輸出對
smartctl
我來說一切都很好。只有 16 個部門被重新分配,這根本不是很多。我看不出這個驅動器拒絕重新分配扇區的任何正當理由。這種型號的 SSD 是剛壞還是設計不好?筆記:
- 根據金士頓的文件,屬性 174 是“意外斷電”。
- 131 意外斷電是相當糟糕的。
- 屬性 187 (Reported_Uncorrect) 是 49900 可能的最大值 65535
- 有史以來的最高溫度相當高,達到 78’C
金士頓在這個驅動器上隱藏了最有趣的 SMART 計數器。但是我們可以從屬性 196 中推斷出備用扇區的數量。Reallocated_Event_Count,其正規化值有以下公式:
100 -(100* RBC / MRC) RBC = Retired Block Count (Grown) MRE = Maximum reallocation count
由於標準化值為 100,這意味著 RBC << MRE,因此我們離用盡所有可用扇區進行重新分配還差得很遠。
便宜的 SSD 似乎有嚴重的質量問題。您會發現很多使用者對您的特定驅動器有問題。然而,我認為供應商也以相同的標籤銷售不同的驅動器(例如,與其他 NAND 晶片/控制器一起使用)。因此,每個驅動器的行為可能不同。
SMART 值沒有表明驅動器將很快出現故障。根據我的經驗,它是一樣的:突然發生驅動器錯誤,然後磁碟出現故障。
您使用 SSD 的原因是什麼?我看到了 SSD 的優勢,因為它沒有機械元件,而且它們防塵並且產生的熱量更少。但是我也看到了很多缺點。
例如,在繁忙的捲上(例如,當您使用帶有日誌的文件系統時)即使使用磨損均衡也可以快速達到對單個記憶體單元的寫入次數。
並且電子設備也會受到高濕度或高溫的影響 - 與傳統硬碟驅動器相同。
為什麼不改用更便宜的傳統硬碟驅動器,並且(如果不需要 raid)為伺服器提供備用驅動器,這些備用驅動器在需要替換之前沒有連接(已經存在於伺服器機箱中或安裝在熱插拔籠中,以便該磁碟可能用於不同的伺服器)。然後他們可以通過現場或遠端(如果可能)的腳本進行準備。
只要傳統硬碟驅動器沒有通電,到目的地的運輸可能會很艱難……
如果有多個學校伺服器/永久客戶端和可靠/冗餘的網路,也許分佈式文件系統也可以幫助創建故障安全記憶體伺服器(例如通過使用 glusterfs)。