Skip to main content

Updated Sep 3, 2026

The Boot Chain

The whole handoff sequence in one diagram, with the exact artefact passed at each step and where each one lives on disk.

Debugging a boot that doesn't work means knowing exactly what got handed from one stage to the next, and where the artefact each stage is looking for actually lives on disk. Every stage in this chain does one job and then gets out of the way — it doesn't know what came before it beyond the one thing it was given, and it doesn't know what comes after beyond the one thing it produces. That narrowness is what makes the chain debuggable at all: a failure has a location, because every step either found its input or it didn't. This page is the map. The rest of this folder is the territory each stop on the map expands into.

The chain, end to end​

The full boot chain, with the artefact handed over at each step.

Two topics sit beside this chain rather than inside it, because they aren't handoff steps: the kernel command line is text threaded through several of these arrows rather than a stage of its own, and Secure Boot is a verification gate that can sit between any two of the first three nodes, rejecting a handoff instead of performing one.

What is handed over at each step​

StepArtefactWhere it lives on diskHow to inspect it
Firmware picks a loadera boot variable / boot order entryfirmware NVRAM — not on any filesystemefibootmgr -v
Boot loader loads a kernel\EFI\<vendor>\grubx64.efi (UEFI) or the MBR's first-stage code (legacy)the EFI System Partition, or the disk's first sectorls /boot/efi/EFI/*/
Kernel image/boot/vmlinuz-*/bootls -l /boot/vmlinuz-*
Initramfs/boot/initrd.img-*/bootlsinitramfs /boot/initrd.img-$(uname -r) | head (Debian/Ubuntu)
Real rootwhatever root= names — a device, a UUID, a LABELnamed on the kernel command line, not stored as a filecat /proc/cmdline
Init/sbin/initthe real root filesystem, reachable only after switch_rootls -l /sbin/init

Where each step is covered​

Step in the chainPage
What firmware does before anything Linux existsFirmware: BIOS and UEFI
The full chain, in one placethis page
Finding a kernel and initramfs, and handing offBoot Loaders
What text actually gets passed to the kernelThe Kernel Command Line
Verifying every step before it's allowed to runSecure Boot and Signed Kernels
Unpacking bzImage into a running kernelInside bzImage
CPU mode transitions before the first C functionEarly Boot: Getting to C
start_kernel() and the initcall levelsstart_kernel and the Initcall Order
Unpacking and using the initramfsinitramfs and Early User Space
Moving to the real root and becoming PID 1switch_root and PID 1
How systemd turns units into a bootsystemd: The Model
Reading timestamps, diagnosing a broken bootsystemd in Practice, and Debugging a Broken Boot

Where it usually breaks​

SymptomLikely stepCovered in
Firmware finds nothing bootablefirmware has no usable boot-order entry (empty NVRAM, missing ESP)Firmware: BIOS and UEFI
Loader menu appears, but no kernel is foundthe loader's config points at a vmlinuz/initrd that isn't where it expectsBoot Loaders
Kernel panics with "unable to mount root fs"the root= device named on the command line doesn't exist or isn't ready yetswitch_root and PID 1
Dropped to an (initramfs) shell promptearly user space couldn't find or mount the real root itselfinitramfs and Early User Space
Boots to emergency.targetsystemd reached PID 1 fine, but a critical unit or mount failed after thatsystemd in Practice, and Debugging a Broken Boot

References​

  • Boot Loader Specification — the standard /boot layout modern distributions are converging on, and the source for this page's artefact-location table.
  • The kernel's admin guide to init — the kernel's own account of the "unable to mount root" class of failure, written for exactly this page's failure table.
  • man 7 boot — the traditional boot sequence, stated compactly, and a useful cross-check against this page's diagram.