2012年01月03日

Windows7 の1個目のパーティションを壊した

SDカードのフォーマットをしようとして致命的なミスをした。

$ sudo mkdosfs /dev/sdb1 [リターン]

としてハッとした。
web 上の例題を見て、思わずそのまま売ってしまったのだった。
/dev/sdb は Windows7 をインストールしてあるドライブだった!
しまった!
と思ったが、コマンドが即座に終わってしまった。あれ?
たしか、windows7 のシステムはかなりでかかったはず...

調べてみたら、どうやら /dev/sdb1 は100MB 程度の隠しパーティションなのだそうだ。
Linux ばかりいじっている私は Windows7 のパーティションの構成など興味が無いから
最初からそんなことは知らなかったのだ。
結局は手持ちのWindows7 のインストールディスクとweb 上のリソースからリカバリ
できたので参考までにメモっておく。

まず、/dev/sdb1 (ハードディスクの最初のパーティション) に本来入るべきもので重要な
ものは、bootmgr というプログラムと Boot ディレクトリのしたの多数のファイル類。
これらはhttp://support.microsoft.com/kb/927392 によれば、インストールディスクで
リカバリを選択しても直らなかった場合にやることになっている
とりあえず、インストールディスクのリカバリ(GUIでリカバリをしてくれるプロセス
がある)をやってみると何かやってくれたようだが、どうも完璧では無さそうだった

そこで上の説明にある Bootrec プログラムをインストールディスクで立ち上げた先で
コマンドプロンプトから実行してリカバリした。

まず、
Bootrec.exe /fixmbr
    これは MBR を書き換えるのであろうと思う。今回の場合には関係ないがおまじない
 として実行。
その後、
Bootrec.exe /FixBoot
    これはPBRパーティションを更新する
 PBRは Partition Boot Record のことで、今回壊した1個目のパーティションの最初の
 レコードにあるそうだ。これを直すのだろう。
この後、再起動し、今度はDVD でなく、リカバリできたはずのHDDからブートさせた
しかし、ダメ。
もう一度インストールディスクから立ち上げて、再度リカバリの手順を画面から選択。
すると、今度は Chkdsk が動作し、その後リブートせよ、とのことだった。
多分、Bootrec.exe には他にコマンドのパラメータとして
/ScanOS と /RebuildBcd というのがあるけれど、多分GUIからこのコマンドが起動されて 
リカバリを完結させてくれたのであろう。

その後、HDDからブートしてみると Windows7 が起動された。
私の場合には、Linux とWindows7 の Dual Boot をしているのだけれど、このような場合
にはもちろん、Linux 側のHDD の電源は抜いておいて、ハード的にLinux が存在しない
ようにするのが最も簡単だと思う。

さらに、Windows7 がリカバリできたので、Linux側のGrub も書き直しが必要になった。
まあ、こんな作業に半日費やすことにならないように、ディスクのフォーマットは慎重に
やることにしましょう..




posted by tshibata at 18:14| Comment(0) | TrackBack(0) | パーティション