Windons7のVirtualBoxでデュアルブート用のraw partitionにあるLinuxを起動させる

Pocket

修理に出していたノートPCが帰ってきたので、せっかくだからと今までデュアルブートにしていたWinodws7/Linuxのうち、Linux側をWindows7のVirtualBoxからも起動できるようにしようと思い立ち、やってみました。

まず、raw diskを認識させるためのvmdkファイルを作成します。具体的な方法はVirtualBoxのマニュアルに記載されています。VMBoxManageコマンドを使い、サブコマンドinternalcommands createrawvmdkを発行します。ディスクに直接アクセスするため、管理者権限が必要です。スタートメニューのアクセサリからコマンドプロンプトを右クリックして、管理者として実行を選択して、コマンドプロンプトを開きます。

スタートメニュー

VirtualBoxの各種コマンドには通常パスが通っていません。そこをカレントディレクトリとし、下記のコマンドを実行します。

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe internalcommands createrawvmdk ^
 -filename C:\VBox\rawdisk.vmdk -rawdisk \\.\PhysicalDrive0 ^
 -partitions 3

-filenameには、vmdkファイルのパスを指定します。すでにファイルが存在しているとエラーになるので注意してください。-rawdiskには、Windows形式のデバイス指定を実行します。\\.は自分のコンピュータを意味し、PhysicalDrive0は0番目に接続されたディスクを意味します。どのディスクが何番目にあるかはdiskpart.exeで確認できます。必要なら、Linuxの入っているパーティション番号も確認します。-partitionsオプションを指定すると、そのパーティション以外にはアクセスできなくなるvmdkが生成されるので安心です。

C:\>diskpart

Microsoft DiskPart バージョン 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
コンピューター: KARL

DISKPART> list disk

  ディスク      状態           サイズ   空き   ダイナ GPT
  ###                                          ミック
  ------------  -------------  -------  -------  ---  ---
  ディスク 0    オンライン           112 GB      0 B
  ディスク 1    オンライン            15 GB      0 B

DISKPART> select disk 0

ディスク 0 が選択されました。

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    プライマリ              100 MB  1024 KB
  Partition 2    プライマリ               92 GB   101 MB
  Partition 3    プライマリ               19 GB    92 GB

パーティションIDまではわからないので、サイズで推測してください。あるいは、Linux上でcfdiskなどを使ったほうが確実かもしれません。

以上を実行することで、C:\VBox以下にrawdisk.vmdkとrawdisk-pt.vmdk(-partitionsを指定した場合のみ)が生成されます。これを起動ディスクとして与えます。

仮想マシンの作成時も、管理者権限が必要です。スタートメニューからOracle VM Managerを右クリックして管理者権限で起動させ、新規ボタンを押して仮想マシンを作成してゆきます。途中で、仮想ハードディスクを選択するダイアログが出てくるので、ここで既存のハードディスクとして先ほど作成したrawdisk.vmdkを選択します(rawdisk-pt.vmdkは間接的に参照されるので、指定する必要はありません)。

VBox file dialog

あとは、起動ボタンを押せば普通に起動します。ただ、実マシンとして起動したときと比べると、速度はあまり早くありません。どうもBIOS経由のディスクI/Oが特に遅いようです。これについての原因はよくわかっていません。

raw diskへのアクセスが必要なため、この仮想マシンを起動するときは常に管理者権限が必要なようです。この点に気をつけてください。

ポートフォワーディングの設定をすれば、sshでのアクセスも可能です。以下は設定例です。

VBox port fw

Windows側をハイバネーション(休止状態)するときは、気をつけてください。私は昔、同様の環境をcoLinuxで構築したことがあり、Windowsマシン上の仮想マシンでext3をマウントしたままリアルブートして、ファイルシステムを完全に破壊してしまったことがあります。休止状態にするときは、必ず仮想マシンをシャットダウンさせましょう。

この記事も含め、このブログでの内容は無保証です。これらを参考に何かを実行し、ディスクなどに被害が出ても当方は保証しません。と今更書いておきます。ファイルシステム破壊はやってしまうと本当にへこむので気をつけましょう。

追記(2012/8/27):

cmd.exeの複数行入力のための制御文字は\でなくて^でしたので、そこを直しました。

あと、やはりディスクI/Oが遅いのはBIOS経由の読み書きだけのようです。いずれベンチマークを実行した結果を記事にします。

ブートローダーにgrub/grub2を使っていると、savedefaultsの設定がそのまま有効になるので、一度仮想マシン上で起動すると、次回のWindowsの起動時にデフォルトで選択されるOSがLinuxのに代わってしまいます。再起動時には気を付けましょう。