oinume journal

Scratchpad of what I learned

Make VirtualBox's network faster with paravirtualized network adapter

I develop applications with Vagrant and VirtualBox and feel frustrated about slowness of VirtualBox. Since I found virtio (paravirtualized network adapter), I tried it out on my application.

How to enable virtio with Vagrant

Add following lines into your Vagrantfile.

v.customize ["modifyvm", :id, "--nictype1", "virtio"]
v.customize ["modifyvm", :id, "--nictype2", "virtio"]

Results

I ran time vagrant provision with old and new settings and virtio-net is 1.2x faster than 82540EM (default network adapter).

  • vagrant provision 14.85s user 12.49s system 5% cpu 8:20.59 total with Intel PRO/1000 MT Desktop (82540EM)
  • vagrant provision 14.63s user 12.62s system 6% cpu 7:00.70 total with virtio-net

Ansible: Up and Running

Ansible: Up and Running

VirtualBoxでディスクを拡張する

VirtualBox + ゲストOS:Ubuntuでディスクを拡張する方法です。はしょっていうと、単に新しい仮想マシンを作ってそのディスクを古い仮想マシンのディスクにしてしまえばOKです。

 

1.新しく仮想マシンを作る

新しいディスクを用意するために仮想マシンを新しく作ります。この時に作成したディスクが新しいディスクになるので、容量を多めに取っておきましょう。

 

2.インストールディスクからUbuntuを起動

Ubuntu 10.04のインストール用のisoを入手します。そのisoイメージをストレージのCD/DVDデバイスとして追加して、さらに1.でつくったディスクもストレージとして追加します。そして仮想マシンUbuntu(古い方)を起動します。

 

3.ディスクをコピー

Ubuntuが起動したら、ターミナルを開いて

sudo dd if=/dev/sda of=/dev/sdb

を実行します。これで古いディスク(/dev/sda)の内容が新しい方(/dev/sdb)にコピーされます。/dev/sda は環境によっては /dev/hda だったりするかもしれません。

 

$ cat /proc/partitions

 

してアタッチされているディスクを確認すると良いでしょう。

 

4.パーティションをリサイズ

GParted を使って、新しいディスクのパーティションを拡張しましょう。

 

5.仮想マシンを再起動

仮想マシンを一旦シャットダウンして、isoと古いディスクを使用しないようにしてから仮想マシンを起動して下さい。これで拡張済みのディスクがマウントされていれば、ディスクの拡張は完了です。

VirtualBoxでのネットワーク設定(NAT+ホストオンリーアダプタによるホストOSとゲストOS間の通信)

CassandraやMogileFS、KumoFSなど、複数のサーバで構成されるサーバソフトウェアをテストしたいことが多々あるので、VirtualBoxを使って分散環境を作ってみました。ネットワーク関連の設定でややコツが必要だったので、ちょっとまとめてみました。

要件

ホストOS上で複数のゲストOS(Linux)を立ち上げる。

 

 

  • ホストOSからゲストOSにSSHでアクセスしたいので、ホストOSからゲストOS間にアクセスできること

 

 

  • 分散コンピューティングのテストがしたいので、ゲストOS間でもアクセスできること

 

 

  • ゲストOSからインターネットに出れること

 

 

  • ネットワーク上にある他のマシンからはゲストOSにはアクセスできなくてもOK

 

 

 

やり方

今回はネットワーク上の他のマシンからはアクセスできなくてもよいので、ネットワークの設定ではブリッジアダプタを使わずに、ネットワークアダプタを2つ使い、NAT+ホストオンリーアダプタという構成にします。NATというのはゲストOSから外部ネットワークに接続できる構成で、ホストオンリーアダプタというのはホストOSとゲストOS間のみでやり取りできるアダプタです。

 

具体的なやり方を書いておくと

 

 

 

 

  • 仮想マシンを作成し、ネットワークの設定でアダプタ1で"NAT"を、アダプタ2に"ホストオンリーアダプタ"を選択します

 

 

  • 終わったらOSをインストールして下さい。自分は今回CentOS 5.4を使用しました。

 

 

となります。これをゲストOSの数だけ繰り返して下さい。(もしくは仮想マシンを一つ作ってそれをコピーするのもよいでしょう)

 

インストールが終わったらゲストOSにログインして /sbin/ifconfig を実行してみて下さい。自分は今回centos-01とcentos-02 の2つのゲストOSを作ったところ、DHCPで下記のようにIPが割り当てられていました。

 

 

  • centos-01: eth0 10.0.2.15, eth1: 192.168.56.101

 

 

  • centos-02: eth0 10.0.2.15, eth1: 192.168.56.102

 

 

 

この時点で期待していたことができるか確かめてみます。

 

 

  • ホストOSから192.168.56.101,102にping

 

 

 

 

  • ゲストOSから192.168.56.1(ホストOSのIP)にping

 

 

  • ゲストOS 192.168.56.101から192.168.56.102(centos-02)にping

 

 

 

以上で複数サーバによる分散環境ができましたが、サーバ用途ではDHCPだと後々面倒な事になりそうなので、最後にこのDHCPで割り当てられた設定を参考に static なIPを設定しておきます。具体的にはゲストOSのeth1を192.168.56.10xにすればOKです。以下はcentos-01 の /etc/sysconfig/network-scripts/ifcfg-eth1 の変更箇所です。

 

 

--- ifcfg-eth1.orig 2010-04-12 00:11:39.000000000 +0900

+++ ifcfg-eth1 2010-04-12 00:18:52.000000000 +0900

@@ -1,6 +1,9 @@

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth1

-BOOTPROTO=dhcp

+BOOTPROTO=static

HWADDR=08:00:27:BD:DD:6C

ONBOOT=yes

-DHCP_HOSTNAME=centos-01

+IPADDR=192.168.56.101

+NETMASK=255.255.255.0

+NETWORK=192.168.56.0

 

 

変更したらnetworkを再起動します。

 

# /etc/init.d/network restart

 

 

centos-02は 192.168.56.102 のIPに設定しています。centos-01からcentos-02にpingしてみて通るか確認してみて下さい。

 

$ ping 192.168.1.102

 

 

これで通れば設定完了です。無事複数サーバによる分散環境ができました。

 

余談:なんでVirtualBox

 

 

  • 無償で使える

 

 

 

 

  • GUIによる設定画面がわりとわかりやすい

 

 

というのが気に入って使っています。VMwareWindows,Mac,Linuxで使えますが、Mac版のVMware Fusionは有償なのがちょっと嫌でした。VirtualBoxは使っていてちょっと重いと思うこともありますが、突然落ちたりはせず非常に安定しているので、デスクトップPCで軽く仮想環境を作りたい場合には重宝しています。

 

[tmkm-amazon]4798114626[/tmkm-amazon]