Improve network speed with VirtualBox between host and guest

Networkperformancevirtualbox

I use a VirtualBox machine with Arch Linux as development web server. I want to improve rsync transfer speed via smb://. What kind of configuration is best to improve file transfer/synchronization?

Which network configuration is best for speed between the host and the guest?

My config:
Intel PRO/1000 MT Desktop (Adaptador em ponte (bridged), en1: Wi-Fi (AirPort))

Best Answer

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.

Related Question