考える蛙

技術ログ、思いついたこと色々。

VirtualBox RawDiskでブート

VirtualboxのACPIが問題

Express5800/110GcはACPI 1.1が実装されているらしい。VirtualBoxのユーザーマニュアルにはACPIのバージョンについての記述が見受けられないが、恐らくそれ以上のバージョンだろう。物理HDD上のWin2kを実機と仮想マシンで排他的にブートしようとすると、Win2kではどうやらACPIドライバが固定インストールされるようで、バージョン不一致の環境ではブートの途中で止まる。仕方がないので起動環境を切り替える場合は、事前にデバイスマネージャにてACPIのドライバを切り替えることで対応する。

デバイスマネージャ>コンピュータ>ACPI>プロバティ>ドライバタブ>ドライバの更新>既知のドライバ>ハードウェア全て

と選択し、

実機の場合 ACPI マルチプロセッサPC
仮想の場合 ACPI  (Advanced〜

それぞれ起動したい環境のドライバに切り替えを行う。
一度切り替えると、元の環境で起動出来なくなるので注意が必要。
Win2kインストール時にF6だかF7だかを押すことで、ACPI無しのインストールも可能なようだが、Express5800ではPCI ExがACPIを必須としているようで、これにぶら下がっているビデオデバイスに不具合が発生した。よって、この方法は選択出来なかった。まぁ元々、VirtualBoxのユーザーマニュアルには、Win2kの場合ではインストール後にACPIの設定を変えてはならないという注意書きがあるので、これ以上どうにもならないのだろう・・妥協する。

意外だったのはVirtualBoxのグラフィックドライバ。
3DアクセラレータをONとした後にGuest Additionsにてインストールし、試しに古い3Dゲーム※1を起動したところ動作した。DirectX7あたりは問題なさそうだ。

※1 バーチャロン、パンツァードラグーン

それとVirtualBoxのシームレスモードは中々面白い。KDE 3.5では、あたかも完全にデスクトップが統合されたように見える。しかし、KDE 4.2ではこの機能が正常に動作しない様だ。まぁこれは完全に自己満足の機能なので、動作しなくても問題はない。

VirtualBoxへのWin2kのインストール

構成検討で計画した通り、VirtualBox上から物理HDDに対しWin2kをインストールする。物理HDDを参照するvmdkファイルは、VBoxMnageコマンドで作成する。今回はHDD全体を使用するのでパーテーションやMBRのオプションは指定しない。

$ VBoxManage internalcommands createrawvmdk -filename /home/username/.VirtualBox/win2k-raw.vmdk -rawdisk /dev/sdc

(Win環境で同様のことを行う場合は-rawdiskオプションは -rawdisk \\.\PhysicalDrive0 という書式で指定する。)

このコマンドで作成したvmdkファイルを指定して仮想マシンを作成し、Win2kのインストールディスクにてインストールを行うわけだが、早々に問題が発生した。

1.Win2kのディスクがアップグレード版であった為、WinNTのディスクと入れ替えが要求されるが、正しくディスクが認識されないことが多い。

2.インストールの進捗バー表示中に高確率でリセットが発生し完了しない。ディスクイメージファイルの場合は再現しない。

1は根気良く数回ディスクを入れ直すことで認識されるが、ディスクを一度isoイメージに落としてマウントすることで確実に回避出来る。
2には散々苦しめられた。2、30回繰り返すと稀に最後まで進むこともあるようだが中々原因が分からず時間を浪費してしまった。2日ほど悩んだ末に、タイミング不定でリセットする・・スレッドか何かの切り替えか?とひらめき、試しにPentium4のHTをBIOSでOFFとしたところ解決した。インストール後は設定を戻すことで物理HDDでも問題なく動作した。

続く

環境構築時のあれこれ

前回、環境構築の前提条件を3つ挙げたわけだが自宅で今使用出来るマシンはExpress5800/110Gcしかないため、パフォーマンスとACPIについては妥協し、このマシンで進める。

=Debian Lennyへのインストール

Debianには元々正式なパッケージとしてVirtualBoxが存在する。

# aptitude search virtualbox
p   virtualbox-ose                                - x86 virtualization solution - base binaries

当初これをインストールしたが、どうにもUSBデバイスを有効にできないので調べてみるとwikipediaや公式サイトにオープンソースエディションは機能制限があると記述されている・・マニュアルを読まずに進めて陥る典型的なパターン。Debian公式サーバーのみなら簡単に済むと思ったが仕方がない。VirtualBoxをsources.listに追加する。

# echo "deb http://download.virtualbox.org/virtualbox/debian/ lenny non-free" >> /etc/apt/sources.list
# aptitude update
# aptitude search virtualbox
p   virtualbox                                    - Sun xVM VirtualBox
p   virtualbox-2.0                                - Sun xVM VirtualBox
c   virtualbox-2.1                                - Sun xVM VirtualBox
i   virtualbox-2.2                                - Sun VirtualBox
# aptitude install virtualbox-2.2

kernelがLenny標準のものでないと、VirtualBoxのデバイスドライバ再構築などが必要で多少面倒そう。sidのカーネルを入れた場合はもう一手間かかるかも。

DebianでVirtualBoxからUSBメモリを使用するにはそのままでは使用出来ない。VirtualBoxはログインユーザーで起動しているが、オートマウントされるUSBメモリにはユーザーにパーミッションが無いからだ。共有用のグループを作成しユーザーがそれに参加、マウント時にグループIDを指定する必要がある。

# groupadd vboxusers
# grep vboxusers /etc/group
vboxusers:x:115:
# id username
uid=1000(username) gid=1000(username) 所属グループ=1000(username),6(disk),20(dialout),24(cdrom),25(floppy),29(audio),
44(video),46(plugdev),110(netdev),114(powerdev)
# usermod -G username,disk,.....,vboxusers username

ログインし直す

# id username
uid=1000(username) gid=1000(username) 所属グルー プ=1000(username),6(disk),20(dialout),24(cdrom),25(floppy),29(audio),
44(video),46(plugdev),110(netdev),114(powerdev),115(vboxusers)

次にマウント時にパーミッションを付加する。グループIDを直接指定しているのが気に入らないが、取り合えずこれでOK。

/etc/init.d# diff mountkernfs.sh~ mountkernfs.sh
75c75                                                          
<               domount usbfs usbdevfs /proc/bus/usb usbfs -onodev,noexec,nosuid
---                                                                            
>               domount usbfs usbdevfs /proc/bus/usb usbfs -onodev,noexec,nosuid,devgid=115,devmode=664

VirtualBoxへWinのインストールへ続く







まずは具体的な構成

問題点を挙げる前に、まずは具体的なマシン構成を。
休み時間に職場のパソコンでも試したので、対象は2台。

=1台目
HPデスクトップ
CPU Core2Duo 2.2GHz (intel VT対応)
HDD 2台
memory 2GB
OS WinXP/Pro

=2台目
NEC Express5800/110Gc
CPU Pentium4 531 3GHz
HDD 2台
memory 3GB
OS Windows2000/sp4

2台ともWindowsとは別の2台目のHDDにDebian lennyを追加でインストールし、GRUBによりWindowsとデュアルブートととした。そして、Debianにインストールした仮想マシンVirtualBoxから直接1台目のHDDに存在するWindowsの起動を試みた。VirtualBoxや、細かい設定手順はまた後日記述することとして、まず発生した問題点を以下にあげる。

=HPデスクトップ
・仮想マシンは機器構成が異なるので、再度Windowsのアクティベーションが必要。

=Express5800
・Express5800と仮想マシンではACPIが異なる。つまり同じWinで同じACPIドライバが使用出来ない。
・Intel VTに非対応のため、オーバーヘッドが大きい。

アクティベーションの問題は辛い。物理的には同じPCに1つのみインストールしている状態で、ライセンス的な問題は回避出来ていそうな気がするが・・・。仮に問題無いとしても、通常起動と仮想起動を頻繁に切り替えて、毎回認証は不可能だ。短時間に機器構成が大幅に変わると認証を蹴られるだろう。

ACPIの問題も悩ましい。Win2000はインストール時にACPIのバージョンを確認し、それ専用のカーネルかドライバをインストールしているようだ。現時点で通常と仮想を切り替える際には、デバイスマネージャでACPIのドライバを事前に切り替えておく必要がある。(ACPIをOFFにするとPCI Exにぶら下がっているデバイスが認識できなくなる)

これらを踏まえると、S/W,H/Wは以下の条件を満たしていることが好ましいようだ。

・OSはWindows2000
・出来ればCPUはIntel VT,AMD-V対応ネステッドページングがあればなお良い。
・仮想マシンと同じACPIをサポートするマザーボード

これらをそろえることで構想通りの動作をすると思われる。

続く


構成の考察

前回、Windowsとの決別と書いたが完全にと言うのは不可能。もうあまり遊ばなくなったが3D関係のゲーム、仮想環境で動かすには重すぎるアプリなど理由を上げたらキリがない。だから通常はできる限りLinuxを使用し、どうにもならなくなった場合はWindowsをすぐに起動出来る様にする必要がある。求める環境としては多分、次の様な構成だ。

・LinuxとWindowsのデュアルブート
・Linux上に仮想環境を用意し、仮想マシン上でWindowsの起動

こんな構成はすぐに思いつく。しかし、問題点もすぐに思いつく。

・OSを3つもインストールすると管理が大変
・Windowsの数が増えるのは本末転倒。
・Windowsのライセンスも2本必要。
・Winの商用ソフトなど2本購入する必要が出てくる。

問題点の逃げ道を考えると、必然的に解決出来そうな構成が見えてくる。デュアルブートでインストールしたWindowsを仮想マシンから起動することが出来ないか?だ。結論から言えば出来る。最近の仮想環境はHDDイメージファイルだけでなく、物理HDDを扱うことができるからだ。ただ、実際に構成を組んでみると色々と想定外の問題が見えてきた。

明日に続く。(詳細な構成や分かっている問題点など)
livedoor プロフィール
タグクラウド
livedoor × FLO:Q
QRコード
QRコード
  • ライブドアブログ