Posted at

物理ディスクにインストールされたWindowsを物理ディスクのままLinux上のVirtualBoxから起動

More than 1 year has passed since last update.

過去にやってみたことの記録。


動機

WindowsがインストールされたPCを使っていたが、Linux環境のほうが好都合なことが増えて、Windows環境が必要な理由がゼロではないもののそんなになかったので、BIOSから起動するOSをLinuxにすることに。

Windows環境が必要になった時にLinux環境をシャットダウンするのが不便に思ったので、LinuxとWindowsのデュアルブートにはしないで、Linux環境を起動したままLinux上のVirtualBoxからWindowsを起動できるようにすることを狙った。

念の為に、Windowsは物理ディスク単体でBIOSから起動できる状態を維持。

私が扱ったWindowsとLinuxのバージョンは

 Windows Vista 32bit

 Ubuntu 14.04 64bit


事前の状況


  • WindowsがインストールされたHDDを外して、新規HDDをマザーボードに接続しそれにUbuntuをインストールした。

  • UbuntuにVirtualBoxをインストールした。(apt-getなどにより)

  • WindowsがインストールされたHDDをSATAでPCに再び接続した。


    • USB外付けでもおそらくOK(未確認)。




手順

以下、Ubuntu上での操作。


  1. VirtualBoxをroot権限で起動する。


    • 物理ディスクへのアクセスのためにroot権限が要るので、VirtualBoxもroot権限で起動しておく。


      • 普段使いのユーザに物理ディスクへのアクセス権を与えれれば、root権限は要らないだろう。





  2. windows用の仮想マシンを作成する。


    • Windowsバージョンなどを適切に設定する。

    • 仮想ディスクはこの後作成するので、この時点では作成しない。



  3. 作成した仮想マシンの設定を変更する。設定ウィンドウの「システム」を開いて、、、


    • 「マザーボード」タブで、”I/O APICを有効化”と”ハードウェアクロックをUTCにする”にチェックを入れる。


      • ”I/O APICを有効化”は、物理ディスクにインストールされたWindowsを起動するために必須のようだ。



    • 「プロセッサー」タブで、CPUがPAE/NX対応なものであれば、”PAE/NXを有効化”にチェックを入れる。

    • 「アクセラレーション」タブで、CPUがVT-xやAMD-Vに対応していれば、”VT-x/AMD-Vを有効化”にチェックを入れる。



  4. Windowsがインストールされた物理HDDを参照する仮想HDDを作成する。(参考: http://hrn25.sakura.ne.jp/win/virtualbox-rawdisk/virtualbox-rawdisk.html


    1. Windowsがインストールされた物理HDDのパスを把握する。以後、/dev/sdbだとする。


      • sudo fdisk -l



    2. rawdiskイメージファイル(vmdk)を作成する。



      • sudo /usr/bin/VBoxManage internalcommands createrawvmdk -filename (好きな場所へのパス)/rawdisk0.vmdk -rawdisk /dev/sdb


        • /dev/sdbにアクセスするためにroot権限が必要







  5. VirtualBoxのWindows用仮想マシンに、今作成した仮想HDDを割り当てる。


    • 仮想マシンの設定で「ストレージ」を選び、 IDEコントローラに 上記仮想HDDを追加する。


      • 実際にはSATAで接続していても、ここではIDEコントローラにぶら下げる。でないとWindowsが起動しない。





  6. 仮想マシンを起動。Windowsが無事起動したらめでたし。

以後、上記仮想マシンを起動するときはVirtualBoxをroot権限で起動する。


備考:Windowsがインストールされた物理HDDのパスについて

上記では/dev/sdbを指定したが、/dev/sdX形式はPC起動やHDD接続のたびに変わる可能性があるとのことなので、できればディスクに固有のIDを使って指定できると好都合。

udevを使って設定を書けば実現できるようだが、そこまでやらなかった。

参考:例えば http://network.station.ez-net.jp/server/linux/storage/fix-scsi.asp


トラブルシューティング


Windows起動途中でブルースクリーン(BSOD)になる

セーフモードで起動した場合にはcrcdisk.sysドライバがロードされた直後にBSODになる。


対処法

https://www.virtualbox.org/attachment/wiki/Migrate_Windows/MergeIDE.zip を利用して、Windows環境を少し改変する

(この改変の後も、Windows環境は物理ディスク単体で起動可能)。

上記URLのリンク元と説明: https://www.virtualbox.org/wiki/Migrate_Windows

Windowsを物理ディスクから起動して、以下の手順を実施する。

MergeIDEは説明やエラーメッセージがドイツ語?で書かれていて読めないので、コマンドからMergeIDEがやっていることを読み解くと、、、


  1. %SystemRoot%\System32\Drivers\ (%SystemRoot% は大抵はC:\Windows)に、必要なドライバがあることを確認。


    • 必要なのは以下の4ファイル。


      • Atapi.sys

      • Intelide.sys

      • Pciide.sys

      • Pciidex.sys



    • もしどれかが無ければ、driver.cabから取り出して上記パスに置く。


      • driver.cabは "%SystemRoot%\Driver Cache\i386" にある?

      • %SystemRoot%\ 下のどこにも無ければ、インストールディスクから探してくること。

      • インストールディスクを持っていない場合は、、、リカバリディスクが使える?





  2. レジストリを書き換える。


    1. MergeIDE.zipを展開。

    2. 管理者権限でコマンドプロンプトを起動。


    3. regedit (MergeIDE.zipを展開したフォルダ)\MergeIDE.reg を実行。正常終了のダイアログが出ることを確認。


      • コマンドプロンプトを管理者権限で起動してないと、エラーが出てレジストリを変更できない。





これで終わり。

VirtualBoxから起動してみて起動できたなら、めでたし。


それでも起動しないなら

上記対処をしてもまだWindowsが起動しないならば、仮想マシンの設定を変更してみる。

「システム」の”チップセット”の値と「ストレージ」のIDEコントローラの”タイプ”とをちゃんと(末尾の数字も含めて)一致させる。またPIIXからICHに変えてみる。