自宅でFreeNASを運用しているのですが、久々にメールでAlertが来ました。
New alerts:
* Device: /dev/ada3, Self-Test Log error count increased from 0 to 1
どうやらSmartのセルフテストでエラーが上がった模様早速SSHアクセスして確認をしてみます。
=== START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED General SMART Values: Offline data collection status: (0x85) Offline data collection activity was aborted by an interrupting command from host. Auto Offline Data Collection: Enabled. Self-test execution status: ( 121) The previous self-test completed having the read element of the test failed. Total time to complete Offline data collection: ( 8700) 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: ( 2) minutes. Extended self-test routine recommended polling time: ( 88) minutes. Conveyance self-test routine recommended polling time: ( 5) minutes. SCT capabilities: (0x3037) SCT Status supported. SCT Feature Control supported. SCT Data Table supported. SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x002f 200 200 051 Pre-fail Always - 3 3 Spin_Up_Time 0x0027 136 134 021 Pre-fail Always - 4183 4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 780 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0 7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0 9 Power_On_Hours 0x0032 088 088 000 Old_age Always - 9394 10 Spin_Retry_Count 0x0032 100 100 000 Old_age Always - 0 11 Calibration_Retry_Count 0x0032 100 100 000 Old_age Always - 0 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 779 192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 19 193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 763 194 Temperature_Celsius 0x0022 110 094 000 Old_age Always - 33 196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 1 198 Offline_Uncorrectable 0x0030 200 200 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0 200 Multi_Zone_Error_Rate 0x0008 200 200 000 Old_age Offline - 2 SMART Error Log Version: 1 No Errors Logged SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error 1 Short offline Completed: read failure 90% 9394 333519803 2 Short offline Completed: read failure 90% 9374 333519803 3 Short offline Completed without error 00% 9351 - 4 Short offline Completed without error 00% 9340 -
まずはSelf-text execution status が121になっていること、LifeTime 9394時間で 333519803ブロックにread failureとのこと、そしてValueの197番Current_Pending_Sectorを見ると1と数字が上がっています。このCurrent_Pending_Sectorが何を意味しているのかについて、詳しくは検索してほしいですが、1回エラーが出たけど対象ブロックが使えないことは確定ではない、保留している状態になります。なおブロックが使えないことが確定した場合は、Reallocated_Sector_Ctのカウントが上がることになります。なのでこのまま放置でも良いのですが、エラーが出続けるのが気持ち悪いので、ブロックを狙い撃ちして、白黒はっきりつけようという試みです。
ddでブロックに直接書き込む
上記のsmart情報よりブロックサイズを確認しddで直接ブロックに書き込みます、書き込むものは元のブロックの情報を新しいブロックです。成功すれば同じ情報が書き込まれ、失敗すればReallocateされるはず?です。
$ sudo dd if=/dev/ada3 of=/dev/ada3 bs=512 count=1 iseek=333519803 oseek=333519803 conv=noerror,sync dd: /dev/ada3: Operation not permitted #書き込みがgeomによって保護されているので設定を一時的に変更します $ sudo sysctl kern.geom.debugflags=16 kern.geom.debugflags: 0 -> 16 #もう一度チャレンジ $ sudo dd if=/dev/ada3 of=/dev/ada3 bs=512 count=1 iseek=333519803 oseek=333519803 conv=noerror,sync 1+0 records in 1+0 records out 512 bytes transferred in 3.061535 secs (167 bytes/sec) #設定を戻します $ sudo sysctl kern.geom.debugflags=0 kern.geom.debugflags: 16 -> 0
もう一度smartテストを行う
$ sudo smartctl -t short /dev/ada3
2分ほど待ってstatusを確認すると、なんと解消されていました。
Self-test execution status: ( 0) The previous self-test routine completed without error or no self-test has ever been run. 中略 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0 中略 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% 9395 - 2 Short offline Completed: read failure 90% 9394 333519803
これでエラー表示は消えたわけですが、寿命が近い可能性がありますので交換準備をしたほうが良いと思います。参考にしたサイトは以下です。
FreeNAS でCurrently unreadable (pending) sectorsが発生、その対処方法は
https://syobon.jp/blog/2017/04/26/freenas-fix-currently-unreadable-pending-sectors-error/