起動しなくなったノートPC(WindowsXP)からデータ復旧、というか復活

嫁さんのノートPC(5~6年前に買ったWindowsXPマシン、LaVie LL350というやつ)が起動しなくなりました。
ちょっと前から起動後にすぐ電源が落ちる、といった症状がまれに出ていたのですが、そのまま使っていたらついに立ち上がらなくなってしまいました。
通常起動でもセーフモードでも、起動はするのですが起動シーケンスの途中で一瞬ブルースクリーンになって電源が落ちる感じです。

あれやこれやしていたら、とりあえず以前の状態に戻せたので、それまでの経緯をメモします。
(ちなみに、嫁さんが使っていたものなので、raidとか暗号化とか複雑なことはしていませんでした。)

ディスクイメージのサルベージ

まず、症状からハードディスクの故障が考えられたので、できる限り壊れたハードディスクの中にあるデータを吸いだして、他のPCに移す方法を考えました。
デスクトップPCなら、故障したハードディスクを別のPCにつないで外部ディスクとしてデータを救い出す方法がありますが、今回はノートPCでハードディスクを取り出すのが面倒だったので、CDのみで動作できるLinuxを起動して、内蔵ハードディスクの情報を別の外付けハードディスクに吸い出す方法にしました。

Linuxディストリビューションの選定

使ったLinuxのディストリビューションは以下の通り。CDのみで動作して、比較的新しいもので、日本語もいけそうな以下のものにしました。なお、UbuntuのLive CD版も試したのですが、動きませんでした(PCのスペックが追いついていない?)。
Puppy Linux 4.3.1日本語 http://openlab.jp/puppylinux/

後で調べてみたらこういうときはKNOPPIXを使うケースが多いみたいでしたが、私はPuppy Linuxで出来ました。
あとTrinity Rescue Kitも試したのですが、CDを焼くのに失敗したのか、上手くできなかったので結局使いませんでした。

Puppy Linuxの起動

BIOSでPCのブート順がハードディスクより先にCDが起動するようになっていることを確認し、Puppy LinuxのCDを入れて起動すると次のような画面が現れます。
Puppy Linux起動画面
故障したハードディスクにアクセスするのは症状を悪化させるおそれがあるので、”Puppy Linux on RAM only”を選んで、ディスクアクセスが発生しないモードで起動しました。

途中、以下のような画面がでますが、”Xvesa”を選んだほうがよさそうです。
Xサーバ選択

起動するとこんな感じ。
Puppy Linuxデスクトップ
左下にsda1、sda2、sda3と見えるのが内蔵ハードディスクの論理ドライブです。パーティションは壊れていないようです。
あ、このドライブのアイコン、クリックしてはダメです。クリックするとマウントしようとします。故障したドライブをマウントすると被害が広がる可能性があります。
ちなみにPuppy Linuxのこの画面のデフォルト動作はシングルクリックで「実行」です。選んだだけのつもりでクリックすると実行されてしまうので注意してください。

外付けハードディスクを接続

外付けハードディスクを接続してください。(起動時につないでいても構いませんが、どれが内蔵か外付けか、間違えないようにしてください。)
接続すると内蔵ハードディスクとCDドライブを表すアイコンの横に、sdb1等と外付けハードディスクを表すアイコンが現れます。

外付けハードディスクをマウント

上記画面の上の真ん中に「端末」というアイコンがあります。それをクリックしてコンソールで作業をします。
外付けハードディスクのアイコンをクリックすることでマウントはできますが、私の場合、read onlyでマウントされた(気がした)ので、read writeできるようにコンソールから手動でマウントします。

mount /dev/sdb1 /mnt/sdb1

(/mnt/sdb1がなければmkdirで作ってください。なお、外付けハードディスクは事前にntfsにしておいた方がよいでしょう。fat32だと、故障したドライブが4GByte以上の時、ファイルに書き出せません。)

エラーメッセージがでなければ、ls /mnt/sdb1などとしてちゃんとマウントできているか確認してください。
エラーメッセージがでた場合、アイコンを右クリックしてアンマウントしたり、コマンドでumount /dev/sdb1としたり、umount -r /dev/sdb1などとしてからやり直してください。

故障したディスクの内容を吸いだす

fdisk -l

などで容量を確認して、/dev/sda1に全部入っている(他はリカバリー領域)ことが分かったので、/dev/sda1のディスクイメージだけ取り出します。

dd if=/dev/sda1 of=/mnt/sdb1/hdd.img bs=512 conv=sync,noerror
※ddコマンドはif(input file)で指定するものとof(output file)で指定するものを逆にすると取り返しのつかないことになるので十分注意してください。

このコマンドで、外付けハードディスクのルートディレクトリにhdd.imgというファイルが生成されます。これがディスクイメージです。
なお、問題のある/dev/sda1がマウントされている状態だとddコマンドで時間がかかるようなので、マウントしていない状態で実行した方がよいでしょう。
ddコマンドがエラーでどうにもならないようなら、ddrescueというコマンドがあります。私が使ったPuppy Linuxには入っていないようでしたが、KNOPPIXなら入っていそうです。

ディスクイメージの確認

ディスクイメージが取れてしまえば、ひとまず安心です。
ちゃんと取れたかどうか、ディスクイメージをマウントして確認します。

mount -o loop /mnt/sdb1/hdd.img /mnt/data

この後、ls /mnt/data等として内容が確認できれば救出成功です。
なお、破損がひどい場合、ちゃんと読めない場合があると思いますが、バイナリエディタ等で確認してそれっぽいデータがあるようなら、別のツールを使って救出できるかもしれません。(やったことないのでここでは触れませんが。)
ファイルが見えるようなら、

cp -r -p /mnt/data/important_directory /mnt/sdb1/backup

などで必要なファイル/ディレクトリをhdd.imgの中から外付けハードディスクにコピーしてください。このようにコピーしておけば、他のPCにこの外付けハードディスクをつないで普通に参照できます。
#hdd.imgを他のUNIX系PCでマウントして、sambaでネットワーク共有してもよいです。

不良ドライブの復旧

と、ここまでで必要な作業が終わったので、新しいパソコンのセットアップでもすればいいのですが、壊れたハードディスクでも不良セクタを使わなければまだ使えるのではないか、と思っていろいろやってみました。
セクタ不良の警告
ちなみにこれは、壊れたハードディスクにてWindowsXPの復旧を試みた時の画面。
不良セクタが発生しているのがわかります。

ハードディスクのフォーマット

引き続きPuppy Linuxにて。
Linuxでハードディスクをフォーマットするmkfsコマンドに、不良セクタを使わなくするオプションがあるようなので、それを使って問題のドライブを初期化します。

mkfs -c -t ntfs /dev/sda1

mkfsをしたら、不思議とそれまでハードディスクから発生していたキュルキュルした異音が止まりました。
なお、あとでmkfsのヘルプメッセージを見たら、-cには違う説明があったり、最終的にext2でフォーマットされていたりといった感じなので、対象のドライブにmkfsをかければなんでもいいのかもしれません。

ディスクイメージの書き戻し

hdd.imgをそのまま/dev/sda1に書き戻します。これをやるのであればmkfsは不要なのではないかという気もしますが、私はうまくいきました(^^;

dd if=/mnt/sdb1/hdd.img of=/dev/sda1 bs=4096
※繰り返しますが、ddコマンドはif(input file)で指定するものとof(output file)で指定するものを逆にすると取り返しのつかないことになるので十分注意してください。

容量などにもよりますが結構時間がかかります。夜寝る前に仕込んでおくといいかもしれません。
ddがエラーなしで終了したら、CDを取り出して再起動してください。
もしエラーが発生したら、がんばって原因を取り除くか、dd以外のコマンドを探すか、諦めてください(^^;

Windows起動

再起動するとこんな感じの画面が出て、ディスクチェックを始めます。
(うちのマシンはこの時にキュルキュル異音が復活しました。。。)
WindowsXPチェックディスク
ディスクチェックはスキップできそうなので、不安な方はスキップするとよいでしょう。
ディスクチェックが無事終了するとWindowsが前の状態で起動すると思います。
が、バックアップはお早めに。

補足

調べていて見つけたこのようなケースでもディスクイメージさえ取得できれば、データはある程度復旧できるんじゃないかと思います。
(もう回答は締め切られたので、何もコメントできませんが。)

イメージファイルにしてあれば、上記のようにマウントしたり、ddコマンドで別のHDDにイメージをコピーしたり、イメージファイル自体のバイナリを自力orツールで解析してファイルを回収することも可能と思います。自力でバイナリを解析する場合、NTFSならこちらやそこで触れられているInside Windowsなどの書籍などにあるような対象のファイルシステムの知識が必要です。

参考にさせていただいたサイト(感謝!)

2 Comments

  1. お世話になります。
    HPmini1000が起動しなくなり、こちらの記事を参考にさせて頂きました。
    大変ありがとうございます。

    HDの中味はパーティションぜんぶ
    問題なしですが)問題は起動しないことで。
    Puppy LinuxをDVDにして、mini1000につないだ、外付けDVDから
    見ることができました。

    ところが、外付けHDDをつないでも(認識はしていますが)
    画面上にアイコンがでてきません。
    どうしてか、お教え願えませんでしょうか?

    よろしくお願い申し上げます。
    ご多用中とつぜんのお伺いでほんとうに
    申し訳ありません。よろしくお願い申し上げます。

    ☆♪岡田好惠

  2. 記事をご覧頂きありがとうございます。
    すぐに手元に環境を用意できないので、取り急ぎ下記リンクをご紹介いたします。

    http://openlab.jp/puppylinux/man-jp/manual/puppy217/6_setup_hardware.html
    の「6.3 USBスティック/外付けハードディスク」や、
    http://openlab.jp/puppylinux/howto1.html
    の「7:GUIによるドライブのマウントとアンマウント」のあたり
    を参考にしてみてください。
    (お使いのPuppy Linuxのバージョンによって多少用語が異なるようですのでご注意ください。)

    なお、外付けHDDが利用可能な状態(フォーマット済み)かとか、
    そういった点もチェックポイントになると思います。

    もし状況が変わらないようでしたら、お手数ですがまたコメントください。
    その際、Pmountで表示される内容(mountコマンドの出力結果)や
    お使いの外付けHDDの情報(型番、機種名など)をいただければ、的はずれなアドバイスにならずに済むと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*