DebianでVirtual Boxを使う
ふとしたきっかけから使うようになった、qemuより速く、VMwareよりも小回りの利く、Virtual Boxのことについていろいろ書いていこうと思います.
ユーザーマニュアルを見ると、コマンドラインから、いろいろいじれるみたいなので楽しそう。
Virtual Boxのイイところとダメなところ
イイところ
カーネルのバージョンが上がっても大丈夫
新しいカーネルにしても今のところカーネルモジュールのコンパイルでひっかからないような気がします.これから先はわかんないけど。 新しいカーネルへの追従が早いというぐらいに思っていただければいいかと思います。
LinuxでVMwareを使っている人なら分かると思うけど、新しいカーネルにするとカーネルモジュールがコンパイルできなくて、any-any patchを持ってきてごにょごにょしいといけなくて面倒なのよね。 (注:最近、any-any patchは無いみたいだけれど)
Compizのキューブに貼り付けることができる
Compizが使えるなら、キューブの一面に貼り付けて使うことができます。
方法はゲストOSをフルスクリーンで起動します。画面を切り替えたくなったらホストキー(デフォルトでは右Ctrlキー)を押します。すると画面はゲストOSですが制御はホストOSに戻るので、Ctrl+Alr+←やCtrl+Alr+→で左右に回転させたり、Ctrl+Alr+↓で展開して移動するだけです。
Geust Additionsを使うとウィンドウサイズに解像度が追従する
VMwareでは当たり前ですが、1.6.0からこの機能が入りました。
OpenGLアクセラレーションに対応
2.1から対応しました。仮想マシンの中でCompizが動きます.(要ゲストカーネル 2.6.27以上)
ネットワークのブリッジ接続が簡単になった
2.1以前では面倒くさいことをしなければいけませんでしたが、2.1からLinuxホストでも簡単にブリッジ接続ができるようになりました。
Intel-VT/AMD-Vに対応
対応当初は有効にすると,なぜか遅くなったりしましたが,最近はきちんと使えるのでうれしい.kvmを使っている場合は警告が出るのでrmmodでモジュールを削除しておいてください.(Debianな人はsudo /etc/init.d/kvm stopでおk.)
ダメなところ
日本語キーボードの場合、キーマップがおかしい。
1.5.6でなおりました。うれしい。
Bug Reportが出てるから治ることに期待。
#599 (VirtualBox 1.5 - keyboard issues with Linux hosts) - VirtualBox#809 (JP106 keyboard has missing keys) - VirtualBox
PAEに非対応
1.6.0でPAE/NXに対応しました。 設定の[一般]→[詳細]の「PAE/NXを有効にする。」にチェックを入れると使えるようになります。
PAEとは32bit OSで64GBまでメモリが使えるようになる機能ですが、Virtual BoxはPAE非対応なので、PAE有効にしているOSだと止まります。
インストール
Virtual Box
本家にあります。
http://www.virtualbox.org/wiki/Downloads
Virtual Box Open Source Edition (Virtual Box OSE)
sid/squeezのaptリポジトリに入ってます。
lennyはリポジトリにあるバージョンは1.x系ですが,バックポートに2.1が入っています.
etchはバックポートで入っているので、Debian Backportsを参考に設定してください。
カーネルモジュールのインストール
無償版はインストール時に自動的に行われます.明示的に作り直したい場合は以下のようにします.
# /etc/init.d/vboxdrv setup
OSE版は自分でインストールします。 対応カーネルモジュールがあるので、それを利用してください。
# m-a a-i virtualbox-ose-source
vboxusersグループにユーザーを追加自動的に追加されるようになりました
インストール時に自動的に追加されるようになったので以下の作業は不要です.
Virtual Boxを使うためにはユーザーをvboxusersグループに追加しないと使えません。
# gpasswd -a (ユーザー) vboxusers
一旦ログアウトして確認します。
$ id uid=1000(jun) gid=1000(jun) 所属グループ=5(tty),6(disk),20(dialout),24(cdrom),25(floppy),29(audio),44(video),46(plugdev),60(games),106(netdev),110(powerdev),111(scanner),112(saned),116(peercast),118(fuse),121(uml-net),1000(jun),1001(vboxusers)
vboxusersがあればOKです。
ゲストOSにDebian/Ubuntuを使ったときのGuesst Addirionのインストール
無償版Virtual BoxでGuest Additionをインストールする方法。
module-assistantをインストール
etchやubuntuでは/etc/apt/sources.listのCD-ROM部分をコメントアウトしておきます。
$ sudo aptitude install module-assistant $ sudo m-a prepare
するとGuest Additionのセットアップに必要なgccやらヘッダーがインストールされます。
Guest Additionsのインストール
Virtual Boxのメニューから「デバイス」→「Guest Additionsのインストール」を選ぶとCDイメージがマウントされるので、端末から以下を実行。
$ sudo /media/cdrom/VBoxLinuxAdditions.run
Virtual Boxのビデオとマウスモジュールがインストールされて、/etc/X11/xorg.confが書き換えられるのでXを再起動する。
OSEの場合
# m-a a-i virtualbox-ose-guest-source
VirtualBoxをRDP接続のみで使うサーバーにする
ユーザーマニュアル(PDF)の「7.4.1 VBoxHeadless, the VRDP-only server」に書いてあることを試しました。
サーバーの起動
お手軽に試すだけなら、仮想マシンを作っておいて
$ VBoxHeadless -s "仮想マシン名" &
でおk。
クライアントの接続
コマンドのrdesktopや、GUIフロントエンドのgrdesktop、krdc、tsclientなどで、サーバーを起動したマシンに接続するだけで使えます。
複数のマシンからRDPサーバーに接続する
同じユーザーの画面を複数のマシンに配信することができます。 マルチユーザーの接続ではありません。
以下のコマンドでマルチコネクションを有効にします。
$ VBoxManage modifyvm "仮想マシン名" -vrdpmulticon on
あとはRDPクライアントを使ってサーバーに接続します。
物理パーティションにインストールしたOSをVirtual Boxで使う
ユーザーマニュアル(PDF)の「9.9 Using a raw host hard disk from a guest」に書いてあることを試しました。
GUIメニューには用意されていないので、すべてコマンドです。
警告
- 間違えるとシステムを破壊します。試すのであれば、すべて自己責任で試してください。
- Windows XPを使いましたが、マシン構成が変わりアクティベーションを求められるので、試しても起動するだけで使用することはできません。
もしVirtualboxでアクティベーションを解除しても、実機として動かした時に、またアクティベーションを求められるので事実上両方で使うことは不可能です。 もう一つ。Microsoftは仮想マシンでWindowsを動かすなら、もう一つライセンスを購入してくださいと表明しており、実機と仮想マシンでOSを共有することは、ライセンス上の問題もあります。
物理パーティションをVMwareのvmdk形式として登録する
マウントしたまま実行すると当然ながらパーティションが壊れるので、アンマウントして実行します。
VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda
-registerオプションをつけるかmodifyvmで仮想ディスクマネージャーに登録できるみたいだけど、GUIのほうから仮想ディスクマネージャーを起動して「追加」もできるので別に気にしなくてもおk。
VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda -register
VBoxManage modifyvm WindowsXP -hda /path/to/file.vmdk
物理パーティションの指定
パーティションの指定は-partitionsオプションを使います。
VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda -partitions 1,5
パーティションの番号を調べるにはlistpartitionsをつけると調べられるので、この数字を使います。
VBoxManage internalcommands listpartitions -rawdisk /dev/sda
物理パーティションを読み書きする
安全のため何も指定せず登録すると読み込みのみのvmdk形式で登録されますが、-relativeオプションを指定すると読み書き可能なvmdk形式で登録することできます。
VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda -partitions 1,5 -relative
ddで切り取ったMBRのファイルを使って起動することもできます。
VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda -partitions 1,5 -mbr winxp.mbr
ちなみにddでMBRを保存するには以下のようにします。
dd if=/dev/sda of=windows.mbr bs=512 count=1
LinuxホストでUSBデバイスを使う
ユーザーマニュアルのトラブルシューティング「11.5.7 USB not working」に も書いてありますが、usbfsに書き込み権限がないと、ホストOS上でデバイスを 認識していても、ゲストOS上でデバイスを使うことはできません。
ということで、/etc/init.d/mountkernfs.shのusbfsをマウントする箇所 (75行目)にオプションdevgidにvboxusersグループidとdevmodeを追加します。
グループidはidコマンドで調べることができます。
# Mount usbfs/usbdevfs if /proc/bus/usb is present. # # Usbfs/usbdevfs is used for USB related binaries/libraries. # "usbfs" and "usbdevfs" are the exact same filesystem. # "usbdevfs" was renamed to "usbfs" by linux usb developers, # because people sometimes mistook it as a part of devfs. Usbfs # will be superseded by other filesystems (e.g. sysfs), and when # it becomes obsolete the mount action below should be removed. # if [ -d /proc/bus/usb ] then domount usbfs usbdevfs /proc/bus/usb usbfs -onodev,noexec,nosuid,devgid=121,devmode=664 ← devgid=121(vboxusersのグループid),devmode=664を追加した fi
VirtualboxにWindows98SEをインストールする
たまたまWindows98SEをインストールしたので、その時のメモです。
VirtualboxでWindows98を動かすのは、手間がかかる割にはパフォーマンスがむちゃくちゃ悪いので、実用的に使いたい人はVMwareかqemuを使った方がよいです。kvmは使えませんでした。
参考
- Virtualbox Wiki User_FAQ
- Virtualbox Forum Tutorial: Windows 95/98 guest OSes (View topic)
- VBEMP x86 Project - Universal VESA/VBE Video Display Driver (Windows98用ビデオドライバ)
基本設定
Windows 98が現役だった時代の標準的な構成にします。 以下、変更点のみ列挙。
一般
- メインメモリのサイズ: 128MB
- ACPI: 無効
- IO APIC: 無効
- VT-x/AMD-V: 無効(3.0.6以前) / 有効 (3.0.6以降。パフォーマンスも上がります)
- ネステッドページング: 無効
- PAE/NX: 無効
- 3Dアクセラレーション: 無効
- IDEコントローラタイプ: PIIX3
オーディオ
- オーディオコントローラ: Sound Blaster 16
ビデオカードドライバのインストール
Windows 9x用のGuest Additionsは用意されていないので、VBEMP x86 Project - Universal VESA/VBE Video Display Driverからダウンロードします。
ドライバは2種類ありますが、比べてみても違いがわからなかったので、Debug version pre-beta 2008.10.21を使いました。
081021.zipを展開すると、VBE9Xディレクトリに「0800x480」「1024x600」「Uni」の三つのディレクトリがありますが、Uniにあるドライバを使います。
amnhltm.zipのインストール
VirtualboxのFAQやqemuのドキュメントによると、Windows 9x系はhlt命令をうまく扱えないらしい。 FAQではrainを紹介していましたが、見つからなかったのでqemuでおすすめされている、amnhltm.zipをインストールすることにしました。
amnhltm.zipでググると、いくつかダウンロードできるサイトがあったので入れてみましたが、いまいち効果はわからず。
Virtualbox/qemu/kvm/VMwareのディスクイメージを利用する
Virtualboxではvdi形式、qemu/kvmではqcow2形式を使いますが、どちらも互換性はありません。 VMwareのvmdk形式については、そのまま利用する事ができます。
qemu/kvmのqcow2形式からVirtualboxのvdi/VMwareのvmdk形式
VirtualboxはVMwareのvmdk形式も利用する事ができるので、qemuのqemu-imgコマンドを使いvmdk形式に変換して利用します。
$ qemu-img convert -O vmdk (元イメージファイル名).qcow2 (変換イメージファイル名).vmdk
vdiにしたい場合は、一度rawイメージにしてからvdiに変換します。
$ qemu-img convert -O raw (元イメージファイル名).qcow2 (作業用ファイル名).raw $ VBoxManage convertfromraw --format VDI (作業用ファイル名).raw (変換イメージファイル名).vdi
変換したイメージを少しコンパクトにしたいなら。
$ VBoxManage modifyhd (変換イメージファイル名).vdi --compact
余談ですが、VMwareの2Gごとに分割されたvmdkイメージを一つにするには、こんな感じにするとよいみたいです(未確認)
$ vmware-vdiskmanager -r (分割イメージファイル名).vmdk -t 0 (書き出すファイル名).vmdk
Virtualboxのvdi形式からqemu/kvmのqcow2形式
VirtualboxのVBoxManageコマンドを使ってrawかvmdk形式に変換してから、qemuのqemu-imgを使ってqcow2形式に変換します。
$ VBoxManage clonehd --format VMDK|VHD|RAW (元イメージファイル名).vdi (作業用ファイル名) $ qemu-image convert -f vmdk|vhd|raw -O qcow2 (作業用ファイル名) (変換イメージファイル名).qcow2
VBoxManage clonehdを使うときの注意
Virtualbox 2.x系(?)では、VBoxManage clonehdにバグがあり、うまくクローニングできません。少なくとも 2.1/2.2ではダメでした。
clonehdでクローンした後、VBoxManage internalcommands sethduuid を使ってuuidを振りなおすと使えるようになります。
$ VBoxManage internalcommands sethduuid (作業用ファイル名) (2.1/2.2系の場合。3.x系は未確認)
実パーティション(Raw Partition)をディスクイメージに変換する
VBoxManageを使うときは、ddをパイプでつないでconvertfromrawにstdinを指定します。
dd if=/dev/hda | VBoxManage convertfromraw (ファイル名) (バイト数)
バイト数についてはfdiskで調べることができます。
FAT32などに書き出す場合、分割したいと思いますが、その場合はオプション --variant Fixed,Split2G をconvertfromrawの後につけます。(オプションの位置は決まっていて、順番が入れ替わるとエラーが出ます。)
dd if=/dev/hda | VBoxManage convertfromraw --format VDI --variant [Standard | Fixed],Split2G stdin (ファイル名) (バイト数)
Split2G だけではエラーになるので必ず Standard,Split2G もしくは Fixed,Split2Gと指定します。(Standard,Split2Gは指定できるが途中で止まってしまう?)
qemu/kvmのqemu-imgを使う場合は変換元のファイルタイプに host_device を指定するだけでできるので簡単です。
qemu-img convert -f host_device /dev/hda -O qcow2 (ファイル名)
ただし、特定サイズでファイルを分割するオプションはないので、1ファイルあたりの容量制限が厳しいファイルフォーマットには書き出せないという問題があります。
この問題はLinux上からLinux系ファイルシステムに書き出す場合には気にすることはありませんが、Linux上からWindows系ファイルフォーマットに書き出す場合にこの制限がひっかかります。 (FAT32は1ファイル4GBの制限にぶつかる。NTFSはntfs-3g自体の負荷が高い上に大きなファイルを書き出すとfuseが死ぬ)
Keyword(s):
References: