How the Linux Boot Process Works

From pressing the power button to seeing a login prompt takes only a few seconds, but an impressive amount of work happens in that time. Understanding each step makes you a much better debugger when things go wrong — and helps you understand systemd, kernel panics, and rescue mode.

The Complete Boot Sequence

1. Power On └─→ CPU starts at reset vector (0xFFFFFFF0) 2. BIOS / UEFI (Firmware) └─→ POST (Power-On Self Test) — RAM, CPU, devices └─→ Finds bootable disk (via boot order) └─→ Loads bootloader from disk 3. GRUB (Bootloader) └─→ Reads /boot/grub/grub.cfg └─→ Shows boot menu (if configured) └─→ Loads kernel (vmlinuz) + initramfs into RAM └─→ Passes kernel command-line parameters └─→ Jumps to kernel entry point 4. Kernel Initialization └─→ Decompresses itself (vmlinuz is compressed) └─→ Detects CPU, sets up memory (page tables) └─→ Sets up interrupt table (IDT) └─→ Initializes scheduler, memory manager └─→ Mounts initramfs as temporary root (/) 5. initramfs └─→ Runs /init (usually systemd or busybox script) └─→ Loads storage drivers (NVMe, SATA, RAID, LVM) └─→ Finds and mounts the real root filesystem └─→ pivot_root → switches to real root 6. PID 1 (systemd / init) └─→ Starts services in dependency order └─→ Brings up networking, logging, time sync └─→ Reaches default.target (usually graphical.target) 7. Login Prompt └─→ getty / display manager starts

BIOS vs UEFI

What's the difference between BIOS and UEFI? BIOS (Basic Input/Output System) is the old firmware standard. It reads the first 512 bytes of the disk (MBR — Master Boot Record) and jumps to whatever code is there. UEFI (Unified Extensible Firmware Interface) is the modern replacement — it can read filesystems directly, supports larger disks, and provides Secure Boot.
BIOSUEFI
Boot mechanismMBR (512 bytes)EFI partition (.efi files)
Disk size limit2 TB (MBR)9.4 ZB (GPT)
Secure BootNoYes
InterfaceText-basedOften graphical

What Can Go Wrong — and Where

StageFailure SymptomCommon Cause
BIOS/UEFINo bootloader found / black screenBoot order wrong, disk failed
GRUB"GRUB rescue>" promptgrub.cfg missing, wrong disk
KernelKernel panicBad kernel params, corrupted kernel
initramfs"Unable to mount root fs"Missing storage drivers, wrong UUID
systemdEmergency mode or hung servicesFailed service, filesystem errors
How do I enter rescue mode if boot fails? At the GRUB menu, press e to edit the boot entry. Append systemd.unit=rescue.target (or single for SysV) to the kernel line. Press Ctrl+X to boot. You'll get a root shell with minimal services.

Measuring Boot Time

# See how long each service took to start systemd-analyze blame # Visual boot timing chart systemd-analyze plot > boot.svg # Total boot time breakdown systemd-analyze # Startup finished in 1.2s (firmware) + 0.8s (loader) + 2.1s (kernel) + 5.3s (userspace)