Comboot/chain.c32
chain.c32 is a COM32 module for Syslinux. It can chainload MBRs, partition boot sectors, Windows bootloaders (ntldr, setupldr.bin and bootmgr), MS-DOS and PC-DOS io.sys, Freedos kernel.sys, isolinux.bin (only from ISOLINUX), grldr of grub4dos or a bootsector saved to a file. It can also swap BIOS drive numbers or hide partitions.
All options as available in chain.c32 of Syslinux 3.85:
Usage: chain.c32 hd<disk#> [<partition>] [options] chain.c32 fd<disk#> [options] chain.c32 mbr:<id> [<partition>] [options] chain.c32 boot [<partition>] [options] chain.c32 fs [options] chain.c32 label=<label> [options] chain.c32 guid=<label> [options] Options: file=<loader> load file, instead of boot sector isolinux=<loader> load another version of ISOLINUX ntldr=<loader> load Windows NTLDR, SETUPLDR.BIN or BOOTMGR cmldr=<loader> load Recovery Console of Windows NT/2K/XP freedos=<loader> load FreeDOS kernel.sys msdos=<loader> load MS-DOS io.sys pcdos=<loader> load PC-DOS ibmbio.com seg=<segment> jump to <seg>:0000 instead of 0000:7C00 swap swap drive numbers, if bootdisk is not fd0/hd0 hide hide primary partitions, except selected partition sethidden set the FAT/NTFS hidden sectors field
Contents
Numbering of Drives and Partitions
Drive numbering
Hard drive numbering starts at 0:
- hd0 : first hard drive (as seen by the BIOS)
- hd1 : second hard drive
- hd2 : third hard drive
- ...
Floppy drive numbering starts at 0:
- fd0 : first floppy drive
- fd1 : second floppy drive
The drive from which Syslinux is booted can be referred to with the parameter:
- boot
The drive and partition from which Syslinux is booted can be referred to with the parameter:
- fs
Find partition by uuid or label in all GPT partitions on all available drives:
- label=label
- guid=guid
Note that label and guid works only on GPT partition tables, it is not filesystem but partition label and uuid.
Partition numbering
Partition numbers (short):
- 0 : MBR (default.)
- 1-4 : primary partitions
- 5 and higher : logical partitions
Partition numbers (long):
- 0 : MBR (default)
- 1 : first primary partition
- 2 : second primary partition
- 3 : third primary partition
- 4 : fourth primary partition
- 5 : first logical partition
- 6 : second logical partition
- 7 : third logical partition
- 8 : fourth logical partition
- 9 : fifth logical partition
- 10 : sixth logical partition
- 11 : seventh logical partition
- 12 : eighths logical partition
- ...
Examples
UI menu.c32 LABEL boot_hd0 MENU LABEL Boot from first hard drive COM32 chain.c32 APPEND hd0 LABEL boot_hd1 MENU LABEL Boot from second hard drive COM32 chain.c32 APPEND hd1 LABEL boot_fd0 MENU LABEL Boot from first floppy drive COM32 chain.c32 APPEND fd0 LABEL boot_syslinux_drive MENU LABEL Boot the drive from which Syslinux is booted (hard drive or floppy drive) COM32 chain.c32 APPEND boot LABEL boot_syslinux_filesystem MENU LABEL Boot the filesystem from which Syslinux is booted (partition in hard drive or floppy drive) COM32 chain.c32 APPEND fs LABEL boot_hd2_2 MENU LABEL Boot second primary partition from thirth hard drive COM32 chain.c32 APPEND hd2 2 LABEL boot_hd1_5 MENU LABEL Boot first logical partition from second hard drive COM32 chain.c32 APPEND hd1 5 LABEL boot_hd3_0 MENU LABEL Boot MBR of fourth hard drive (same as "APPEND hd3") COM32 chain.c32 APPEND hd3 0 LABEL boot_part_win7fs MENU LABEL Boot ntld from GPT partition labelled "win7fs" COM32 chain.c32 APPEND label=win7fs ntldr=/bootmgr
mbr:
The mbr: syntax means search all the hard disks until one with a specific MBR serial number (bytes 440-443) is found.
You can get the MBR serial number, by running the following command (change /dev/sda to the correct device):
$ hexdump -s 440 -n 4 -e '"0x%08x\n"' /dev/sda 0x0ec8694c
Or by running:
$ fdisk -l /dev/sda ... Disk identifier: 0x0ec8694c
Example:
LABEL mbr_serial COM32 chain.c32 APPEND mbr:0x0ec8694c
Options
file=<loader>
- loads the file <loader> **from the SYSLINUX filesystem** instead of loading the boot sector.
seg=<segment>
- loads at and jumps to <seg>:0000 instead of 0000:7C00.
isolinux=<loader>
- Chainload another version/build of the ISOLINUX bootloader and patch the loader with appropriate parameters in memory. This avoids the need for the -eltorito-alt-boot parameter of mkisofs, when you want more than one ISOLINUX per CD/DVD.
ntldr=<loader>
- equivalent to seg=0x2000 file=<loader> sethidden, used with WinNT's loaders
- Example loaders: NTLDR (XP, 2003), BOOTMGR (Vista, 2008, 7), GRLDR (Grub4DOS).
- See: HowTos & Linux and Windows deployment
cmldr=<loader>
- used with Recovery Console of Windows NT/2K/XP. same as ntldr=<loader> & "cmdcons\0" written to the system name field in the bootsector
freedos=<loader>
- equivalent to seg=0x60 file=<loader> sethidden, used with FreeDOS kernel.sys.
msdos=<loader>
- equivalent to seg=0x70 file=<loader> sethidden, used with DOS' io.sys
pcdos=<loader>
- equivalent to seg=0x70 file=<loader> sethidden, used with DOS' io.sys.
swap
- if the disk is not fd0/hd0, install a BIOS stub which swaps the drive numbers.
hide
- change type of primary partitions with IDs 01, 04, 06, 07, 0b, 0c, or 0e to 1x, except for the selected partition, which is converted the other way.
sethidden
- update the "hidden sectors" (partition offset) field in a FAT/NTFS boot sector.