Understanding and Configuring VirtualBox Virtual Hard Disks

From Virtuatopia

Most operating systems require access to some form of storage space, typically in the form of a disk drive, to store operating system files, applications and user data. The guest operating systems supported by VirtualBox are no exception to this rule. To meet this requirement, VirtualBox provides a number of virtual hard disk drive configuration options, each of which is the topic of this chapter.

VirtualBox provides access to storage by presenting virtual hard disk controllers to virtual machines. Although these virtual controllers are essentially software emulations of physical hard disk controllers, as far as the guest operating systems are concerned, these appear as real, physical devices. A number of different standards of disk controller have developed over the years and VirtualBox provides virtual versions of the following standards:

Serial ATA (SATA/AHCI) - The latest drive controller standard, SATA provides higher levels of storage access performance and, unlike the older IDE standard, does not impose limited restrictions on the number of devices that can be attached to a single disk controller. In addition, SATA is designed to allow disk drives to be added and removed without powering down the system. SATA disk controllers may be configured to run in IDE compatibility mode to allow access from guest operating systems lacking Advanced Host Controller Interface (AHCI) support. VirtualBox allows up to 30 SATA ports to be configured per virtual machine. The first four of these SATA ports are configured by default to operate in IDE compatibility mode. The SATA controller is disabled by default for new VirtualBox virtual machines. To enable the SATA controller, select the required virtual machine, click on Settings in the toolbar, select Hard Disks from the list of categories and set the Enable SATA Controller check box. Finally, click OK to commit the change.

Integrated Drive Electronics (IDE) - Perhaps the most widely used disk controller standard, IDE controllers are now being replaced in favor of the SATA standard. The VirtualBox virtual IDE disk controller allows up to four storage devices to be connected to a virtual machine using the Primary Master, Primary Slave, Secondary Master and Secondary Slave slots. The Secondary Master connection is reserved for CD/DVD devices, allowing for the attachment of three virtual hard disks to the controller. If additional IDE disks are required, it will be necessary to enable the VirtualBox SATA controller for the virtual machine as outlined above and use the SATA IDE compatibility mode.

Small Computer System Interface (SCSI) - A popular storage connection standard, SCSI is based on a bus topology allowing up to 16 stroage devices to be connected to a disk controller in a daisy chain configuration. Each device is assigned a unique SCSI identifier to distinguish it from other devices on the SCSI bus. VirtualBox provides emulation for BusLogic and LsiLogic 53c1030 SCSI disk controllers. SCSI virtual disk controller support is currently categorized as experimental in VirtualBox 2.1.

The most common method for providing disk storage to virtual machines is through the use of virtual disk image files. A virtual disk image file is nothing more than a file residing on the file system of the host that is treated by a virtual disk controller in the same way as a physical disk drive is used. The guest operating system interacts with this image through a virtual disk controller and is completely unaware of the fact that what it thinks is a physical hard disk drive is actually a file.

Virtual disk images can be created as either fixed-size or dynamically expanding:

Dynamically Expanding - The disk image file is created at a minimal size and then grows automatically as more space is needed by the guest operating system (up to a specified maximum). This has the advantage that disk space on the host is not used until it is needed, but can result in slower performance if the disk needs to be enlarged frequently.

Fixed-size - The disk image file is created to the specified size. This pre-allocates all the requested disk space regardless of whether it is immediately needed, but results in improved disk write performance.

In addition to the option to make a virtual disk image size fixed or dynamic, three additional options are available in the form of immutable, normal and write-through settings, each of which is associated with the way in which data is written to the disk drive:

Normal - This is the default setting for newly created disk images. Any data read or write operations performed on the disk image by the guest operating system are performed on the disk image itself. As such, a normal disk may only be associated with one running virtual machine at any one time. In addition, any changes to the data on the disk are remain after the guest system is powered off.

Immutable - When a virtual disk image is configured as immutable, the contents of the disk are read-only. Any data written by a guest operating system to an immutable disk are stored in a separate differencing disk image. When the virtual machine to which the disk image is attached is powered or reset, the differencing disk and the contents therein are discarded, leaving the immutable disk unaltered. This approach allows multiple virtual machines to share the same disk image file, each being assigned its own differencing disk during run time.

Write-through - Write-through disk images allow read and write operations to be performed on the disk image. When the virtual machine is powered off or reset, however, the state of the disk image is not saved, thereby reverting to its original state next time the virtual machine starts.

To convert an existing virtual disk image to immutable or write-through type it must first be detached from any virtual machines. This can be achieved by selecting the virtual machine to which the disk is attached from the VirtualBox management interface and clicking on the File->Virtual Media Manager menu option. In the Media Manager dialog, select the disk to be modified and click on the Release toolbar button.

Before changing the type of a virtual disk image, it is often useful to find out the current configuration settings. This can be achieved using VBoxManage command as follows:

In addition to the standard Virtual Disk Image (VDI) format, VirtualBox is also able to support VMware's VMDK and Microsoft's VHD virtual hard disk formats. Virtual disk image files in either of these third party formats may be added to the VirtualBox media library using the Virtual Media Manager dialog (accessed via the File->Virtual Media Manager menu option) and subsequently attached to virtual machines.

Virtual disk images may be cloned for use in other virtual machines using the VBoxManage command. This technique also works well for converting virtual disk images from one format to another. The syntax for the command is as follows:

where <source image file> is the virtual disk image file to be converted, <target image file> is the name to be used for the cloned image and format is the target format of the virtual disk image (RAW, VDI, VMDK or VHD).

For example, to clone a VDI disk image named Ubuntu.vdi, naming the clone Ubuntu2.vdi, the following command is executed:

Once the cloning process is complete (the exact duration of the process depends on the size of the original virtual disk), the cloned image will need to be added to the VirtualBox virtual media inventory using the Virtual Media Manager so that it is available for attachment to a virtual machine.

A raw disk image files may be converted to VDI, VHD or VMDK formats using the VBoxManage command. This is particularly useful for converting the contents of a physical disk drive or a Xen based virtual disk image to a VirtualBox disk image. The syntax for this conversion is as follows:

where the optional -static directive specifies that the converted disk is to be fixed in size (when -static is omitted the disk is created as dynamically sized), <format> represents the format to which the raw image is to converted (VDI, VMDK or VHD), <source image file> is the filename of the raw image file and <target image file> is the name of the converted image file.

For example, the following command converts a raw image file to a VDI virtual disk: