VMLite VBoot - Linux VHD Boot

updated on June-08-10

Copyright 2010, VMLite Inc.

1 Overview

1.1 Linux as Real Appliance

With VBoot for Linux, you can pre-install and pre-configure Linux OS and its applications, then distribute the resulting virtual disk file in VHD format. The vhd can boot a real computer, with configuration and apps instantly available. This way, operating systems are truly manageable, as simple as files. We call such a Linux VHD to be a real appliance, in the sense that it boots physical computers.

It's very easy to setup and boot a computer with a vhd file. You download the vhd file, drop it to Windows or Linux file system, then configure the boot loader, and reboot the computer.

1.2 Linux as Virtual Appliance

The exact same vhd file also runs as a virtual machine using virtualization software, such as VMLite Workstation, VirtualBox, Xen and Virtual PC and Hyper-V, etc. By default, it's optimized for VMLite Workstation.

If VMLite Workstation is installed, you can simply double click the mint-9-gnome-i386.mop file to launch the vhd as a virtual machine with VMLite Workstation.

1.3 USB Boot Made Eas

You just need to store the vhd file to usb drive, then hook the USB to different computers to boot. If your computer BIOS does not support USB boot, you need to configure GRUB2 to support USB.

1.4 The sample LinuxMint 9 VHD

The sample  mint-9-gnome-i386.vhd is a pre-installed 32-bit Mint 9 desktop version in English.

2 System Requirements

3 Download and Extract

The sample Mint 9 package is a few hundred MB, so it will take quite some time to download, and it's recommended to use a download manager, such as FlashGet.

Once download is complete, first you need to extract the file, which is in .7z format. More info can be found at http://www.7-zip.org/download.html. On Windows, you can use WinRar or 7Zip to extract the file. On Linux, you can use the following commands to install 7zip, and unzip the file:

    sudo apt-get install p7zip

    p7zip -d mint-9.7z

In order to boot a computer using the vhd file, make sure that it's not extracted to a network drive, or to another virtual disk. The vhd file must reside in a basic volume on internal or external hard disks (e.g., USB drives), otherwise, it won't boot.

4 Install on Windows

If your current host is Windows, you need to install VBoot loader, and add a boot entry to Windows boot manager. In addition, you need to tell VBoot where to find the vhd file.

4.1 Automatic Setup by running setup.exe

It's highly recommend that you use this method to setup VBoot on Windows, since it's extremely simple and automates everything. You simply double click setup.exe on 32-bit Windows, or setup64.exe on 64-bit Windows. The setup utility will install VBoot Loader, and configure the Windows boot loader to contain an entry to boot the Linux VHD.

After setup.exe is successfully run, you reboot the computer, and you should see a "VBoot - Ubuntu VHD Boot" entry as the last one, select this entry to boot to Linux.

4.2 Manual Setup

If somehow the automatic setup doesn't work, then you can perform the following manual steps:

4.2.1 Copy VBoot Loader Files

The VBoot loader is based on GNU GRUB2, and its files are located in vboot sub directory.

For example, if you want to copy the files to C:\, you need to copy the vboot directory to c:\, so you will have c:\vboot directory. Then you must copy vbootldr.mbr and vbootldr to c:\.

The following commands can be used to copy the files. Make sure to run from the extracted dir.

md c:\vboot
xcopy /s vboot c:\vboot
copy vboot\vbootldr c:\
copy vboot\vbootldr.mbr c:\

4.2.2 Configure grub.cfg

A sample grub.cfg file is placed in c:\vboot\grub directory (or d:\vboot\grub depending on where you have copied the files). This is the GRUB2 configuratrion file to load operating systems. Inside this file, the vhd file path is hard coded, and thus you have to modify it.

grub.cfg is a text file that you can use notepad to open and modify. The relevant portion is shown below:

menuentry "VHD Mint 9, Linux 2.6.32-21-generic" {
	insmod vhd
	vhd vhd0 (hd0,1)/mint-9/mint-9-gnome-i386.vhd --partitions
	linux (vhd0,1)/boot/vmlinuz-2.6.32-21-generic root=/dev/sda1 vloop=/mint-9/mint-9-gnome-i386.vhd quiet splash
	initrd (vhd0,1)/boot/initrd.img-2.6.32-21-generic
}

menuentry groups a specific operating system. The first line insmod vhd inserts our vhd.mod module to the boot loader. vhd.mod is a GRUB2 module that treats a vhd file as hard disk, and allows GRUB2 to read files from the vhd. For example, the Linux kernel and initrd are loaded from the vhd file, as configured above.

There are three paths (as shown in red) related to the vhd file that you need to change depending on the directory to which the vhd file is extracted.

The vhd path (hd0,1)/mint-9/mint-9-gnome-i386.vhd is in GRUB2 format where (hd0,1) indicates hard disk 0 and partition 1, with the rest is the absolute path in UNIX format. For example, if your vhd file is inside a folder called 123 on an external USB disk, then you need to change this path to something like (hd1,1)/123/mint-9-gnome-i386.vhd. The path immediately after vloop= should be the same absolute path without the disk number and partition number.

The root path is the Linux device name for the disk where the vhd file resides. The number is the partition number, and the letter 'a', 'b', 'c', etc, represents which disk. For (hd0,1), the name would be /dev/sda1; For (hd1,1),  it would be /dev/sdb1; For (hd2,4), it would be /dev/sdc4, etc.

44.2.3 Configure Windows Boot Loader

Once VBoot Loader and the vhd file are ready, you need to configure Windows boot manager, so you can boot to the Linux VHD. You need to append the vbootldr.mbr entry to the [operating systems] section. The following is sample boot.ini file with VBoot entry added at the very last. Shown in red is what you need to add to boot.ini. Change C: to whatever drive you have copied VBoot Loader files.

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
C:\vbootldr.mbr="VBoot - Ubuntu VHD Boot"
4.2.3.2 Windows Vista/2008/7

Windows Vista and above use a different mechanism other than boot.init to boot, and you need to run bcdedit.exe to make changes to the boot manager. The following are the commands to run if you have copied VBoot Loader to drive C:.  You must rum these commands as Administrator. Go to Windows Start menu > All Programs > Accessories, then right click on "Command Prompt", then select "Run As Administrator". Once command prompt window is open, you can enter these commands.

bcdedit /create {D3DCE997-7447-41FC-9740-A8D20EE3BF55} /d "Ubuntu VHD Boot" /application BOOTSECTOR
bcdedit /set {D3DCE997-7447-41FC-9740-A8D20EE3BF55} device partition=C:
bcdedit /set {D3DCE997-7447-41FC-9740-A8D20EE3BF55} path \vbootldr.mbr
bcdedit /displayorder {D3DCE997-7447-41FC-9740-A8D20EE3BF55} /addlast
bcdedit /timeout 30

5 Install on Linux

On Linux systems, there is no need to install VBoot Loader. Instead, you only need to add an entry to your current boot loader so the Linux VHD can be booted.

5.1 Configure GRUB2

You can edit the GRUB2 config file, /boot/grub/grub.cfg, using any text editor, and insert an entry like the following:

menuentry "VHD Mint 9, Linux 2.6.32-21-generic" {
	linux (hd0,1)/mint-9/vmlinuz-2.6.32-21-generic root=/dev/sda1 vloop=/mint-9/mint-9-gnome-i386.vhd vlooppart=p1 quiet splash
	initrd (hd0,1)/mint-9/initrd.img-2.6.32-21-generic
}

There are some subtle differences between Linux and Windows host. On Windows where our GRUB2 module,vhd.mod, is available, you can configure GRUB2 to load the Linux kerenl and initrd from the exactly same vhd file, whereas on Linux systems, the kernel and initrd are separate files residing externally. In other words, on Windows, it's strictly only one vhd file is required; whereas on Linux, 3 files (kernel, initrd, vhd) are required. We will try to make the vhd.mod module to support Linux file system soon.

Obviously, you need to change the paths depending on the directory to which the kernel, initrd and vhd files are extracted.

The path (hd0,1) indicates hard disk 0 and partition 1, with the rest is the absolute path in UNIX format. For example, if your vhd file is inside a folder called 123 on an external USB disk, then you need to change this path to something like (hd1,1)/123/mint-9-gnome-i386.vhd. The path immediately after vloop= should be the same absolute path without the disk number and partition number.

The root path is the Linux device name for the disk where the vhd file resides. The number is the partition number, and the letter 'a', 'b', 'c', etc, represents which disk. For (hd0,1), the name would be /dev/sda1; For (hd1,1),  it would be /dev/sdb1; For (hd2,4), it would be /dev/sdc4, etc.

5.3 Configure Legacy GRUB

For GRUB 0.97 and similar, you can add an entry to your GRUB config file, /boot/grub/menu.lst, using any text editor, and insert an entry like the following:

title	VBoot - Ubuntu VHD Boot
kernel  /boot/mint-9/vmlinuz-2.6.32-21-generic root=/dev/sda1 vloop=/boot/mint-9/mint-9-gnome-i386.vhd vlooppart=p1 quiet splash
initrd  /boot/mint-9/initrd.img-2.6.32-21-generic
quiet    

Obviously, you need to adjust the paths according to your own locations for the Linux kernel, initrd and vhd file.

5.4 Configure other Boot Loaders

We haven't tested other Linux boot loaders, such as LILO and SYSLINUX, but they may work as well. The important thing is to add vloop= argument to the Linux kernel line:

     root=/dev/sda1 vloop=/boot/mint-9/mint-9-gnome-i386.vhd

The above tells where to locate the vhd file.

6 Making your own Linux VHD File

If you want to make your own Linux VHD file to boot, right noow you can do so only if your Linux kernel version is compatible with Ubuntu 9.10 or 10.04. After we release the source code, you can create VHDs by yourself for all Linux kernel versions.

Follow the following steps:

1) Download and install VMLite Workstation.

2) Create a VHD virtual disk file, for example, you can run the following command to create a vhd file with disk capacity of 100G:

    VBoxManage createhd --format vhd --filename mint-9-gnome-i386.vhd -size 102400 --remember

3) Create a vm, attach the VHD file created from step 2), boot teh vm using Ubuntu 9.10 or 10.04 32-bit CDROM, and install Ubuntu inside the vm.

3) After the VHD is ready, you download an initrd file from us, and you will be able to boot the vhd.