VirtualBoxでBootcampパーティションのWindowsを起動する

この記事は Oracle VM VirtualBox を使用して、Bootcamp パーティションにインストールされた WindowsXP を Mac OS X 上で仮想マシンとして起動するためのメモです。

2012年04月04日に記事を修正しました。

作業環境

この作業は以下の環境で行いました。

  • MacBook Air(Late2010) / Mac OS X 10.6
  • VirtualBoxのバージョン: 4.0.4
  • Bootcamp OS: Microsoft Windows XP SP3(Bootcampでインストール

注意事項

  • VirtualBoxで仮想マシンを一時停止させた状態でBootcampを起動させないで下さい。必ず、仮想マシン上でWindowsを終了してください。
  • この作業は物理ディスクおよびパーティションをディスクイメージ化するためデータが破損する危険性があります。作業前のバックアップはもちろん定期的なバックアップもおすすめします。
  • VirtualBoxのバージョン、使用するWindows OSの種類やバージョンによって正しく動作しない可能性があります。
  • Windowsライセンス認証の問題が発生する場合があります。煩わしい場合はVMwareやParallelsの使用をおすすめします。
  • ブログの移動に伴い記事を再編集しています。その際に誤って更新されている部分があるかもしれません。
  • 自己責任でどうぞ(´・ω・`)

作業の流れ

以下は Bootcamp にインストールされたOSが WindowsXP だった場合の手順です。 Windows7 の場合、RAWディスクイメージの改造は必要ないかもしれません。RAWディスクイメージ(-pt.vmdk)を改造する際に バイナリエディタ が必要になります。この時点で「無理っぽい」と思われる方は手を出さないほうが無難かもしれません。

  1. Bootcampパーティションの権限変更
  2. Bootcampパーティションのアンマウント
  3. Bootcampパーティションのディスクイメージ作成
  4. RAWディスクイメージ(-pt.vmdk)の改造
  5. 起動用AppleScriptの作成

VirtualBox の入手先

VirtualBox と VirtualBox Extension Pack は以下からダウンロード出来ます。 VirtualBox Extension Pack はストレージデバイスなどを USB 2.0 で動作させるために必要なプログラムです。日本語サイトは概要ページはあまり更新されていませんがダウンロードページは更新されています。尚、インストーラーはどちらからダウンロードしても言語に日本語を選択出来ます。インストールに関しては特に難しくは無いので説明は省略します。

Oracle VM VirtualBox(英語概要)
Oracle VM VirtualBox(日本語概要)

Bootcamp の WindowsXP で ハードウェアプロファイル を作成しておく

VirtualBox と Bootcamp ではハードウェアの仕様が異なるので万が一の時のために ハードウェアプロファイル を別に用意しておきます(実際これで助かった経験があります)。

  1. [コントロールパネル] の [システム] で [ハードウェア] を開きます。一番下の [ハードウェアプロファイル] をクリックします。

  2. [コピー] をクリックします。

  3. 新しい ハードウェアプロファイル の名前を入力して [OK] を押します。

既存の ハードウェアプロファイル の名前を変更したり、優先順位を変更する場合はお好みで。 VirtualBox での起動は新しく作成した ハードウェアプロファイル から行います。

物理ディスクのパーティションをイメージ化する

Bootcampパーティションをディスクイメージにします。BootCampパーティションは物理パーティションで普通のディスクイメージとは異なりますが VirtualBox では物理パーティションをディスクイメージにすることも可能です。

BootCampパーティションの場所(識別子)を調べる

まず最初に ディスクユーティリティ を使って Bootcamp のパーティションがディスクのどこにあるのか確認します。 ディスクユーティリティ または ターミナル で diskutil list コマンドを使用します。以下の画面では [disk0s3] になっています。

ディスクユーティリティ ディスクユーティリティ

Bootcampパーティションの権限を変更する

以降、Bootcampパーティションの位置が disk0s3 として進めていきます。

ターミナルを開いて chmod コマンドで権限を変更します。777 は「読込」「書込」「実行」全ての許可を与えるという意味です。権限を変更する場合は sudo が必須です。

sudo chmod 777 /dev/disk0s3

Bootcampパーティションのアンマウント

Mac OS X と Windows の間でデータの読み書きが発生するとパーティション壊れる可能性があるので アンマウント します。ディスクユーティリティ または ターミナル で diskutil unmount コマンドを使用します。

diskutil umount /volumes/bootcamp

VBoxManage で RAWディスクイメージ を作成する

物理ディスクのイメージを作成するには vboxmanage コマンドを使用します。 VBoxManage のコマンドの詳細は VirtualBox のマニュアルに記載されていますのでそちらを参照して下さい(英語版しかないかもしれません)。オプションの意味は以下を参考にして下さい。物理ディスク、パーティションの位置は環境によって異なります。

-rawdisk
物理ディスクを指定する
-filename
作成するディスクイメージの名前を指定
-partitions
物理ディスクのパーティションを指定する


以下は「disk0 の 3番目のパーティションのディスクイメージを /Users/USER_NAME/ に『windowsxp.vmdk』という名前で作成する」という意味です。

sudo vboxmanage internalcommands createrawvmdk -rawdisk /dev/disk0 -filename /Users/USER_NAME/windowsxp.vmdk -partitions 3

ディスクイメージの所有者を変更する

ディスクイメージの所有者を自分に変更します。「windowsxp.vmdk」と「windowsxp-pt.vmdk」の2つが作成されているはずなので両方とも変更します。ワイルドカードを使って全て変更することも出来ます。

windowsxp.vmdk と windowsxp-pt.vmdk を変更
sudo chown USER_NAME ~/windowsxp.vmdk
sudo chown USER_NAME ~/windowsxp-pt.vmdk
全ての *.vmdk を変更
sudo chown USER_NAME ~/*.vmdk


所有者が自分になっているか ls -l コマンドで確認します。

ls -l ~/*.vmdk

ディスクイメージを改造する

Windows7 の場合はこの作業は必要ないかもしれません。

出来上がったディスクイメージは仮想マシンで起動出来る状態なので一度ディスクイメージを登録して起動させてみます。 Windows7 なら起動出来るかもしれませんが、恐らく WindowsXP の場合はエラーが出て立ち上がりません。無理矢理起動しようとしても [UNMOUNTABLE_BOOT_VALUME] エラーでストップするので止めておきましょう。これを解決するためにこれからディスクイメージを改造します。

Bootcamp Windows on VirtualBox Bootcamp Windows on VirtualBox

VirtualBox で作成した -pt.vmdk と VMware で作成した -pt.vmdk の違いについて

VMware で作成したディスクイメージは問題なく起動しますが VirtualBox で作成したディスクイメージは何故か起動しません。 ターミナル で file コマンドと hexdump コマンドを使って windowsxp-pt.vmdk の中身を確認してみたところ以下のような違いがありました。

VirtualBox で作成した windowsxp-pt.vmdk
file windowsxp-pt.vmdk
x86 boot sector, Microsoft Windows XP MBR, Serial 0x65e8;
partition 1: ID=0xee, starthead 0, startsector 1, 409639 sectors;
partition 2: ID=0xaf, starthead 13, startsector 409640, 169869312 sectors;
partition 3: ID=0x7, active, starthead 20, startsector 170543104, 66433024 sectors,
code offset 0xc0
hexdump file windowsxp-pt.vmdk
00001b0 00 00 00 00 00 2c 44 63 e8 65 00 00 00 00 00 00
00001c0 02 00 ee 0d 4e 35 01 00 00 00 27 40 06 00 00 0d
00001d0 4f 35 af 14 ff ff 28 40 06 00 00 00 20 0a 80 14
00001e0 ff ff 07 14 ff ff 00 48 2a 0a 00 b0 f5 03 00 00
VMware で作成した windowsxp-pt.vmdk
file windowsxp-pt.vmdk
x86 boot sector, Microsoft Windows XP MBR, Serial 0x65e8;
partition 1: ID=0x2d, starthead 0, startsector 1, 409639 sectors;
partition 2: ID=0x2d, starthead 13, startsector 409640, 169869312 sectors;
partition 3: ID=0x7, active, starthead 20, startsector 170543104, 66433024 sectors,
code offset 0xc0
hexdump file windowsxp-pt.vmdk
00001b0 00 00 00 00 00 2c 44 63 e8 65 00 00 00 00 00 00
00001c0 02 00 2d 0d 4e 35 01 00 00 00 27 40 06 00 00 0d
00001d0 4f 35 2d 14 ff ff 28 40 06 00 00 00 20 0a 80 14
00001e0 ff ff 07 14 ff ff 00 48 2a 0a 00 b0 f5 03 00 00

VMware で作成した windowsxp-pt.vmdk は [partition 3: ID] が 0x2dに書き換えられてます。これは GUIDパーティションテーブル というもので、よくわかりませんが以下のように決まっているそうです。詳しくは インプレスジャパンの記事 か Wikipedia の GUIDパーティションテーブル をどうぞ。

  • 0xEE:GPT
  • 0xAF:Mac
  • 0x07:はWindowsXP
  • 0x2D:?


この パーティションID を 0x2d に書き換えることが今回の最も重要なポイントになります。この方法は VirtualBox のフォーラム で「VMware Magic」や「VMware Trick」と呼ばれていました。

-pt.vmdk を バイナリエディタ で編集する

VirtualBox で作成した windowsxp-pt.vmdk を バイナリエディタ で編集します。VMwareのディスクイメージを参考に eeaf になっている場所を 2d に書き換えます上書き保存します。出来上がった改造ディスクイメージを VirtualBox の仮想マシンに再登録します。

バイナリの編集には HexEdit が簡単でした。 ターミナル でも出来るそうです。

起動用AppleScriptの作成

AppleScript

Mac OS X を再起動すると Bootcamp のパーティションの権限とマウント状態が元に戻ります。その都度「権限変更→アンマウント」を繰り返さなくてはいけないので起動用の AppleScript を作成します。スクリプトの作成には AppleScriptエディタ を使用します。どこにあるかわからない方は Spotlight で検索してみて下さい。

権限変更の際のパスワード入力を省略させることも出来ますが、知らない人に起動されても困るので省略にはしていません。 vboxmanage startvm で指定の仮想マシンを起動させることが出来ます。

do shell script "chmod 777 /dev/disk0s3" with administrator privileges
do shell script "diskutil umount /volumes/bootcamp"
do shell script "vboxmanage startvm 'BootCamp'"

一度スクリプトを実行した後はMac OSを再起動するまで権限とマウント状態はそのままですので、VirtualBox GUIから仮想マシンの起動・停止・終了ができます。

ヘルプ

起動しない場合

仮想マシンの設定で IDEコントローラ などを見直して下さい。

IDEコントローラタイプ
ICH6(ホストI/Oを使用)
ネットワークアダプタ
Intel PRO 1000/MT Desktop


関係ないかもしれませんが、作業の途中にBootcampで起動している状態の WindowsXP に MargeIDE をインストールしました。必要あったかどうかは不明ですが、もし起動しない場合は入れてみると改善するかもしれません。

「かな」と「英数キー」の動作がおかしい場合

これは Bootcamp で使っているキーボードと VirtualBox で使っているキーボードが異なるからです(VirtualBoxにWindowsを直接インストールした場合は特に問題ありません)。一番困るのが半角と全角の切り替えですが Google日本語入力 などを入れて変更しておくといいでしょう。

直接入力 Hankaku/Zenkaku IMEを有効化
入力文字なし Hankaku/Zenkaku IMEを無効化
変換前入力 Hankaku/Zenkaku IMEを無効化
変換中 Hankaku/Zenkaku IMEを無効化

仮想マシンがいきなり起動しなくなった場合

ネットワークアダプタ で [ブリッジアダプタ] を使用しているときに起こりがちです。仮想マシンを休止している状態で Mac OS X のネットワークを有線から無線に変更したりすると仮想マシンが起動しなくなることがあります。仮想マシンの設定で ネットワークアダプタ を変更すれば起動するようになります。

USBデバイスを仮想マシンに接続させたい場合

VirtualBox

外付けHDDなどは Mac OS X でマウントされていると仮想マシンでは使用出来ません。また、仮想マシンで使用するUSBデバイスは事前に登録しておく必要があります。仮想マシンの設定で ポート を開いて仮想マシンで使うデバイスを登録しておきます。登録したら一度USBケーブルを取り外し、再度接続することで仮想マシンで認識出来るようになります。

データの保証はしませんが、 NTFS でフォーマットされたパーティションの読み書きを仮想マシンを経由させて行うことも可能です。

[USB 2.0 (EHCI) コントローラ] を使用するには Oracle VM VirtualBox Extension Pack が必要です。Oracleのサイトから別途ダウンロードして下さい。

キーボードレイアウトがUS仕様になる場合

VirtualBox で Bootcampパーティションの Windows を起動するとキーボードレイアウトが US仕様 になることがあります。詳しくは 「コンピューターに USB キーボードを接続したときに Windows Vista で正しいキーボード レイアウトが使用されないことがある」 を参照して下さい。

これはレジストリを編集することにより修復出来ます。レジストリから以下のキーへ移動します。

HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Services¥i8042prt¥Parameters

[kbd101.dll] になっている場合は [kbd106.dll] に変更します。

LayerDriver JPN REG_SZ kbd101.dll
LayerDriver JPN REG_SZ kbd106.dll

変更したらWindowsを再起動します。

Trackback