稼働中のWindowsXPを他のHDDに移植する(WindowsXP移植の儀 2010年版)

前提

参考サイト

概要

稼働中のOSをコピーして別のHDDに稼働可能環境を移植する場合、おおまかにわけて二つの問題がある

稼働中OSの中にユーザが触れないファイルがある

レジストリ類、ログイン中ユーザのユーザプロファイルファイルはそのままではコピーできない。さすがにここら辺のファイルがないとOSがまともに動かない。
対応:

  1. 別のOSを起動してそこからコピーする
  2. 強引なやりかた(ntbackupでレジストリを書き出す、コピー用に別のユーザでログインする)
HDDに書き込まれる署名(NTシグネチャ)の問題

署名はHDDを接続してWindowsXPで認識した時点で書き込まれる。
Windowsレジストリ内にドライブ名と署名とパーティションサイズの情報を持っており、それを参照してOS起動時のパーティションのドライブレターが決定される。そのため、既存OS環境で一度X:と認識されたパーティションは、そのまままるごとコピーした環境でもX:と認識され、新しいHDDで起動してもOS領域C:として扱われないため齟齬が生じる。
対応:

  1. コピー先HDDのNTシグネチャを消してからコピー先OSを起動する(この時、コピー元HDDを物理的に切り離す必要がある)
  2. コピーして作成したOSを起動する前に、レジストリを書き換える

作業内容

この文章では、「強引なやりかた」でOSのファイルコピーをしたあと、「レジストリを書き換える」方法について記述する。別のOSでコピーした場合はレジストリ編集だけやればいいです。

1.新しいHDDを接続してパーティションを切ってフォーマットする

ごみ箱ファイルとか出来るとフォーマット出来なくなる可能性があるので、ドライブごとの指定で無効化した方がいいと思う。

2.現在稼働中OSのファイルコピーを行う

稼働中のWindows 2000/XP/2003を別のHDDにコピーする方法の1)〜5)まで実行する。リンク先ではxcopyを使っているが、コピーできればなんでも良いと思う。わたくしはFastCopyを使って必要な分だけコピーした。

3.コピー先HDD上にあるレジストリを書き換える

レジストリ・ハイブをロードしてオフラインでレジストリを閲覧・編集する@ITを参照する。なかなか凄まじい内容だがリンク先に図と詳細な解説があり、作業はさほど難しくない。

  1. 「ファイル名を指定して実行」からregeditを起動
  2. ツリーから「HKEY_LOCAL_MACHINE」を選択した状態で「ファイル」->「ハイブの読み込み」を選択
  3. コピー先HDDの「%SystemRoot%\system32\config\system」を選択して開く
  4. キー名は「TMPCOPY」みたいな適当な名前をいれる
  5. 「TMPCOPY」以下に読み込んだレジストリが展開するので、「SYSTEM\MountedDevices」を開く
  6. キーの編集を行う(複数のOS | Windows NT/2K/XPの「Signature」と「volume GUID」参照)
    • 「\??\Volumeなんとかかんとか」のキーを全て消す(無い場合でも起動時に作成されるらしい)
    • 「\DosDevices\C:」のキーを名前の変更で「\DosDevices\X:」のように使っていないドライブレターに変更する
    • 元OSから認識されていたコピー先OSパーティションのドライブレターを含むキーの名前を「\DosDevices\C:」に変更する
  7. ツリーで追加した「TMPCOPY」を選択した状態で、「ファイル」->「ハイブのアンロード」を選択
  8. レジストリエディタを終了
4.マシン再起動

マシンを再起動して、BIOSのブートメニューから新しく追加したHDDを選択して起動する。
このやりかたの場合、既存のHDDを切り離す必要が無い。コピー先OSが起動した際に、レジストリの書き換えで置き換えたドライブ名として認識する。

制約

  • 新HDDの第一パーティションにコピーするケースでないとまともに動かない可能性がある。MBMとか使えば回避できそうだけど。
  • 既存HDDの第二パーティションに移行するような場合、boot.iniを編集する必要があると思うが、ここでは割愛する。
  • フォルダのマウントポイントは全部消える?
  • システムの復元ポイントも全部消える(別OSでまるごとコピーすれば消えないと思う)