Windows Vistaを稼働しているマシンのハードディスクが手狭になったので、少し大きなHDDに換装した。いつものように、バックアップのページに書いてある、ディスクイメージを吸い出して、新しいHDDにコピーする方法で行ったのだけど、すんなり行かなかった。ブートローダ回りが、Windows XPとは異なっているためのようだ。
Vistaは、GUIが綺麗になったことと、デバイスドライバが圧倒的に不足していること以外はXPと変わらないように感じていたが、思わぬところに手が入っている。(多分、乗り換えのハードルを下げる目的で、Windows同士のマルチブートを拡張したのだと思うけど)
やったのは、以下の方法。
- knoppixでCDブートする
- 新しいHDDのヘッダ、セクタを古いのに合わせ(LBAにした)、シリンダ数が同じパーティション(hda1)を作成
- 古いC:に当たる/dev/hda1をddで吸い出して、新しいHDDのhda1にddで上書き
- 古いC:のMBRを吸い出し(dd if=/dev/hda of=mbr.img bs=446 count=1)て、新しいHDDに上書き
- 新しいHDDのhda1(C:になる)をntfsresizeで容量一杯まで拡張
でリブートしてみると画面が真っ黒なまま動かなくなってしまった。Windowsのファイルチェックが走るはずなのだけどダンマリだ。
BIOSがおかしいのか、とか、ウィンドウズがおかしいのか、とか、ゴミが入っていたのか、とか、問題を切り分けるためにいくつか条件を変えていじってみたのだけど上手く行かない。これにより絞った条件で再度検索してみたら、Vistaになってブート回りが変わっているようだ、ということが分った。
XPまでは、MBR → active partitionのboot record → C:\io.sys だったはず。最後のも、パーティションの相対ジオメトリ決め打ちであったので、インストールに依存しないコードであった。現状は画面が真っ暗になることからMBRは通過している風なので、アクティブパーティションのブートレコードがインストール依存になったようだ。
ということで、更に調べると、中身で何をやっているかは分らなかったけれど、マイクロソフトのサイトにブートレコードを書換えて解決する方法が見つかった。昔は何もできなかった、インストールディスクからの回復コンソールで、以下ができるとのこと。
- マスターブートレコードの書換え (Bootrec.exe /FixMbr)
- アクティブパーティションのブートレコードの書換え (Bootrec.exe /FixBoot)
- C:ドライブのブートメニューの再構成 (Bootrec.exe /RebuildBcd)
上記の1、2をやり直して、上の3つを行うとブートできるようになった。(素晴しい。だけど、回復コンソールでは「自動回復するか」とか言ってくるので実行してみると、「できたっ!」とか言う癖に、実際には直らない。手動で上記を打たないとならない。)
だけど、その後4をやるとやっぱり駄目だ。回復コンソールすら上がらなくなる。どうやら、VistaのNTFS自体が少し変わっていて、私の手元のntfsresizeが古いために(多分パーティション情報かブートコード近辺に)互換性がないようだ。更なる検索を行い、Vistaでは自分でドライブの拡張と縮小ができるようになっていることが判明した。
仕方がないので、もう1回1と2をやり、Bootrecをやり、Vistaでドライブボリュームを拡張し、ようやく終った。
それにしても、Vistaは良く分らないほどディスク容量を食っている。