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 (with some updates introduced in later versions):
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]
See doc/chain for more options.
Numbering of Drives and Partitions
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:
The drive and partition from which Syslinux is booted can be referred to with the parameter:
Find partition by uuid or label in all GPT partitions on all available drives:
Note that label and guid work only on GPT partition tables, it is not filesystem but partition label and uuid.
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
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
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
LABEL mbr_serial COM32 chain.c32 APPEND mbr:0x0ec8694c
The following are some popular options available for chain.c32. See doc/chain for more options.
- loads the file <loader> **from the SYSLINUX filesystem** instead of loading the boot sector.
- loads at and jumps to <seg>:0000 instead of 0000:7C00.
- 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.
- equivalent to seg=0x2000 file=<loader> sethidden, used with WinNT's loaders
- Chainload GRUB4DOS grldr, performing additional corrections on the file in memory.
- used with Recovery Console of Windows NT/2K/XP. same as ntldr=<loader> & "cmdcons\0" written to the system name field in the bootsector.
- equivalent to seg=0x60 file=<loader> sethidden, used with FreeDOS kernel.sys.
- equivalent to seg=0x70 file=<loader> sethidden, used with MS-DOS (v.2.xx to 6.xx)' io.sys.
- equivalent to seg=0x70::0x200 file=<loader> sethidden, used with MS-DOS v.7+' io.sys.
- equivalent to seg=0x70 file=<loader> sethidden, used with PC-DOS' ibmbio.com.
- equivalent to seg=0x70 sect=0x2000:0:0 file=<loader> sethidden, used with DRMK' dellbio.bin.
- equivalent to seg=0:0x8000:0x8100 file=<loader> setbpb nohand, used with ReactOS' freeldr. Add 'save' option so to store corrected BPB values. Supported since Syslinux v.4.05.
- equivalent to seg=0x800::0x200 file=<loader> nohand nosect grub, used with grub legacy's stage2, performing additional corrections on the file in memory. Optionally, an alternative config file can be specified through the 'grubcfg=' option. Supported since Syslinux v.4.02.
- if the disk is not fd0/hd0, install a BIOS stub which swaps the drive numbers.
- 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.
- update the "hidden sectors" (partition offset) field in a FAT/NTFS boot sector.