header

VirtualBox で Vagrant を使ってファイル共有すると vboxfs がとにかく遅い。 macOS であれば NFS サーバーを立てて共有フォルダを設定すれば、だいぶ軽くなるけども Windows だと手軽には NFS サーバーを用意できないみたい。うーんどうすればいいものか。

・・・と、いうことでちょっと考えてみた。

ベースとなる環境は下記の通り。

  • Windows 10 Home
  • VirtualBox
  • Vagrant
  • Vim力がとても低い(重要)

そして考えた解決方法は下記。

  • データは基本的にVM内に持つ
    • 仮想ディスクはシステムと分けておく
    • vagrant destroy してもデータは残る
  • ホストとのファイルの共有はSambaを使う
    • ホストからのファイルの利用はSamba経由で行う
    • エクスプローラ、GUIエディタは好みのものを使える

イメージ的には下記のような感じ。

schematic

こうすることでLinux側からファイルを触るときはVMのスペックそのままのIOが出るはず。 GitやらサーバーでがちゃがちゃするときはどうせVM側で操作するほうが早いのでそちらに任せる。

Windows から SSH するときは Git for Windows や Msys2 、Cygwin の ssh にパスを通しておけば vagrant ssh が使えるのでそこからやれば良い感じ。

Windows 10 なら Bash on Windows から ssh しても良さそう。

ちなみに Windows からシステム標準の共有をつかってディレクトリを共有することも考えたが、 設定方法がイマイチなのと、Linux側での権限周りが融通聞かないことや、 そこまで速度でないなというところがあったので、発想を逆転させてこの構成に至った感じ。

vboxfs での共有を基本的にあきらめているので Apache や Nginx を使う時も sendfile を無効化しなくても良く意外と良いのではないかと思っている。

ホスト側のWindowsには共有フォルダ周りのGUIが完備されているので、 ネットワークドライブやフォルダとしてマウントすることも簡単だろうし、つらい目を見ずにすむのではないかと思った。


というわけで・・・

2017/01/02 21:39 追記

テスト用に使える環境を用意してみました。

Archlinux ベースで vagrant ユーザーのhomeディレクトリにSambaでアクセスできます。
データ領域を別にするとこまでやろうと思ったけどDestroyしたらご丁寧にイメージが消されてしまったので、イメージ分離はまたそのうち。


関連リンク