Can I improve network speed with VirtualBox between host and guest?

Better than smb:// would be to NFS mount your shares over a private network interface running the virtio-net drivers. Once mounted, inside the host OS, you'd rsync in the data with:

rsync /some/mount/point /home/myuser/

Or whatever you wanted.

Someone already mentioned Vagrant and, on its own it won't speed up your VirtualBox setup, but it does make doing things like mounting in shares on your Mac via NFS export much, much easier than doing it by hand.

For example, here's a Vagrantfile that ups an Arch Linux installation and mounts your Documents directory on your machine via NFS using virtio drivers to /documents on the image.

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "losingkeys/arch"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.network "public_network"
  config.vm.provider "virtualbox" do |vb|
    vb.customize ['modifyvm', :id, '--nictype1', 'virtio']
    vb.customize ['modifyvm', :id, '--nictype2', 'virtio']
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    vb.memory = 1024
    vb.cpus   = 2
    # Uncomment this to run in not-headless mode
    # vb.gui  = true
  end
  config.vm.synced_folder '.', '/vagrant', type: 'nfs'
  config.vm.synced_folder File.join(ENV['HOME'], 'Documents'), "/documents", type: "nfs"
end

It requires root priveledges to work. You'll need to add:

Cmnd_Alias VAGRANT_EXPORTS_ADD = /usr/bin/tee -a /etc/exports
Cmnd_Alias VAGRANT_NFSD = /sbin/nfsd restart
Cmnd_Alias VAGRANT_EXPORTS_REMOVE = /usr/bin/sed -E -e /*/ d -ibak /etc/exports
%admin ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD, VAGRANT_EXPORTS_REMOVE

to your sudoers file via visudo for it to work.

Once you've put that Vagrantfile on disk all you have to do is cd to the directory where you saved it and run vagrant up and you're in business. To connect it's vagrant ssh or you can uncomment that line I left in there to run it with a display head.

That's the fastest configuration I know of for host/guest I/O with VirtualBox running Linux as a guest OS.


This is not directly the answer you are looking for, but an alternative approach that works wonders for my development environments.

Vagrant (vagrantup.com) is a tool built on VirtualBox which facilitates using virtual machines for development environments. Once you installed it, you can navigate to a local folder with your source files in the terminal, and initialize your virtual machine. Vagrant will map the current folder by default to "/vagrant" inside the virtual machine with read-write access, through VirtualBox's shared folder support. You could then point the webroot inside your virtual machine to a folder below there, for example.

Have a look at the Get Started guide for more info on Vagrant. If you prefer Arch Linux, you can also find prebuilt boxes at www.vagrantbox.es. You can even build your own box from scratch, in which case you might want to look at this chapter in the manual.

As for portability, I believe it is not such a good idea to distribute your sources inside a virtual machine this way (even for a single developer). You should put those in a version control system like Git or SVN, and have a check-out on every machine where you want to develop on.