4.4. Bootable CDROMs

To allow the BIOS to boot from a CDROM, an extension to the ISO-9660 specification called El Torito was written in 1995 by Phoenix Technologies and IBM. This specification uses the existing ISO-9660 definitions and will cause the BIOS to boot a disk image using a floppy or hard disk emulation.

The ISO-9660 standard specifies that a CDROM should contain any number of Volume Descriptors. The El Torito specification adds such a descriptor called a Boot Record.

The Boot Record points to a Boot Catalog which can contain a list of boot entries. The boot catalog contains a default entry which points to a floppy or hard disk boot image.

The mkisofs tool can take a boot image (floppy or hard disk) and add the image in the root directory of the CDROM (usually boot/).

4.4.1. Using disk emulation

Assuming we are creating the CD in a directory called CD-root, we can create the bootable disk image with dd.

dd  if=/path/to/boot/image  of=CD-root/boot/boot.img

The iso-image is then created with the following command:

mkisofs -b boot/boot.img -c boot/boot.catalog -o boot-cd.iso .

4.4.2. Alternatives without disk emulation

It is possible to make a bootable CD using the ISOLINUX bootloader.

ISOLINUX is a boot loader for Linux/i386 that operates off ISO 9660/El Torito CD-ROMs in "no emulation" mode. This avoids the need to create an "emulation disk image" with limited space (for "floppy emulation") or compatibility problems (for "hard disk emulation".)

The syslinux package will install the isolinux.bin bootloader. Depending on the distribution this can be found in /usr/lib/syslinux/ or /usr/share/syslinux/.

You next need to create a bootable CD.

  1. Make a directory in /tmp

    mkdir /tmp/boot-cd
    
  2. Copy the files needed

    cp /usr/share/syslinux/isolinux.bin /tmp/boot-cd
    cp /boot/vmlinuz-full-version /tmp/boot-cd/vmlinuz
    cp /boot/initrd-full-version.img /tmp/boot-cd/initrd
    
  3. Edit the /tmp/boot-cd/isolinux.cfg file with the following content:

    DEFAULT linux
    LABEL  linux 
    KERNEL vmlinuz
    APPEND  initrd=initrd root=/dev/???
    
  4. Create the isoimage with the -no-emul-boot option

    cd /tmp/boot-cd/
    
    mkisofs -o ../boot-cd.iso -b isolinux.bin -c boot.cat \ 
     -no-emul-boot -boot-load-size 4  -boot-info-table ./
    

4.4.3. Copying a Bootable CD

In this section we assume that we already have a bootable CDROM. For example the first disk of a boxed Linux distribution.

Put the bootable CD into the CDROM tray. Do not mount the disk!

Then simply type:

dd if=/dev/cdrom of=distro-inst1.iso

This will create an iso-image of the disk called distro-inst1.iso and can be written to a blank disk with cdrecord.