LoginSignup
26
22

More than 5 years have passed since last update.

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

Posted at

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

動機

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に変えてみる。

26
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
22