Home > Vagrant | 開発環境 > Vagrant + VirtualBox で nfs を使って、synced_folder を速くする

Vagrant + VirtualBox で nfs を使って、synced_folder を速くする

この記事の所要時間: 354

Vagrant + VirtualBox で便利な synced_folder を nfs を使ってパフォーマンスを向上する方法です。

vagrant

開発環境として Vagrant + VirtualBox を使う上で欠かせないのが synced_folder です。ホストとゲスト間でディレクトリを共有できるので、ホストで書いたコードをゲストですぐに実行することができます。

synced_folder はVirtualBox が持つ shared folders という機能をつかているのですが、代わりに nfs を使うことで、パフォーマンスを向上させることができます。

nfsd をホスト側で起動

synced_folder に nfs を利用するには、ホスト側で nfsd を起動する必要があります。

OS X(Lion / Mountain Lion)では標準で nfsd がインストールされているのでこれを利用します。nfsd コマンドで enable にすると、nfsd を起動して、さらに再起動時も自動で nfsd が起動するようになります。

なお nfsd を起動するには /etc/exports が必要になります。存在しない場合は、作成しておきます(内容は空で良いです)。

$ sudo touch /etc/exports
$ ls /etc/exports
/etc/exports

nsfd enable コマンドで nfsd を起動します。

$ sudo nfsd enable

$ sudo nfsd status
nfsd service i enabled
nfsd is running (pid xxxxx, 8 threads)

nfsd disable コマンドを実行すると、nfsd が停止して、再起動後も起動しなくなります。

$ sudo nfsd disable

$ sudo nfsd status
nfsd service is disabled
nfsd is not running

Vagrantfile で nfs を指定

Vagrantfile で synced_folder を NFS で利用する設定を行ないます。

ポイントは2つです。まず host-only ネットワークで IP アドレスを指定します。そして、synced_folder に :nfs => true を設定します。

vagrant up すると、synced_folder で指定したディレクトリをゲストが NFS マウントします。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
(snip)
[default] Exporting NFS shared folders...
Preparing to edit /etc/exports. Administrator privileges will be required...
The nfsd service does not appear to be running.
Starting the nfsd service (use 'enable' to permanently enable)
[default] Mounting NFS shared folders...

ゲストにログインすると NFS マウントしていることが分かります。

$ vagrant ssh
[vagrant@localhost ~]$ df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/VolGroup-lv_root
                      8.4G  1.1G  7.0G  14% /
tmpfs                 230M     0  230M   0% /dev/shm
/dev/sda1             485M   32M  429M   7% /boot
/vagrant              931G  359G  572G  39% /vagrant
192.168.33.1:/path/to/directory                      <---- NFS でマウントした synced_folder
                      931G  359G  572G  39% /share

ホストの /etc/exports には下記のように対象のディレクトリが自動で追記されています。

$ cat /etc/exports
# VAGRANT-BEGIN: 0f0224b9-b61c-47ff-b769-49d1e3103b28
"/path/to/directory" 192.168.33.30 -mapall=501:20
# VAGRANT-END: 0f0224b9-b61c-47ff-b769-49d1e3103b28

なお、もし IP が指定されていないと、vagrant up 時に下記のようなエラーが表示されます。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
(snip)
NFS requires a host-only network with a static IP to be created.
Please add a host-only network with a static IP to the machine
for NFS to work.

パフォーマンス

NFS を使った場合、実際の開発でどれほど恩恵があるかを判断するために簡単な Web アプリケーションを siege で計測してみました。

対象アプリケーションはCakePHPのコントローラで「Hello」という文字列を出力するのみで、DBへの接続は行なっていません。それぞれの方式でマウントしたディレクトリをdocument_rootに指定しています。

ホストから「siege -c 10 -t 60s -b http://URL/」で5回計測を行ない、その平均値を算出しました。

計測結果は下記になります。NFS の方が 3.5倍多くのリクエストをさばいており、パフォーマンスが向上していることが分かります。

方式 計測値 Rate
share folders(synced_folderデフォルト) 11.366 trans/sec 1
NFS 40.066 trans/sec 3.52

参考までに、Vagrant サイトでは実際の Rails プロジェクトのテストを使った結果が掲載されています。NFS が 22s に対して、Shared folders は 5m14s となっており、大きく速度が異なっています。

VirtualBox Shared Folders: 5m 14s
Host File System: 10s
Native VM File System: 13s
NFS Shared Folders: 22s
NFS Shared Folders (warm cache): 14s
http://docs-v1.vagrantup.com/v1/docs/nfs.html

まとめ

NFS を使うことで簡単に synced_folder のパフォーマンスを上げることができます。synced_folder のパフォーマンスに不満がある場合は NFS を一度試してみて下さい。

ただ、ホスト側で nfsd を動かす必要があるので、Windows など nfsd が標準でインストールされていない環境では気軽に使えないのが難点ですね。

参考

Pocket

follow us in feedly

Home > Vagrant | 開発環境 > Vagrant + VirtualBox で nfs を使って、synced_folder を速くする

検索
フィード
メタ情報

Return to page top