Take the 2-minute tour ×
Ask Different is a question and answer site for power users of Apple hardware and software. It's 100% free, no registration required.

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))

share|improve this question
    
If I understand this right: You are running VirtualBox on an OS X host and mounting Arch Linux drives from OS X via Samba, correct? –  patrix Jul 8 '12 at 21:45
    
Yes. A script mounts the samba share and runs rsync after. –  tenshimsm Jul 8 '12 at 21:47
2  
Have you considered using VirtualBox's shared folder support instead? –  Gerry Jul 8 '12 at 22:29
    
I haven't thought about that. –  tenshimsm Jul 8 '12 at 22:49
    
I seems that I would lose my portability using shared folders. Meaning if I copy the virtual machine to my notebook it wouldn't work because the files are not stored inside the vm. –  tenshimsm Jul 8 '12 at 23:07

3 Answers 3

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.

share|improve this answer
    
Thanks! I'll take a look at that. –  tenshimsm Jul 9 '12 at 15:12
    
Looks promissing mainly because it has the name of the only RPG that I played (liked). :) –  tenshimsm Jul 9 '12 at 15:22
    
Note the default folder sharing is not very fast, but Vagrant has an option to use NFS instead. See the Vagrant wiki for info on this. –  Andrew Vit Aug 2 '12 at 21:51
    
Vagarant, while it makes the configuration of VirtualBox instances easier, doesn't actually do anything to improve the I/O performance between the host and guest OS. –  Ian C. Aug 8 at 2:34

If you're running into an I/O bottleneck, I would recommend putting the VM on it's own hard drive. Either that or upgrade to an SSD for improved disk I/O performance.

share|improve this 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.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.