先週自宅用にJenkinsサーバーを構築したのですが、危うくHDDをぶっ壊しかけたのでメモ。 結論から言うとAPMの設定が問題でした。
自宅サーバーのHDDの音が頻繁に鳴ってて、耳障りだったのと初期不良かもしれないといろいろ調べてたら、apmの設定が問題だったぽい。換装してからこの一週間でLoad_Cycle_Countの値が10%死に近づいた。
— tama (@mscle11) 2018年9月17日
なにが起きたのか
新しく購入したHDD(http://kakaku.com/item/K0000920811/)に換装したマシンでJenkinsサーバーを構築しました。 構築直後からHDDが定期的に”チッ”という音(文字起こししづらい音)が鳴り始めました。
HDDの故障など、いろいろ原因を考えましたが、音以外で、書き込み速度が遅いなどの性能面の問題があるわけではなかったので、一週間ほど放置してました。
この時点でわかっていたこと
- 音は定期的になっていた(使用していないときはほぼ一定の間隔で鳴っていた)
- HDDに書き込み or 読み込みを行っている間は音が止む
SMART値を眺めた
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 071 065 006 Pre-fail Always - 13295314 3 Spin_Up_Time 0x0003 100 100 000 Pre-fail Always - 0 4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 4 5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0 7 Seek_Error_Rate 0x000f 061 060 045 Pre-fail Always - 1124713 9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 242 (13 250 0) 10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 4 184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0 187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0 188 Command_Timeout 0x0032 100 100 000 Old_age Always - 0 189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0 190 Airflow_Temperature_Cel 0x0022 056 051 040 Old_age Always - 44 (Min/Max 30/49) 191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 1 192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 1 193 Load_Cycle_Count 0x0032 089 089 000 Old_age Always - 22710 194 Temperature_Celsius 0x0022 044 049 000 Old_age Always - 44 (0 27 0 0 0) 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0 240 Head_Flying_Hours 0x0000 100 253 000 Old_age Offline - 124 (45 86 0) 241 Total_LBAs_Written 0x0000 100 253 000 Old_age Offline - 253025584 242 Total_LBAs_Read 0x0000 100 253 000 Old_age Offline - 4435545 254 Free_Fall_Sensor 0x0032 100 100 000 Old_age Always - 0
Raw_Read_Error_Rateとか、Seek_Error_Rateの値が高いのがわかります。 が、この二つは買ったばかりのHDDでも高めに出るようです。
参考: Seagate製HDDが故障する直前のsmart値 – UbuntuによるEco Linuxサーバ構築記
上の二つの値に目がいってしまいそうですが、実はLoad_Cycle_Countの値も悪化しています。 音が気になりだしたときにもsmart値を確認していたのですが、ここまで悪化して初めて気が付きました。
1年ほど使用しているメインマシンのHDD(Seagate製の3.5インチ)の値が95で、使用開始から一週間のこのHDDの値が89。 このまま放置していたら3か月たたないうちに0(故障寸前)になってしまう計算です。 メーカーの仕様でも600,000回が上限になっていますから、半年ほどで超えてしまう計算です。気づけて良かった。(超えたらメーカー保証適用外になったりするのでしょうか。このことについてはっきり書かれた記述は見つかりませんでした。)
Load_Cycle_CountとAPM
Self-Monitoring, Analysis and Reporting Technology - Wikipedia
193 0xC1 Load Cycle Count または Load/Unload Cycle Count (Fujitsu) ロード/アンロード機構によって磁気ヘッドが磁気ディスク表面から退避場所に退避し、その後再び磁気ディスク表面に戻った回数の合計。一般的な2.5型HDDのメーカー保証値は、2005年以降に登場したモデルでは大抵60万回程度。2004年以前のモデルでは30万回程度。
Load_Cycle_Countとは磁気ヘッドがディスクから退避・戻りを繰り返した回数のようです。 これに関して調べたところ、APM(Advanced Power Management - Wikipedia)が関係しているらしいという記述をいくつか見つけました。
参考: Seagate APM ST3000DM001 : 事象の水平線 :/ hdparm - ArchWiki
設定によっては、使用していないときに積極的に磁気ヘッドを退避させて、消費電力を下げようという機能が働くようです。(書き込み・読み込み時に音が止まるという症状にも一致しますね。)
hdparmコマンドで無効にできるとのことです。
hdparm -B 255 /dev/sda
これで、気になる音は出なくなりましたとさ。めでたしめでたし。