Run a VirtualBox VM from a removable drive in Windows.
This bundle of .cmd
scripts will let you run a VirtualBox VM from any removable drive, or really any location with a driveletter mapped to it, such as usb-drives, external harddisks, network shares, etc...
Windows with a pre-installed version of VirtualBox (version 7.x.x) and a prepared VM.
First, a quick overview and description of the files and folders that come with this repository:
📁 Scripts
-> supporting script files📁 Shared
-> shared folder📁 VM
-> folder to contain the VM files📟 Compact.cmd
-> command to compact the VM harddisk📝 Config.ini
-> configuration file📄 README.md
-> this readme📟 Run.cmd
-> runs the VM in immutable mode📟 RunMutable.cmd
-> runs the VM in mutable mode
To prepare your VM for transfer to the removable medium:
- Copy ALL the files and folders of this repository to any location on a removable drive.
- Make sure the VM has no snapshots! or that they have been merged.
[!WARNING] Any remaining snapshots will end up being removed!!
- Make sure the VM has only has 1 harddisk attached to SATA port 0.
- Modify the
📝 Config.ini
and enter the right information for your VM:
VM_NAME=VirtualMachine
VM_VBOX_UUID=0d5ecb7b-e2df-4110-8899-fa02fa5ce780
VM_VBOX_FILE=VirtualMachine.vbox
VM_HDD_UUID=94b2fd99-d68c-4428-bca7-c0f999c1a431
VM_HDD_FILE=VirtualMachine.vdi
VM_SHARE_NAME=vboxshare
VM_SHARE_RELATIVE_PATH=Shared
Note
- Find the
VM_HDD_UUID
for the harddisk in VirtualBox, by finding it viaFile>Tools>Virtual Media Manager
, selecting the disk -> right-click ->Properties
, then the Information tab. - Determine the name and
VM_VBOX_UUID
by opening the VM's.vbox
file in an editor.
(OPTIONAL: you can change the name of the VM and it's files or even it UUID if so desired) - Choose a name for
VM_SHARE_NAME
and modify, relocate or rename the📁 Shared
folder as you wish, and configure its relative path withVM_SHARE_RELATIVE_PATH
.
- Detach the VM from VirtualBox, if it still is.
- Detach any remaining media/harddisks related to the VM in
File>Tools>Virtual Media Manager
. - Put all your VM files (
.vbox\.vdi\.vmdk
etc...) in the📁 VM
folder. - Run the VM with
📟 Run.cmd
or📟 RunMutable.cmd
!
Effectively this tool just automates the following steps when temporary running a VM from a 'remote' location within an already installed version of VirtualBox on Windows:
- Registers the VM within VirtualBox
- Attach the configured shared folder to the VM
- Attach the virtual harddisk, either as mutable or immutable
- Runs the VM
- Waits for the VM to be stopped
- Detach the harddisk
- Detach the shared folder
- Removes the harddisk and it's snapshots from the VirtualBox (snapshots will be removed)
- Unregisters the VM
The shared folder can typically be used for read/write storage, while the VM itself can be run in an immutable state. Configuration is done via 📝 Config.ini
.
Use 📟 RunMutable.cmd
only when you actually want to make changes to (or update) the guest OS in the VM. Use the Shared folder for storage of data that needs to be accessible and mutable from within both the guest and host OS.
Use 📟 Compact.cmd
utility to reduce the size of the virtual harddisks of the guest OS. Before doing this, make sure to clean up the guest OS, and, ideally, also 'zero clear' it's partitions (i.e. overwriting all unused space with zeros), so the disk can be compacted as much as possible.
Each of the script files under 📁 Scripts
can be run separately. See Scripts\StartScript.cmd
for an example of the order in which they are normally ran. This can be useful for (step-by-step) debugging or when something may have gone wrong, like, for example when a previous run got interrupted and the VM didn't get properly unregistered with VirtualBox.
-
[!WARNING] Snapshots are not supported yet and will be removed!
- Only 1 virtual disk is supported.
- The virtual disk is assumed to be connected to SATA port 0.
- Only 1 shared folder (with a relative path) can be configured with this tool.
- The shared folder is not auto-mounted, so you'll need to mount it yourself in the Guest OS (see below!).
- The shared folder is always mounted as read/write.
- The guest OS mount point for the shared folder cannot be specified yet
- Make
--automount
and--readonly
for the shared folder configurable in the config file. - Add the ability to specify the guest OS mount point in the config file.
- Automatically determine the UUIDs for VM and disks.
- Add ability to add a few virtual harddisks in either mutable or immutable mode.
- Support for disks different than SATA (e.g. IDE, SCSI, nVME)
- Find a way to support snapshots.
To mount a shared folder named vboxshare
under Linux:
mkdir /home/<user>/shared
sudo mount -t vboxsf -o uid=1000,gid=1000 vboxshare /home/<user>/shared
Or mount the share at boot by putting it in /etc/fstab
:
vboxshare (/mnt/shared) vboxsf defaults,uid=(1000),gid=(1000),umask=0022 0 0
Note that for this to work edit /etc/module
to add vboxsf
so that it is present at boot-time.
Also: In case we enabled auto-mounting those shared folders will automatically be mounted in the guest OS with mount point /media/sf_vboxshare
. To have access to these folders users in the guest need to be a member of the group vboxsf
.
sudo usermod -aG vboxsf $USER