
The Road to Readiness: Boot Sequence and Targets
How does Linux go from a dark screen to a fully functional server? Deconstruct the boot sequence. Understand the difference between BIOS and UEFI, the role of GRUB, and how systemd 'Targets' replace the old Runlevels.
The Boot Sequence: From Power button to Prompt
The first 60 seconds of a computer's life are the most complex. Behind a simple loading bar or a scrolling list of text, Linux is performing a massive orchestration of hardware detection, security verification, and service activation.
If you understand this sequence, you can fix 90% of "Server won't start" issues. You'll know if the problem is a hardware configuration (UEFI), a corrupted menu (GRUB), or a service that refuses to start (systemd).
In this lesson, we will trace the journey of a Linux boot and learn to manage the system's "State" using Targets.
1. The Four Acts of the Boot Story
Act 1: Hardware Logic (BIOS/UEFI)
The physical chips on your motherboard wake up and perform a POST (Power-On Self-Test). They look for a "Boot Loader" on your hard drive.
- Modern standard: UEFI (Unified Extensible Firmware Interface).
Act 2: The Choice (GRUB2)
The computer finds GRUB (Grand Unified Bootloader). This is the menu where you can choose which Kernel to run or enter "Recovery Mode."
Act 3: The Kernel Heartbeat
The Kernel loads into RAM, detects your hardware (CPU, RAM, Disk), and mounts the root filesystem (/). It then starts the very first program: PID 1 (systemd).
Act 4: The Orchestration (systemd)
systemd brings the system to a specific "Goal" or Target.
2. From Runlevels to Targets
In the old days, Linux used Runlevels (numbered 0-6). Today, systemd uses Targets.
| Old Runlevel | systemd Target | Purpose |
|---|---|---|
| 0 | poweroff.target | Shutting down. |
| 1 (Single) | rescue.target | Maintenance (No network, root only). |
| 3 (Multi) | multi-user.target | Standard Server (Networking, no GUI). |
| 5 (Graph) | graphical.target | Standard Desktop (GUI + Networking). |
| 6 | reboot.target | Restarting. |
3. Managing the Current State
You can switch the state of a running server without rebooting.
# See your current default target (usually graphical or multi-user)
systemctl get-default
# Switch to a headless server state immediately
sudo systemctl isolate multi-user.target
# Set the system to ALWAYS boot into the CLI (Server mode)
sudo systemctl set-default multi-user.target
4. Troubleshooting: Emergency Mode
If your filesystem is corrupted, Linux might fail to reach the multi-user.target. It will drop you into the emergency.target. Here, the filesystem is usually "Read-Only" so you can't accidentally cause more damage while you try to fix it.
# Mount the filesystem as Read-Write so you can edit config files
mount -o remount,rw /
5. Practical: Customizing the GRUB Menu
Sometimes you need to add a "Hidden" kernel option to fix a graphics problem or slow boot.
NEVER edit /boot/grub/grub.cfg directly. It is auto-generated.
The Correct Way:
- Edit
/etc/default/grub. - Add your options to
GRUB_CMDLINE_LINUX_DEFAULT. - Run
sudo update-grub.
6. Example: A Boot Performance Profiler (Python)
If your server takes 5 minutes to boot, it's usually because one service is waiting for a timeout. Here is a Python script that parses systemd's internal timing to flag the "Slowest" parts of your boot.
import subprocess
import re
def analyze_boot_performance():
"""
Parses systemd-analyze blame to find bottlenecks.
"""
print("--- Boot Performance Audit ---")
print(f"{'Service Name':30} | {'Load Time'}")
print("-" * 50)
try:
# systemd-analyze blame lists services by time taken
result = subprocess.run(['systemd-analyze', 'blame'], capture_output=True, text=True)
lines = result.stdout.split('\n')
# Show top 10 bottlenecks
for line in lines[:10]:
if line.strip():
print(line.strip())
except FileNotFoundError:
print("systemd-analyze not found. Are you on a systemd linux?")
if __name__ == "__main__":
analyze_boot_performance()
7. Professional Tip: The 'Magic SysRq' Key
If your system is completely frozen and you can't even move the mouse or switch to a terminal, there is a "secret" hardware-level key combination that can safely reboot the server. It's called REISUB. (Hold Alt + SysRq/PrintScreen and slowly type R-E-I-S-U-B). It safely terminates apps, syncs disks, and reboots.
8. Summary
The boot sequence is a hand-off between four specialized layers.
- UEFI finds the disk.
- GRUB chooses the OS.
- Kernel starts the hardware.
- systemd reaches the Target.
- Use
systemctl isolateto change system states on the fly. - Use
systemctl set-defaultto define your machine's permanent role (Server vs. Desktop).
In the next lesson, we will look at the final piece of system security: Basic Firewall Management with UFW and Firewalld.
Quiz Questions
- What is the difference between the
multi-usertarget and thegraphicaltarget? - Which process is responsible for starting all the services (Nginx, SSH, etc.) after the kernel loads?
- How do you change a server permanently so it only boots into the command line (multi-user) and not a GUI?
Continue to Lesson 5: Firewall Management—UFW and Firewalld.