先日 1/10 (運悪く出張初日だった *_*) に、 レッツノート CF-R6MWVAJP のハードディスク・ドライブ (以下、HDD と略記) が 回転しなくなり (スピン・アップしない) 往生した。 電源を入れても、 BIOS が

Phoenix TrustedCore(tm) NB Copyright 1985-2004 Phoenix Technologies Ltd. All Rights Reserved Copyright (C) Matsushita Electric Industrial Co.,Ltd. 2007 BIOS Version 1.00-L13 CPU = 1 Processors Detected, Cores per Processor = 2 Intel(R) Core(TM) Duo CPU U2400 @ 1.06GHz 2048MシステムRAMテスト完了。 システムBIOSがシャドウされました。 ビデオBIOSがシャドウされました。 ハードディスク0: マウスが初期化されました。 エラー 0200: ハードディスクエラーです。 0 <F2>キーを押すとセットアップを起動します。

というメッセージをビープ音とともに出力して止まってしまう。 HDD が壊れたのかと思い、 BIOS で HDD を起動ドライブから外して USB メモリからブートを試みたが、 起動ドライブから外しても内蔵 HDD に問題があると先に進めないようだ。

HDD を完全に取り除いてしまえば USB メモリからブートするらしいが、 このような中途半端な死にかただとスピン・アップ待ちになってしまって、 そこから先に進めなくなる (後で知ったのだが、 実は上記画面で止まっているとき <F1> を押すと、 ブートを継続できて USB メモリ等からブートできる)。

昔、HDD のスピンドル (spindle) が固着して、 スピン・アップ (spin up) しなくなる症状に見舞われたことがあったが、 今回はつい数分前まで全く正常に動いていた HDD が、 突然スピン・アップしなくなったのであって、 あからさまに症状が異なるように思われた。 しかもごく短い距離を移動するためにレッツ・ノートを閉じただけなので、 途中衝撃なども一切与えていない。 機械的な障害ではないように思われた。

とはいえ、 いちおー無駄な抵抗は試みた (^^;)。 すなわち、 HDD が回転しなくなったときに、 HDD を振り回すことによってトルクを与える手法や、 あるいは結露等で回路に異常がおきたときに、 結露を霧散させる手法 (平たく言うとしばらく放置しただけ ;) を試したのだが、 HDD が回転音を発することは無かった。 出張初日で、 代替マシンの調達もままならず、 Advanced/W-ZERO3[es] に USB キーボードをつないで急場をしのいだものの、 えらく難儀した。

- o -

結論から言うと、 想像通りハードウェア的にはなんら故障していなかった。 単に HDD が 「電源投入時にスタンバイ・モードに入る (power-on in standby)」 状態になっていただけだった。

1/9 に行なわれた Windows Update KB943899 が原因らしいです。 おそらくこの Update のバグで、 HDD に power-on in standby を有効にする命令が 送られてしまうことがあるのでしょう。 私の CF-R6 は 1/10 に発症しましたが、 他にも同様の発症例が多数あるとか。

例えば、 Linux の hdparm コマンドのマニュアルには、 次のような記述がある。

NAME hdparm - get/set hard disk parameters SYNOPSIS hdparm [ flags ] [device] .. OPTIONS -s Enable/disable the power-on in standby feature, if supported by the drive. VERY DANGEROUS . Do not use unless you are abso- lutely certain that both the system BIOS (or firmware) and the operating system kernel (Linux >= 2.6.22) support probing for drives that use this feature. When enabled, the drive is pow- ered-up in the standby mode to allow the controller to sequence the spin-up of devices, reducing the instantaneous current draw burden when many drives share a power supply.

「 VERY DANGEROUS 」と書いてある通り、 HDD がひとたびこの「power-on in standby」モードになってしまうと、 電源を投入してもスピン・アップしなくなる (スタンバイ状態になる)。 HDD が沢山あるサーバなどで、 全ディスクが一斉に回転を始めると、 突入電流が電源の許容範囲を超えてしまったりするわけで、 それを回避するためのモードらしい。 つまり、 電源を投入したあと、 おもむろに HDD を一台づつスピン・アップしていくことにより、 回転開始にともなう突入電流を分散させることができるというわけ。

実験してみる ( 非常に危険 なので何をやっているか完全に理解するまでは 真似しないでください ):

# hdparm -s1 /dev/sda /dev/sda: setting power-up in standby to 1 (on) # hdparm -I /dev/sda /dev/sda: ATA device, with non-removable media Model Number: Hitachi HTS541612J9SA00 Serial Number: SBXXXXXXXXXXXX Firmware Revision: SBDOC70P Standards: Used: ATA/ATAPI-7 T13 1532D revision 1 Supported: 7 6 5 4 Configuration: Logical max current cylinders 16383 16383 heads 16 16 sectors/track 63 63 -- CHS current addressable sectors: 16514064 LBA user addressable sectors: 234441648 LBA48 user addressable sectors: 234441648 device size with M = 1024*1024: 114473 MBytes device size with M = 1000*1000: 120034 MBytes (120 GB) Capabilities: LBA, IORDY(can be disabled) Queue depth: 32 Standby timer values: spec'd by Vendor, no device specific minimum R/W multiple sector transfer: Max = 16 Current = 16 Advanced power management level: 128 (0x80) Recommended acoustic management value: 128, current value: 254 DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5 Cycle time: min=120ns recommended=120ns PIO: pio0 pio1 pio2 pio3 pio4 Cycle time: no flow control=120ns IORDY flow control=120ns Commands/features: Enabled Supported: * SMART feature set * Security Mode feature set * Power Management feature set * Write cache * Look-ahead * Host Protected Area feature set * WRITE_BUFFER command * READ_BUFFER command * NOP cmd * DOWNLOAD_MICROCODE * Advanced Power Management feature set * Power-Up In Standby feature set * SET_FEATURES required to spinup after power up SET_MAX security extension Automatic Acoustic Management feature set * 48-bit Address feature set * Device Configuration Overlay feature set * Mandatory FLUSH_CACHE * FLUSH_CACHE_EXT * SMART error logging * SMART self-test * General Purpose Logging feature set * WRITE_{DMA|MULTIPLE}_FUA_EXT * 64-bit World wide name * IDLE_IMMEDIATE with UNLOAD * SATA-I signaling speed (1.5Gb/s) * Native Command Queueing (NCQ) * Host-initiated interface power management * Phy event counters Non-Zero buffer offsets in DMA Setup FIS DMA Setup Auto-Activate optimization Device-initiated interface power management In-order data delivery * Software settings preservation Security: Master password revision code = 2007 supported enabled not locked frozen not expired: security count not supported: enhanced erase Security level maximum 72min for SECURITY ERASE UNIT. Checksum: correct #

「Power-Up In Standby feature set」が有効になっていることが分かる。 この状態で再起動する (HDD の電源をいったん切る) と、 冒頭に引用した「0200: ハードディスクエラーです。 0」を表示して止まってしまう。 <F1> を押して HDD 以外から起動させると、

[ 0.000000] Linux version 2.6.23.12 (sengoku@senri.gcd.org) (gcc version 4.1.2) #1 SMP Mon Dec 24 09:50:41 JST 2007 ... [ 72.479025] ata3.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0 [ 72.479031] ata3.00: irq_stat 0x40000001 [ 72.479044] ata3.00: cmd c8/00:08:00:00:00/00:00:00:00:00/e0 tag 0 cdb 0x0 data 4096 in [ 72.479047] res 51/04:08:00:00:00/00:00:00:00:00/e0 Emask 0x1 (device error) [ 72.481033] ata3.00: configured for UDMA/33 [ 72.481043] sd 2:0:0:0: [sda] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK [ 72.481051] sd 2:0:0:0: [sda] Sense Key : Aborted Command [current] [descriptor] [ 72.481060] Descriptor sense data with sense descriptors (in hex): [ 72.481066] 72 0b 00 00 00 00 00 0c 00 0a 80 00 00 00 00 00 [ 72.481082] 00 00 00 00 [ 72.481089] sd 2:0:0:0: [sda] Add. Sense: No additional sense information [ 72.481099] end_request: I/O error, dev sda, sector 0 [ 72.481114] ata3: EH complete [ 72.481738] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 72.481794] sd 2:0:0:0: [sda] 234441648 512-byte hardware sectors (120034 MB) [ 72.481818] sd 2:0:0:0: [sda] Write Protect is off [ 72.481824] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 72.481861] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

何度も HDD へリクエストを再送した末、「I/O error」になる。 Linux 2.6.22 以降の場合、 I/O error にはなるものの HDD デバイス自体は認識しているので、 hdparm コマンドからコントロールすることができる。

逆に言うと、古いカーネルだとデバイス認識も行なわれないので、 hdparm コマンドすら使えなくなってしまい 以下の方法では復旧できない 。 現時点では Knoppix などの LiveCD の多くは、 2.6.21 以前のカーネルのまま (例えば Knoppix v5.1.1 は 2.6.19) なので注意。

hdparm を使って「Power-Up In Standby feature」を無効にする:

# hdparm -I /dev/sda | grep Power-Up * Power-Up In Standby feature set # hdparm -s0 /dev/sda /dev/sda: setting power-up in standby to 0 (off) # hdparm -I /dev/sda | grep Power-Up Power-Up In Standby feature set #

これで、電源投入時に HDD は自動的に回転を始めるようになる。

再起動すれば HDD から正常にブートする。