Vagrant::Persistent-Storage
A Vagrant plugin that creates a persistent storage and attaches it to guest machine.
Requires Virtualbox 5/6
Installation
$ vagrant plugin install vagrant-persistent-storage
Usage
After installing you can set the location and size of the persistent storage.
The following options will create a persistent storage with 5000 MB, named mysql, mounted on /var/lib/mysql, in a volume group called 'myvolgroup'
config.persistent_storage.enabled = true
config.persistent_storage.location = "~/development/sourcehdd.vdi"
config.persistent_storage.size = 5000
config.persistent_storage.mountname = 'mysql'
config.persistent_storage.filesystem = 'ext4'
config.persistent_storage.mountpoint = '/var/lib/mysql'
config.persistent_storage.volgroupname = 'myvolgroup'
With config.persistent_storage.mountoptions
you can change the mount options (default: defaults).
An example which sets prjquota
option with xfs.
config.persistent_storage.mountname = 'xfs'
config.persistent_storage.filesystem = 'xfs'
config.persistent_storage.mountpoint = '/mnt/xfs'
config.persistent_storage.mountoptions = ['defaults', 'prjquota']
Device defaults to /dev/sdb
. For boxes with multiple disks, make sure you increment the drive:
config.persistent_storage.diskdevice = '/dev/sdc'
If you are using LVM and you would prefer to use the disk rather than a partition, you can set the following configuration:
config.persistent_storage.partition = false
When you expect a lot of writes in the disk (the case for /home
mountpoints) it is recommended to change the disk variant to Fixed
(fixed allocation) instead of the default Standard
(dyanamic allocation). The tested types are Standard
(default) and Fixed
.
config.persistent_storage.variant = 'Fixed'
If you want to pass a list of options to the underlying VboxManage storageattach
call, you can use the config.persistent_storage.attachoptions
option. For instance, if you want to enable TRIM support:
config.persistent_storage.mountoptions = ['defaults', 'discard']
config.persistent_storage.attachoptions = ['--discard', 'on']
Every vagrant up
will attach this file as hard disk to the guest machine.
A vagrant destroy
will detach the storage to avoid deletion of the storage by vagrant.
A vagrant destroy
generally destroys all attached drives. See VBoxManage unregistervm --delete option.
The disk is initialized and added to it's own volume group as specfied in the config; this defaults to 'vagrant'. An ext4 filesystem is created and the disk mounted appropriately, with entries added to fstab ... subsequent runs will mount this disk with the options specified.
Windows Guests
Windows Guests must use the WinRM communicator by setting vm.communicator = 'winrm'
. An additional option is provided to
allow you to set the drive letter using:
config.persistent_storage.drive_letter = 'Z'
Options that are irrelevent to Windows are ignored, such as mountname
, filesystem
, mountpoint
and volgroupname
.
How Is The Storage Created?
Based on the configuration provided, during a vagrant up
a bash script is generated and uploaded to $tmpdir/disk_operations_#{mnt_name}.sh
(Linux) or disk_operations_#{mnt_name}.ps1
(Windows). If the box has not been previously provisioned the script is executed on a vagrant up
. To force the script to be executed again you can run vagrant provision
or if you have halted the box, vagrant up --provision
.
The outcome of the script being run is placed in the home drive of the vagrant user in a file called disk_operation_log.txt
.
Optional settings
config.persistent_storage.part_type_code = '82'
Troubleshooting
If your box is not using LVM you must set config.persistent_storage.use_lvm = false
.
Supported Providers
- Only the VirtualBox provider is supported.
Contributors
- madAndroid
- Jeremiah Snapp
- Hiroya Ito
- joshuata
- Ciprian Zaharie
- aishahalim
- Dick Tang
- dsmaher
- Marsup
- k2s
- vvavrychuk
- Lars Hupfeldt Nielsen
- Chen Yu Pao
- Kris Reese
- Henry N.
- fredleger
- Sebastian Wendel
- Ben Phegan
- Philipp Schrader
- Alex Tomkins
- Marcin Wolny
- Adam Huffman
- caio2k
- Francesco
- Dimitris Aragiorgis
- Symaxion
TODO
- There's Always Something to Do
- Add more options (controller, port, etc.)