License
- MIT
- Yesattribution
- Permissivelinking
- Permissivedistribution
- Permissivemodification
- Nopatent grant
- Yesprivate use
- Permissivesublicensing
- Notrademark grant
Downloads
Readme
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
- Alex Pyrgiotis
- qdetweiler
- Jacob Christensen
- roccotigger
TODO
- There’s Always Something to Do
- Add more options (controller, port, etc.)