HDD のエラーを S.M.A.R.T チェックする
Posted by yoosee on Debian at 2006-02-12 23:42 JST1 HDD のエラーを S.M.A.R.T で確認
本日は Seagate の 250GB の HDD Barracuda 7200.8 (ST3250823A) にシステムを移行中。しかし boot 時にいきなり dma error が出る...hdd: dma_intr: status=0x51 { DriveReady SeekComplete Error } hdd: dma_intr: error=0x84 { DriveStatusError BadCRC } ide1: reset: successboot 時に dma が有効になった後 1 度出るだけでその後は大丈夫そうなので、恐らく単に UDMA の同期が取れずに retry しているだけだと思う。とは言え HDD の障害は不安だし初期不良の可能性もあるので、一応 S.M.A.R.T の情報を確認しておく。Debian での smart 用ツールは smartmontools パッケージに含まれている。
# smartctl -t long /dev/hdd === START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION === Sending command: "Execute SMART Extended self-test routine immediately in off-line mode". Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful. Testing has begun. Please wait 84 minutes for test to complete.84分間待って
# smartctl -l selftest /dev/hdd === START OF READ SMART DATA SECTION === SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Extended offline Completed without error 00% 22 - # 2 Short offline Completed without error 00% 21 -offline long test でも特に問題は発見されていないようだ。
更に smartctl -A を眺める。
=== START OF READ SMART DATA SECTION === 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 056 049 006 Pre-fail Always - 210868597 3 Spin_Up_Time 0x0003 099 098 000 Pre-fail Always - 0 4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 17 5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0 7 Seek_Error_Rate 0x000f 065 060 030 Pre-fail Always - 3413543 9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 45 10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 23 194 Temperature_Celsius 0x0022 032 040 000 Old_age Always - 32 (Lifetime Min/Max 0/19) 195 Hardware_ECC_Recovered 0x001a 056 049 000 Old_age Always - 210868597 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 182 000 Old_age Always - 39 200 Multi_Zone_Error_Rate 0x0000 100 253 000 Old_age Offline - 0 202 TA_Increase_Count 0x0032 100 253 000 Old_age Always - 0他のベンダは知らないが、Seagate では殆んどの VALUE は 100 で正規化されているようだ (smart 的には 1-254 の範囲になる)。WORST (ないし VALUE) が THRESH を下回ったらその HDD は死亡、ないし (TYPE が Pre-fail の項目に関しては) 死亡間近と言う意味になるらしい。
発生すると一番まずい Reallocated_Sector_Ct や Spin_Retry_Count は 0 だったので少しほっとするが、Raw_Read_Error_Rate や Seek_Error_Rate の数字が高い。そもそもの THRESH が低いので、まぁそういうものだという気もしないでもないし、Raw_Read_Error_Rate の数値は Hardware_ECC_Recovered と一緒なのでハードウェア的に修正されていると言うことなのだろう。また、同じマシンで使っている他の HDD (Seagate ST380021A) でも似たような数値なので、この HDD が特に問題がある感じではなさそう。
他も色々見てみると、全体的に DMA のアクセスと IDE-HOST 間のデータ転送失敗が多いようで、同じマシンに繋がれた他の HDD でも発生しているので、もしかしてケーブルか M/B が悪いのかもしれない。とりあえずは smartd で監視を続けることにしておく。
2 hddparm でパラメータを設定
試しに hdparm で HDD にパラメータを入れていく。DMA が off の状態では# hdparm -tT /dev/hdd /dev/hdd: Timing cached reads: 2136 MB in 2.00 seconds = 1067.63 MB/sec Timing buffered disk reads: 10 MB in 3.71 seconds = 2.69 MB/sec設定可能な DMA 転送モードを見てみると
# hdparm -i /dev/hdd ... UDMA modes: udma0 udma1 *udma2 udma3 udma4 udma5 ... * signifies the current active modeあれ、UDMA2 って UATA/33 だよな。今使っているP4T は古いとは言えUATA/100 までは対応 しているはずなのに。
# hdparm -d1 -A1 -c3 -m16 -X66 /dev/hdd /dev/hdd: setting 32-bit IO_support flag to 3 setting multcount to 16 setting using_dma to 1 (on) setting xfermode to 66 (UltraDMA mode2) setting drive read-lookahead to 1 (on) multcount = 16 (on) IO_support = 3 (32-bit w/sync) using_dma = 1 (on) # hdparm -tT /dev/hdd /dev/hdd: Timing cached reads: 2144 MB in 2.00 seconds = 1071.63 MB/sec Timing buffered disk reads: 92 MB in 3.05 seconds = 30.16 MB/secUATA/33 ならば理論値まで出ているわけだが、なぜ udma4 にならないなんだ。
hda: 488397168 sectors (250059 MB) w/8192KiB Cache, CHS=30401/255/63, UDMA(33)うーん…。
よく考えたら IDEケーブルは古いままのものを使っていたので、おそらくはこれ、ATA/66 以上に対応していない40芯です。アホだ私。しかしお蔭で原因は恐らく特定できました。ありがとうございます。80芯のケーブル(これを 80c ribbon cable と呼ぶんですね)を後ほど買おうと思います。