2013年4月16日火曜日

hdd障害に一時しのぎ

2週間ほど前にhddにちょっとした不良セクタの塊ができました。 そのせいでwindows7が立ち上がらなくなりました。 とりあえず、簡単な応急処置をして復旧したので、そのときのメモを残しておきます。 自分が何を考えて何を試したのかをダラダラ書き捨てです。 文章としては面白くないでしょう。 同じような状態になった人のヒントや検索のキーワード探しなどに使っていただければ。

ちなみに、今でもそのまま使い続けてますが、1度こうなったという事はいつhddが完全に壊れるか分からない状態です。 同じような状況になって真似する人はそれを踏まえてどうぞ。

--------------------------------

ある日の夕方、Windows7で大きめのデータを圧縮しているとき、不具合が発生しました。 圧縮後のファイルの書き込みが終わらず、ハードディスクのアクセスランプが付きっぱなしの状態。 タスクマネージャも立ち上がらず、Ctrl-Alt-Deleteも効かなくなってしまいました。 仕方なく、そのままPCの電源オフです。

アーカイバの誤動作が多かったので「今回もそれかなぁ」とか思いながらPCの電源ON。

...アレ?

Windowsが立ち上りません。 もしかして、深刻?

とりあえず、Windows7のインストールディスクからの修復を試しました。 目立つ「今すぐインストール」ボタンの下、ひっそりとある「コンピュータを修復する」を選択です。 この分かりづらさにはなぜか悪意を感じますね。

で、システム回復オプションの最初の画面で表示されるはずのWindows7が表示されません。 不吉。

システム回復オプションの回復ツール選択画面で「スタートアップ修復」を選択。 一見上手くいったっぽいのにリブートしてもWindowsは立ち上ってくれませんでした。 しょうがないのでUSBメモリに入れておいたubuntuでHDDの状況を確認...

と思ったけど、ちょっと引っかかったことがあったので止めました。 最近いくつかフリーソフトを試したんですよね。 マルウェアだったらUSBメモリにまで影響する可能性もゼロではないです。 いや、まぁ「Windowsを壊して、USBメモリからLinux立ち上げたらそちらまで侵食して」なんてマルウェアがあるとは思えませんけど、気になってしまったらやる気になれないですよね? ってことでUSBメモリを使うのは中止。 ずいぶん前に用意した、Knoppix LinuxのライブCDで確認することにしました。

数回しか使ってないのになぜか懐かしい気がするKnoppix6.4のデスクトップがディスプレイに。 ファイルマネージャでHDDの中身を見ると、普通に見れました。 MBRとかパーティションテーブルとかが飛んでたんじゃないのか?

Knoppixにどんなツールが入っているか分からないけどとにかく管理ツールっぽいのを探してみました。 ディスクユーティリティを発見。 どうやらSMARTデータなるものが見れるようです。 HDDには245個のバッドセクタ在中。 やっぱりか。 日ごろからデータのバックアップは取ってあるんで、精神的なダメージは少なめでした。 どうせバックアップもあるし、飛んだら飛んだでそちらから復旧すればいいかな?

色々見ていくと、Current Pending Sector Countなるものが245になってました。 「ディスクにはほんの数個のバッドセクタがあります」というありがたいメッセージが表示されています。 「Windows起動しないのが問題でバッドセクタの個数なんて関係ないんだ」と心の中で嘆きながら他の表示を確認。 SMARTのセルフテストなんてものがありました。

実行。

すご~く時間がかかるのは予想できたのでセルフテストの実行中にブラウザでHDD復旧について検索しました。 とりあえずlinuxのddコマンドでMBRとPBRのバックアップを取っておくといいらしい。 で、Windows7のインストールディスクからシステム回復オプションの回復ツール → コマンドプロンプトを立ち上げて、次のコマンドを打ってみれば復旧するかもしれないようです。

(各ツールの応答は省略)
X:\Sources>diskpart             ... パスうろ覚え
DISKPART>list disk              ... 番号確認
DISKPART>select disk ?
DISKPART>list partition         ... システムパーティション(100MB)の番号確認
DISKPART>select partition ?     ... システムパーティションを選択
DISKPART>active
DISKPART>exit
X:\Sources>bootsect /nt60 sys /mbr
X:\Sources>bootrec /fixboot
X:\Sources>bootrec /fixmbr
X:\Sources>bcdedit              ... パーティション確認

本来は詳しく調べてから実行すべきコマンドなんでしょうけど、今回はバックアップがあるので当たって砕けるモードでok。 付け焼刃の知識で動かないpcに時間をかけるつもりはないので、ダメならダメで買い換えです。 セルフテストが終わったら決め打ちでコマンドを入れてリブートの予定。

セルフテスト中、MBRだけバックアップしました。 PBRの方は面倒なので省略。 MBRの中身を見ると「Invalid partition table.Error loading operating system.Missing operating system」というような文字列が。 とりあえずマルウェアにやられて変な文字列で埋められているような事はありませんでした。

修復コマンドの方もすぐに試したかったんですがSMARTのセルフテストが全然終わりませんでした。 なんか、終盤で止まっているような...? セルフテストは夕方から始めたんですが、24時を過ぎてしまいました。 でも、きっともうちょっとだから...

とここでまさかの操作ミス。 セルフテストをキャンセルしてしまいました。 自分に唖然です。 で、なぜか全く気落ちせずに冷静に回復ツールのコマンドプロンプトを試している自分が...

結果、

diskpart ... 成功?
bootsect /nt60 sys /mbr ... 失敗「システムデータがないよ」というような表示
bootrec /fixboot        ... 失敗
bootrec /fixmbr         ... 成功?

思わしくない結果です。 これでは復旧できないのか? と思いつつPC再起動。 やっぱりダメでした。

諦めきれずにもう1度インストールディスクのシステム回復オプションを表示。

アレ? windows7のシステムがある?

でも起動できなかったしな。 回復ツールのコマンドプロンプトを表示。 細かいことは考えずにさっきと同じコマンドを実行 → 再起動 → Windows起動失敗。

そしてもう1度インストールディスクのシステム回復オプションを表示するとwindows7のシステムが消えていました。 こりゃ例え復旧できたとしても長くないですね。

コマンドプロンプトでdiskpartのみ実行 → システムパーティションをactiveに → 再起動せずに回復ツールの「スタートアップ修復」を選択。

なんか根拠があってそうしたわけではないんですが、これでWindowsが起動できました。

なぜ? そして、いつまで使えるの?

とりあえずマルウェアのクイックチェックをしました。 これでHDDに余分なダメージが入って消えたらそれまで。 マルウェアに感染していて変に個人情報を振りまいてしまう事の方が大事ですよね? まぁ、たいした個人情報なんてないような...

マルウェアは無し、っと。 HDDには

  • windows7のシステムが入ったパーティション
  • 普段使用するデータ用のパーティション
  • データを格納するだけで普段は触らない倉庫用パーティション

の3つのパーティションがあります。 とりあえずシステム用パーティションとデータ用パーティションで chkdsk /r をして様子を見ましょう。 倉庫用パーティションは落ち着いてからで。

時間がかかりそうなのでHDD障害があった次の日にチェックしました。 システム用パーティションは前の日に電源を落とすときにchkdskの予約をしておきました。 起動中に chkdsk /r をできるのはデータ用パーティションだけですからね。 ということで電源を入れるときちょっとだけドキドキ。 しかし何事も無くWindowsが起動し、chkdskも通りました。 少なくともログには不良セクタなどの痕跡も無し。

データ用パーティションはchkdskが通りませんでした。 HDDのアクセスランプが付きっぱなしでチェックが進展せず。 これで「データ用パーティションのどこかに問題があった」っていうのは確定。 Windowsが起動しなかったってことを考えるとHDD全体が弱っている可能性もあるんですが、データ用パーティションの一部だけで不具合が発生している可能性も一応あります。 Knoppixから普通にデータが見れたことも併せて考えて、「一部の障害であって欲しいなぁ」などと願ってしまいます。 でもchkdskが通らないんじゃどういう障害なのかアタリも付けられませんね。

という訳でchkdskが通らないときでもHDDのチェックをできるようなツールを検索。 Windows7上のfirefoxで検索です。 firefoxはちゃんと動いてます。 なんか、chkdskとかアーカイバとか、でかいデータを触ってハズレを引かなければホント普通なんですよね。

検索の結果HD Tuneというツールがあることが判明しました。 HD TuneでErrorScanをすれば不良セクタのある位置が大まかに確認できるようです。 ちなみに有料版とフリー版があるようですがErrorScanをするだけならフリー版で済むっぽいです。

ErrorScanもKnoppixでセルフテストしたのと同じSMARTの機能を使ったチェックです。 しかし、こういうソフトは得てしてosにデフォルトで付いてくるソフトより障害対策で役に立つハズ。 とりあえず使ってみましょう → チェックできました。

HD TuneのErrorScan画面ではHDD全体が50×50マスのブロックで表されます。 HDDの総容量が1TBなので(KiB(1024)とKB(1000)の扱いがどうなっているかわからないけど)とりあえず1ブロックのサイズは381MBでした。 Damaged Blocksの位置は、

  • 323~326ブロック(だいたい123063MBの位置)
  • 355~356ブロック(135255MBの位置)
  • 1480ブロック(563880MBの位置)

です。 不良セクタがかたまっているのはデータ用パーティションの先頭あたりでした。 倉庫用パーティションでも1ブロックの不良があります。

SMARTのデータはこんな感じ。 なんか正常ではなさそうですね? ErrorScanのせいで不良セクタの数も増えてるし...

とりあえずデータ用パーティションの応急処置を。 パーティションを開放して不良セクタ周辺の50GBを未割り当て領域に、残りの領域をデータ用パーティションにします。 50GB無駄になるけど、不良セクタの周辺を触らないことで事態の悪化を遅らせられるかもしれないので、そういう処置です。 ケチらずに大きめに空けるべきだとか。 割り当て直したパーティションにはバックアップからデータをコピーしました。

あまり気にしても仕方がないので、これで普通に使ってみてダメなら買い替えです。 とはいえデータ用パーティションが信用できなくなったので何かを編集したときはバックアップ用HDDにデータを格納してデータ用パーティションにコピー。 アレ?

まぁ、世の中円安でHDDが高くなってるらしいですけど、新製品が出て今使っているようなHDDが少し安くなるまで持つといいですねぇ。 とか言いながらバックアップデータをコピーするときに嫌な数字も見えてしまいました。 データの転送速度が遅くなる部分があったんです。 普段の転送速度は40MB/s、これが場所によっては30MB/sにまで落ちてしまいます。 案外早く買い換えることになるかも?

数日後、倉庫用パーティションにもchkdsk。 1箇所で引っかかったけどなんとか通りました。 これでどのファイルが不良セクタを抱えているか確認できます。 chkdskのログには短いファイル名しか表示されないので「dir /x」で確認。 数百MBのファイルが1つ破損していました。 倉庫用パーティションは普段触らないので、データ用パーティションより状態の悪化は遅いはずです。 このファイルの応急処置をして、あとは普段どおり使って様子見をしましょう。

ファイルの中身の確認は失敗。 不良セクタにこれ以上触らないよう、そのファイルはリネームしておきます。 リネームはファイルのインデックスを書き換えるだけでファイルの実態には触りません。 リネーム後のファイルを読まないようにすれば不良セクタへの接触は避けられます。 バックアップ用HDDから同じものをコピーして、一応2つのHDDに破損前のデータがある状態にしておきました。 そしてリネームした破損ファイルへのアクセス権は削除。 バックアップソフトや誤操作で中身を見てしまうのを防ぎます。 これで一通りの処置は完了。