nofuture.tv  Index  Search  Changes  RSS  Login

VirtualBoxメモ

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が出てるから治ることに期待。

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は使えませんでした。

参考

基本設定

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のFAQqemuのドキュメントによると、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が死ぬ)

Last modified:2009/10/13 10:11:19
Keyword(s):
References:
This page is frozen.