Virtualbox can use actual partitios for its disks. This task may be simple using the virtual GUI, but in this case, we want automatize the process with Vagrant.

We will use the real partition for uses homes (/dev/sdb1). The partition must be formated and ready to be mounted.

The first step is to create a VMDK file to describe the logical disk. The command for that is a little bit tricky:

$ vboxmanage internalcommands createrawvmdk -filename /var/home.vmdk -rawdisk /dev/sdb1"

This file is only text and may be re-created at any time. This is important because vagrant delete virtual disks (this included) when you issue vagrant destroy.

The second step is to attach the disk to be accesible from the virtual machine. This require the command virtualbox storageattach but can be executed with customize vagrant function.

The following is a working Vagrantfile using the described setup:

VAGRANTFILE_API_VERSION = "2"
HOME_DISK = "/var/home.vmdk"
HOME_PARTITION = "/dev/sdb1"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "deb/jessie-i386"

 if ARGV[0] == "up" && ! File.exist?(HOME_DISK)
    system("vboxmanage internalcommands createrawvmdk -filename '#{HOME_DISK}' -rawdisk #{HOME_PARTITION}")
 end

  config.vm.provider :virtualbox do |vb|
     vb.customize ['storageattach', :id,
                   '--storagectl', 'SATA Controller',
		   '--port' , 1,
		   '--device', 0,
		   '--type', 'hdd',
		   '--medium', HOME_DISK]
  end
end


blog comments powered by Disqus