Windows VISTA 用の更新プログラム KB943899 が原因で突然死したハードディスクを復旧させる方法
昨日書いた
「1/9 以降、Windows VISTA 搭載 レッツノートのハードディスクが突然死する可能性がある
」を大変多くの方に読んで頂けた。
頂いたコメントで目立ったのが、
復旧方法が万人向けではない、という点。
確かに Linux 2.6.22 以上の LiveCD を自前で調達しなければならないというのは、
よほど普段から Linux を使いこなしていない限りは難しいだろう。
というわけで、 突然死したハードディスクを普及させる「お手軽パック」を作ってみた。 もちろん無保証である。 いかなる損害が発生しても私は何の責任も負えない、 ということに同意して頂けるかたのみに対して使用を許諾する。
まず、この zip アーカイブ をダウンロードして、 USB メモリへ展開する。 以下の例では USB メモリが「ドライブ D」になっているが、 実際の USB メモリのドライブ名で読み替えて欲しい。
D:\>dir ドライブ D のボリューム ラベルがありません。 ボリューム シリアル番号は 0000-0000 です D:\ のディレクトリ 2007/07/16 08:49 23,040 syslinux.exe 2008/01/18 07:33 537,844 hdparm 2007/12/25 08:07 2,411,333 initz 2007/12/24 09:50 1,423,768 linuz 2008/01/18 08:18 58 syslinux.cfg 5 個のファイル 4,396,043 バイト 0 個のディレクトリ 510,672,896 バイトの空き領域 D:\>
Windows のコマンド プロンプト にて、 D:\syslinux.exe を以下のように実行する。 もちろん、引数の「D:」は USB メモリのドライブ名で読み替える。
D:\>syslinux.exe -ma D: D:\>
これで Linux 2.6.23.12 がブート可能な USB メモリができた。 このメモリをレッツノートに差して起動する。 BIOS 設定で USB から起動可能にしておくのを忘れずに。
ハードディスクが回転しないのであるから、 以下のメッセージが表示されて止まってしまうが、
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>キーを押すとセットアップを起動します。
ここで構わず <F1>キーを押すと、 USB メモリからの起動が始まる。
linux が起動すると /bin/sh が実行されてプロンプト「#」が表示されるが、 その後 USB メモリが認識されてカーネル・ログが出力される。
... PWD='/' ROOTPARM=' -o ro' TERM='linux' initrd='initz' /bin/sh: can't access tty; job control turned off # [ 31.556958] scsi 6:0:0:0: Direct-Access Multi Flash Reader 1.00 PQ: 0 ANSI: 0 [ 32.077952] sd 6:0:0:0: [sdb] 1006592 512-byte hardware sectors (515 MB) [ 32.079952] sd 6:0:0:0: [sdb] Write Protect is off [ 32.080089] sd 6:0:0:0: [sdb] Mode Sense: 03 00 00 00 [ 32.080094] sd 6:0:0:0: [sdb] Assuming drive cache: write through [ 32.085449] sd 6:0:0:0: [sdb] 1006592 512-byte hardware sectors (515 MB) [ 32.087574] sd 6:0:0:0: [sdb] Write Protect is off [ 32.087699] sd 6:0:0:0: [sdb] Mode Sense: 03 00 00 00 [ 32.087704] sd 6:0:0:0: [sdb] Assuming drive cache: write through [ 32.087830] sdb: sdb1 [ 32.090803] sd 6:0:0:0: [sdb] Attached SCSI removable disk [ 32.091527] usb-storage: device scan complete
プロンプトの後にカーネル・ログが出力されてしまっているため紛らわしいが、 Enter キーを押せばプロンプトが表示される。
このカーネル・ログでは [sdb] と表示されているが、 レッツノートに接続した USB デバイスが他にもあれば、 sdc や sdd になっているかもしれない。 その場合は、以下の sdb を sdc なり sdd なりで読み替えて欲しい。
以下のように mount コマンドを実行して、 USB メモリを /mnt へマウントする。 そして USB メモリ上の hdparm コマンドを実行してみる:
# mount -t vfat /dev/sdb1 /mnt # /mnt/hdparm -i /dev/sda /dev/sda: Model=Hitachi HTS541612J9SA00 , FwRev=SBDOC70P, SerialNo= SBXXXXXXXXXXXX Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4 BuffType=DualPortCache, BuffSize=7516kB, MaxMultSect=16, MultSect=?16? CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=234441648 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5 AdvancedPM=yes: mode=0x80 (128) WriteCache=enabled Drive conforms to: ATA/ATAPI-7 T13 1532D revision 1: ATA/ATAPI-2,3,4,5,6,7 * signifies the current active mode #
以上のように、 レッツノートのハードディスク (/dev/sda) の諸元が表示されれば成功である。 以下のように hdparm を実行して「Power-Up In Standby feature」を無効にすれば、 ハードディスクの復旧が完了する。
# /mnt/hdparm -s0 /dev/sda /dev/sda: spin-up: setting power-up in standby to 0 (off) #
後は、Ctrl-Alt-Del を押すなどして再起動すれば、 ハードディスクから正常にブートする。 USB メモリを抜くのを忘れずに。