過去にやってみたことの記録。
動機
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上での操作。
- VirtualBoxをroot権限で起動する。
- 物理ディスクへのアクセスのためにroot権限が要るので、VirtualBoxもroot権限で起動しておく。
- 普段使いのユーザに物理ディスクへのアクセス権を与えれれば、root権限は要らないだろう。
- windows用の仮想マシンを作成する。
- Windowsバージョンなどを適切に設定する。
- 仮想ディスクはこの後作成するので、この時点では作成しない。
- 作成した仮想マシンの設定を変更する。設定ウィンドウの「システム」を開いて、、、
- 「マザーボード」タブで、”I/O APICを有効化”と”ハードウェアクロックをUTCにする”にチェックを入れる。
- ”I/O APICを有効化”は、物理ディスクにインストールされたWindowsを起動するために必須のようだ。
- 「プロセッサー」タブで、CPUがPAE/NX対応なものであれば、”PAE/NXを有効化”にチェックを入れる。
- 「アクセラレーション」タブで、CPUがVT-xやAMD-Vに対応していれば、”VT-x/AMD-Vを有効化”にチェックを入れる。
- Windowsがインストールされた物理HDDを参照する仮想HDDを作成する。(参考: http://hrn25.sakura.ne.jp/win/virtualbox-rawdisk/virtualbox-rawdisk.html )
- Windowsがインストールされた物理HDDのパスを把握する。以後、/dev/sdbだとする。
sudo fdisk -l
- rawdiskイメージファイル(vmdk)を作成する。
-
sudo /usr/bin/VBoxManage internalcommands createrawvmdk -filename (好きな場所へのパス)/rawdisk0.vmdk -rawdisk /dev/sdb
- /dev/sdbにアクセスするためにroot権限が必要
-
- VirtualBoxのWindows用仮想マシンに、今作成した仮想HDDを割り当てる。
- 仮想マシンの設定で「ストレージ」を選び、 IDEコントローラに 上記仮想HDDを追加する。
- 実際にはSATAで接続していても、ここではIDEコントローラにぶら下げる。でないとWindowsが起動しない。
- 仮想マシンを起動。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がやっていることを読み解くと、、、
- %SystemRoot%\System32\Drivers\ (%SystemRoot% は大抵はC:\Windows)に、必要なドライバがあることを確認。
- 必要なのは以下の4ファイル。
- Atapi.sys
- Intelide.sys
- Pciide.sys
- Pciidex.sys
- もしどれかが無ければ、driver.cabから取り出して上記パスに置く。
- driver.cabは "%SystemRoot%\Driver Cache\i386" にある?
- %SystemRoot%\ 下のどこにも無ければ、インストールディスクから探してくること。
- インストールディスクを持っていない場合は、、、リカバリディスクが使える?
- レジストリを書き換える。
- MergeIDE.zipを展開。
- 管理者権限でコマンドプロンプトを起動。
-
regedit (MergeIDE.zipを展開したフォルダ)\MergeIDE.reg
を実行。正常終了のダイアログが出ることを確認。- コマンドプロンプトを管理者権限で起動してないと、エラーが出てレジストリを変更できない。
これで終わり。
VirtualBoxから起動してみて起動できたなら、めでたし。
それでも起動しないなら
上記対処をしてもまだWindowsが起動しないならば、仮想マシンの設定を変更してみる。
「システム」の”チップセット”の値と「ストレージ」のIDEコントローラの”タイプ”とをちゃんと(末尾の数字も含めて)一致させる。またPIIXからICHに変えてみる。