2011/08/24

V2V で Error Loading Operating System になったときの対処法

VMware の VMDK を、Virtual PC や Hyper-V の VHD 形式に何らかの方法 (SCVMM の V2V ウィザードなど) で変換したとき、その VHD を割り当てた仮想マシンが「Error Loading Operating System」と表示して、まったく起動しない場合があるようです。OS は、Windows Server 2003 や Windows XP のとき。


どうしたものかと悩んでいる方へ。こんな方法はいかがでしょう。仮想マシン環境だからできる方法です。


物理マシンなら、インストール メディアから回復コンソールを起動して、fixmbr や fixboot を実行して回復できるでしょう。Windows Vista 以降のインストール メディアを使用できる場合は、システム回復オプションのコマンドプロンプトを起動して、bootrec /fixmbr や bootrec /fixboot、bootsect /nt52 ALL とかでも回復できます。これが、VMDK から VHD に変換した仮想マシンの場合、どれもうまくいかないことがあります。Windows の修復インストールでも解消できません。

ちなみに、もう 1 つ別の VHD を割り当てて、その VHD にWindows Vista 以降をインストールし、Windows ブートマネージャーをインストールすれば、「以前のバージョンの Windows」から起動することはできます。その状態で bootsect /nt52 ALL を実行し、NT ローダーに戻すと、また 「Error Loading Operating System」になります。問題の VHD の MBR やブートセクターは、BOOTMGR はロードできるけど、NTLDR はロードできないみたいです。

試行錯誤の末、次の方法が最も簡単に問題を解決できると思います。

(1) まず、VHD のサイズをちょっとだけ (いっぱいでも OK ) 拡張します。


(2) サイズを拡張した VHD を「ディスクの管理」スナップインを使用してマウントします。
(3) マウントした VHD の Windows が入っているパーティションの残りの未使用領域またはほんのちょっとの領域のパーティションを作成し、NTFS でフォーマットして、アクティブとしてマークします。

(4) マウントした VHD の Windows が入っているパーティションのドライブから、boot.ini、bootfont.bin、ntdetect.com、ntldr の 4 つのファイルを、新しく作成したパーティションのドライブにコピーします。

(5) 「ディスクの管理」スナップインで VHD を切断し、仮想マシンを起動します。

(6) 無事起動すれば成功。右の画面のように、元の C: ドライブはそのまま、ブートローダーの環境だけを別ドライブ (この場合 E:) に移したことになります。

「Error Loading Operating System」が懐かしくなったら、DISKPART コマンドで C: ドライブのパーティションをアクティブに戻してください。


仮想マシンを Windows PE (Windows Vista 以降のインストール メディアから起動したシステム回復オプションなど) で起動して、仮想マシン内で操作することもできます。その場合は、次のようなコマンドラインで。VHD を拡張しなくても、DISKPART の Shrink コマンドで既存パーティションを縮小して空きを作る方法もあります。


X:\> DISKPART
DISKPART > LIST DISK (ディスク番号の確認)
DISKPART > SELECT DISK 0 (ディスク番号 0 の場合)
DISKPART > CREATE PARTITION PRIMARY (残りの領域にパーティション作成)
DISKPART > ACTIVE (作成したパーティションをアクティブにマーク)
DISKPART > ASSIGN LETTER=S: (適当なドライブ文字を一時割り当て)
DISKPART > FORMAT QUICK (NTFS でクイックフォーマット)
DISKPART > EXIT


作成したボリュームが新しいシステムボリュームになるので、ブートローダーをコピーしておきます。
X:\> XCOPY C:\boot.ini S:\ /h
X:\> XCOPY C:\bootfont.bin S:\ /h
X:\> XCOPY C:\ntdetect.com S:\ /h
X:\> XCOPY C:\ntldr S:\ /h

そういえば、仮想フロッピー ディスク (.vfd)に NT ローダーを入れて、フロッピーから起動する方法もありました。昔ながらの、緊急起動用フロッピー ディスクを、常時起動用に使うんです。

1 件のコメント:

  1. 素晴らしい解決法です!VMwareからProxmoxにWindows Server 2003を移行しようとするときに、Error loading opertating systemに遭遇しました。感謝感謝です。

    返信削除

注: コメントを投稿できるのは、このブログのメンバーだけです。