If you are running Ubuntu, and want to mount a virtual hard disk image on your host, here is how to do it.
This works for any VBox-compatible disk:
- VDI – VirtualBox disk image (Oracle)
- VMDK – Virtual Machine Disk (VM ware)
- VHD – Virtual Hard Disk (Microsoft)
- HDD – Parallels Hard Disk (OS X)
First of all, install virtualbox-fuse, to be able to mount virtual disk as Filesystem in Userspace (FUSE):
sudo apt-get install virtualbox-fuse
Next step is setting the proper permissions for the configuration file:
sudo chmod a+rwx /etc/fuse.conf
Mount the virtual disk as FUSE:
vdfuse -r -a –v -f /path/to/virtual/disk/VirtualDiskName.vhd /path/to/mount/fuse_folder
(for explanation of the options used here, see the end of this post)
The output of this command would look something like this:
disktype is VHD
Partition Size Offset
========= ==== ======
Partition1 1048576 104857600
Partition2 105906176 107267227648
Now, the partition(s) appear as block files (Partition1, …), and can be mounted as a Loop Device:
sudo mount /path/to/mount/fuse_folder/Partition1 /path/to/mount/as/loop/folder/
Now the files contained in the virtual disk image can be accessed under /path/to/mount/as/loop/folder/
After usage, if the virtual disk image should be used in the same session, do the following unmounts:
sudo umount /path/to/mount/as/loop/folder/
sudo umount /path/to/mount/fuse_folder/
If you do a vdfuse -h, you will get the following:
DESCRIPTION: This Fuse module uses the VirtualBox access library to open a
VirtualBox supported VD image file and mount it as a Fuse file system. The
mount point contains a flat directory containing the files EntireDisk,
Partition1 .. PartitionN. These can then be loop mounted to access the
underlying file systems
USAGE: vdfuse [options] -f image-file mountpoint
-h help
-r readonly
-t specify type (VDI, VMDK, VHD, or raw; default: auto)
-f VDimage file
-a allow all users to read disk
-w allow all users to read and write to disk
-g run in foreground
-v verbose
-d debug
NOTE: you must add the line “user_allow_other” (without quotes) to /etc/fuse.confand set proper permissions on /etc/fuse.conf for this to work.