Vagrantのshare folderが遅い時はNFSを使うといいです

  • 50
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

概要

Vagrant内のcentos6でrailsの開発をしてました。

ソースを共有フォルダに置いて動作確認していたのですが挙動が
異様に重く、調べてみたらvagrantのデフォルトのファイル共有のせいでした。

NFSを利用したら早くなったのでその時のメモです。

環境

  • Mac OS X 10.9.5
  • Vagrant 1.6.5
  • VirtualBox 4.3.18

内容

1. Vagrantfileの編集

ゲスト側の/vagrantをNFSでマウントするようにします。*参考リンク

vagrantfile
  #--途中は省略--
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  #--途中は省略--
  config.vm.synced_folder ".", "/vagrant", type: "nfs"
  #--以後も省略--
end

2. sudoerを編集

このままでもOKですが、vagrant起動時に毎回マウントするため
パスワード聞かれます。聞かれないようにできるみたいです。

http://joemaller.com/3411/vagrant-nfs-shares-without-a-password/

mac上で下記shellを一度実行すれば聞かれなくなりました。
一応スクリプトを写経。

install_vagrant_sudoers.sh
#!/bin/bash
# Add Vagrant's NFS setup commands to sudoers, for `vagrant up` without a password
# Updated to work with Vagrant 1.3.x

# Stage updated sudoers in a temporary file for syntax checking
TMP=$(mktemp -t vagrant_sudoers)
cat /etc/sudoers > $TMP
cat >> $TMP <<EOF

# Allow passwordless startup of Vagrant when using NFS.
# https://gist.github.com/joemaller/6764700

Cmnd_Alias VAGRANT_EXPORTS_ADD = /bin/bash -c echo '*' >> /etc/exports
Cmnd_Alias VAGRANT_NFSD = /sbin/nfsd restart
Cmnd_Alias VAGRANT_EXPORTS_REMOVE = /usr/bin/sed -E -e /*/ d -ibak /etc/exports
%staff ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD, VAGRANT_EXPORTS_REMOVE
EOF

# Check syntax and overwrite sudoers if clean
visudo -c -f $TMP
if [ $? -eq 0 ]; then
  echo "Adding vagrant commands to sudoers"
  cat $TMP > /etc/sudoers
else
  echo "sudoers syntax wasn't valid. Aborting!"
fi

rm -f $TMP

こんな結果になるはず

/tmp/vagrant_sudoers.ziY5C09b: parsed OK
Adding vagrant commands to sudoers

3. リロード

vagrantをリロードしましょう。
リロード後何も聞かれずに立ち上がればOKです。

vagrant reload

4. 結果

早くなりました。
ローカルで動かしてる時より若干遅いかな?くらいのレベルです。
(以前はrails起動ですら数分かかってました。)

参考URL

http://docs.vagrantup.com/v2/synced-folders/nfs.html
http://webradar.info/2014/03/06/slowly-rails-in-vagrant/
https://gist.github.com/joemaller/6764700#file-install_vagrant_sudoers-sh