*1  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: success
boot 時に 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/sec
UATA/33 ならば理論値まで出ているわけだが、なぜ udma4 にならないなんだ。
hda: 488397168 sectors (250059 MB) w/8192KiB Cache, CHS=30401/255/63, UDMA(33)
うーん…。

( Permalink | Comments (2) | tags: hardware  )
Comments
ケーブルで66にならない場合と、IGNORE word93 Validation BITSで設定しないと66以上にならない場合があります。
2. yoosee at 2006-02-16 17:26
IDEDMA_IVB と言う設定ですね。確かに関連していそうな事が書いてあります。で、そこに 80c ribbon と言う語句があったのでなんだろうと調べてみたんですが…
よく考えたら IDEケーブルは古いままのものを使っていたので、おそらくはこれ、ATA/66 以上に対応していない40芯です。アホだ私。しかしお蔭で原因は恐らく特定できました。ありがとうございます。80芯のケーブル(これを 80c ribbon cable と呼ぶんですね)を後ほど買おうと思います。

Please write your comment. email address won't appear. Cannot use any HTML tags in comment.
コメントをお書き下さい。メールアドレスは公開されません。 またHTMLタグは利用できません。
Name   E-mail   URL
Comment

About W.W.Walker

World Wide Walker は yoosee による blog です。PDA, Web・サーバ技術, 美味しい食べ物などの話題を取り上げています... read more

このエントリーのブックマーク

Monthly Archives

Select Month to read