Wednesday, December 05, 2007

First release of extboot

Today I released the first set of patches for extboot. extboot is an option ROM that allows booting a guest from virtually any type of block device.

Historically, the PC BIOS is only capable of booting from IDE devices. The PC BIOS doesn't need a special driver for every type of IDE controller simply because every IDE controller supports a compatibility mode that dates back to the earliest IBM PCs. The PC BIOS uses this compatibility mode to access the disk thus avoiding having to support dozens of different IDE controllers. When SCSI was introduced, to allow these devices to used for boot, option ROM support was added to the PC BIOS. Every PCI device can provide a piece of ROM memory that the BIOS runs before booting. These ROMs can do horrible things to overwrite portions of the BIOS and trick the BIOS and bootloaders into thinking they are booting from an IDE device when it's really booting from a SCSI device.

Most virtualization solutions offer support for IDE and SCSI devices and include SCSI option ROMs to enable booting from SCSI. Some products, like Xen, also provide paravirtual disk drivers. Up until now, these devices were not bootable. This required guests to have a bootable IDE partition and then another PV disk partition. It's a real pain from an administration perspective. Beyond performance, there are a few reasons to prefer PV disk drivers over SCSI. PV disk drivers allow unlimited support for adding new features whereas with SCSI you are limited to whatever hardware supports.

extboot is an option ROM that can trick the PC BIOS into thinking that any block device is actually an IDE drive. It can be used not only for booting from SCSI devices but also from true PV disk drivers. This is something that, to the best of my knowledge, has never been possible in any x86 virtualization solution.

extboot support should be available in QEMU, KVM, and Xen in the near future so keep an eye out for it :-)