Boot Issues Troubleshooting
Quick Reference
# View boot messages
journalctl -b # Current boot
journalctl -b -1 # Previous boot
journalctl -b -p err # Errors only
dmesg | less # Kernel ring buffer
# Boot timing analysis
systemd-analyze
systemd-analyze blame
systemd-analyze critical-chain
# Check failed services
systemctl --failed
systemctl status <service>
# Emergency/rescue mode
# Add to kernel command line: systemd.unit=rescue.target
# Or: systemd.unit=emergency.target
# Regenerate initramfs
dracut -f # RHEL/Fedora
mkinitcpio -P # Arch
update-initramfs -u # Debian/Ubuntu
# Rebuild GRUB
grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL
grub-mkconfig -o /boot/grub/grub.cfg # Debian/Arch
Boot Process Overview
Boot Stages
┌─────────────────────────────────────────────────────────────────┐
│ 1. FIRMWARE (BIOS/UEFI) │
│ - POST (Power-On Self Test) │
│ - Hardware initialization │
│ - Load bootloader from disk │
└────────────────────────────────┬────────────────────────────────┘
│
┌────────────────────────────────▼────────────────────────────────┐
│ 2. BOOTLOADER (GRUB2) │
│ - Display boot menu │
│ - Load kernel and initramfs │
│ - Pass parameters to kernel │
└────────────────────────────────┬────────────────────────────────┘
│
┌────────────────────────────────▼────────────────────────────────┐
│ 3. KERNEL + INITRAMFS │
│ - Initialize hardware drivers │
│ - Mount root filesystem │
│ - Start init process (PID 1) │
└────────────────────────────────┬────────────────────────────────┘
│
┌────────────────────────────────▼────────────────────────────────┐
│ 4. SYSTEMD INITIALIZATION │
│ - Reach default target │
│ - Start services in parallel │
│ - Present login prompt │
└─────────────────────────────────────────────────────────────────┘
Common Failure Points
| Stage | Symptom | Possible Causes |
|---|---|---|
Firmware |
No display, beeps, power cycling |
Hardware failure, CMOS battery, bad RAM |
Bootloader |
"No bootable device", GRUB menu issues |
Missing/corrupt bootloader, wrong boot order |
Kernel |
Kernel panic, hang after "Loading kernel" |
Missing drivers, bad initramfs, hardware issues |
systemd |
Services failed, emergency mode |
Corrupt filesystem, bad fstab, service errors |
Firmware (BIOS/UEFI) Issues
No Boot Device Found
# Check UEFI boot entries
efibootmgr -v
# Add a boot entry
efibootmgr -c -d /dev/sda -p 1 -L "Linux" -l "\EFI\fedora\shimx64.efi"
# Change boot order
efibootmgr -o 0001,0002,0003
# Delete a boot entry
efibootmgr -b 0002 -B
Bootloader (GRUB2) Issues
GRUB Not Loading
If you see grub> prompt (GRUB shell):
# List partitions
grub> ls
grub> ls (hd0,gpt2)/
# Set root and boot
grub> set root=(hd0,gpt2)
grub> linux /boot/vmlinuz-5.15.0 root=/dev/sda2
grub> initrd /boot/initramfs-5.15.0.img
grub> boot
If you see grub rescue> prompt:
# Find boot partition
grub rescue> ls
grub rescue> ls (hd0,gpt2)/boot/grub
# Load normal module
grub rescue> set prefix=(hd0,gpt2)/boot/grub
grub rescue> insmod normal
grub rescue> normal
Reinstall GRUB
# Boot from live USB, then:
# For BIOS systems
mount /dev/sda2 /mnt
grub-install --root-directory=/mnt /dev/sda
# For UEFI systems
mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot/efi
for dir in dev proc sys run; do mount --bind /$dir /mnt/$dir; done
chroot /mnt
grub-install --target=x86_64-efi --efi-directory=/boot/efi
grub-mkconfig -o /boot/grub/grub.cfg
# Exit chroot
exit
umount -R /mnt
Regenerate GRUB Configuration
# RHEL/CentOS/Fedora
grub2-mkconfig -o /boot/grub2/grub.cfg # BIOS
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg # UEFI
# Debian/Ubuntu
update-grub
# Or manually:
grub-mkconfig -o /boot/grub/grub.cfg
# Arch Linux
grub-mkconfig -o /boot/grub/grub.cfg
Editing GRUB at Boot
At GRUB menu, press e to edit:
# Add to linux line for debugging:
linux /boot/vmlinuz-... root=/dev/sda2 debug systemd.log_level=debug
# Boot to rescue mode:
linux /boot/vmlinuz-... root=/dev/sda2 systemd.unit=rescue.target
# Boot to emergency mode:
linux /boot/vmlinuz-... root=/dev/sda2 systemd.unit=emergency.target
# Boot with specific init:
linux /boot/vmlinuz-... root=/dev/sda2 init=/bin/bash
# Disable quiet and splash for more output:
# Remove: quiet splash
# Add: debug
Press Ctrl+X or F10 to boot with changes.
Kernel/Initramfs Issues
Kernel Panic
Common panic messages:
"VFS: Unable to mount root fs"
→ Wrong root= parameter or missing driver in initramfs
"Kernel panic - not syncing: No init found"
→ init=/bin/systemd missing or corrupt
"Unable to find root device"
→ Missing disk driver in initramfs
"ACPI: Unable to load the System Description Tables"
→ BIOS/ACPI issues
Solutions:
# Boot with older kernel from GRUB menu
# Rebuild initramfs
# RHEL/Fedora
dracut -f /boot/initramfs-$(uname -r).img $(uname -r)
# Arch Linux
mkinitcpio -p linux
# Debian/Ubuntu
update-initramfs -u -k $(uname -r)
# Or all kernels:
update-initramfs -u -k all
Missing Root Filesystem
# Check root parameter at boot
# Edit GRUB and verify root= is correct
# Common formats:
root=/dev/sda2
root=UUID=xxxxx-xxxxx-xxxxx
root=LABEL=root
root=/dev/mapper/vg-root
# Find correct UUID
blkid
# If using LVM, ensure lvm module is in initramfs
dracut --add lvm -f
Initramfs Shell (dracut emergency shell)
If dropped to initramfs shell:
# Check available block devices
ls -la /dev/disk/by-uuid/
ls -la /dev/mapper/
# Check if LVM is activated
lvm vgscan
lvm vgchange -ay
# Check if LUKS needs unlocking
cryptsetup luksOpen /dev/sda3 cryptroot
# Try mounting root manually
mount /dev/mapper/vg-root /sysroot
exit # Continue boot
Regenerate Initramfs
# === RHEL/Fedora (dracut) ===
# Regenerate for current kernel
dracut -f
# Regenerate for specific kernel
dracut -f /boot/initramfs-5.15.0.img 5.15.0
# Include specific modules
dracut --add "lvm crypt" -f
# Verbose rebuild
dracut -f -v
# === Arch Linux (mkinitcpio) ===
# Regenerate all presets
mkinitcpio -P
# Specific preset
mkinitcpio -p linux
# === Debian/Ubuntu (initramfs-tools) ===
# Update current kernel
update-initramfs -u
# Update all kernels
update-initramfs -u -k all
# Regenerate
update-initramfs -c -k $(uname -r)
systemd Boot Issues
Failed to Start Services
# List failed units
systemctl --failed
# Check specific service
systemctl status <service>
journalctl -u <service>
# Reset failed state
systemctl reset-failed
# Start service manually
systemctl start <service>
Emergency Mode
If system boots to emergency mode:
# Check what failed
journalctl -xb
# Common causes and fixes:
# 1. Bad /etc/fstab entry
cat /etc/fstab
# Comment out problematic entries with #
# 2. Filesystem corruption
fsck /dev/sda2
# 3. SELinux issues (RHEL/Fedora)
# Boot with: selinux=0 or enforcing=0
# Then relabel:
touch /.autorelabel
reboot
Rescue vs Emergency Mode
| Mode | Description |
|---|---|
Rescue mode |
Mounts filesystems, minimal services. Add: |
Emergency mode |
Root filesystem only, read-only. Add: |
# From rescue mode, remount root read-write
mount -o remount,rw /
# Then make fixes and reboot
reboot
Filesystem Issues
Corrupt /etc/fstab
# Boot to emergency mode, then:
mount -o remount,rw /
# Edit fstab
vi /etc/fstab
# Comment out problematic entries
# Bad entry:
# /dev/sdb1 /data ext4 defaults 0 2
# Fixed:
# #/dev/sdb1 /data ext4 defaults 0 2
# Test fstab
mount -a
# Reboot
reboot
Filesystem Check (fsck)
# Never run fsck on mounted filesystem!
# Boot to emergency mode or live USB
# Check ext4 filesystem
fsck.ext4 -y /dev/sda2
# Check XFS filesystem
xfs_repair /dev/sda2
# Check btrfs filesystem
btrfs check /dev/sda2
# Repair:
btrfs check --repair /dev/sda2
# Force check on next boot
touch /forcefsck
# Or add to kernel command line: fsck.mode=force
LVM Issues
# Scan for volume groups
vgscan
# Activate volume groups
vgchange -ay
# Check logical volumes
lvs
lvdisplay
# If LV is inactive
lvchange -ay /dev/vg/lv
# Repair LVM
vgck vg_name
vgreduce --removemissing vg_name
LUKS Encrypted Root
# If encryption not unlocked at boot
# From initramfs shell or live USB:
cryptsetup luksOpen /dev/sda3 cryptroot
# Enter passphrase
# Then mount and chroot
mount /dev/mapper/cryptroot /mnt
# Or for LVM on LUKS:
vgchange -ay
mount /dev/mapper/vg-root /mnt
# Check /etc/crypttab
cat /mnt/etc/crypttab
# Format: <name> <device> <key> <options>
# cryptroot UUID=xxx-xxx none luks
Network Boot Issues
Waiting for Network
# Check what's waiting
systemctl list-jobs
# Common culprits:
systemctl status NetworkManager-wait-online.service
systemctl status systemd-networkd-wait-online.service
# Disable if not needed
systemctl disable NetworkManager-wait-online.service
# Or reduce timeout
mkdir -p /etc/systemd/system/NetworkManager-wait-online.service.d/
cat > /etc/systemd/system/NetworkManager-wait-online.service.d/timeout.conf << 'EOF'
[Service]
TimeoutStartSec=10
EOF
Boot Analysis Tools
systemd-analyze
# Overall boot time
systemd-analyze
# Service startup times
systemd-analyze blame
# Critical path
systemd-analyze critical-chain
# Plot boot chart
systemd-analyze plot > boot.svg
# Verify unit files
systemd-analyze verify default.target
# Show service startup time
systemd-analyze blame | head -20
# Security analysis
systemd-analyze security
systemd-analyze security sshd.service
journalctl Boot Logs
# Current boot
journalctl -b
# Previous boot
journalctl -b -1
# List available boots
journalctl --list-boots
# Errors only
journalctl -b -p err
# Kernel messages
journalctl -b -k
# Specific service
journalctl -b -u ssh
# Since boot, follow
journalctl -b -f
# Export for analysis
journalctl -b --no-pager > boot.log
dmesg
# Show kernel ring buffer
dmesg
# With timestamps
dmesg -T
# Human-readable
dmesg -H
# Errors and warnings
dmesg --level=err,warn
# Follow new messages
dmesg -w
# Clear buffer (requires root)
dmesg -c
# Show driver messages
dmesg | grep -i driver
# Show storage messages
dmesg | grep -E 'sd[a-z]|nvme'
Common Scenarios
System Won’t Boot After Update
# 1. Boot older kernel from GRUB menu
# 2. If that works, check what changed
rpm -qa --last | head -20 # RHEL/Fedora
apt list --installed 2>/dev/null | head -20 # Debian
# 3. Rollback kernel
dnf history list
dnf history undo <id>
# Or remove new kernel
rpm -e kernel-5.xx.xx
# 4. Rebuild initramfs for working kernel
dracut -f /boot/initramfs-$(uname -r).img $(uname -r)
Forgot Root Password
# 1. At GRUB, edit kernel line
# Add: init=/bin/bash
# 2. Press Ctrl+X to boot
# 3. Remount root read-write
mount -o remount,rw /
# 4. Change password
passwd root
# 5. SELinux relabel (RHEL/Fedora)
touch /.autorelabel
# 6. Reboot
exec /sbin/init
# Or:
reboot -f
Black Screen After Boot
# 1. Try recovery mode from GRUB menu
# 2. Edit kernel line, add:
nomodeset
# 3. Or try different video driver:
nouveau.modeset=0 # Disable nouveau
nvidia-drm.modeset=0 # Disable nvidia drm
# 4. Once booted, check GPU driver
lspci -k | grep -A 2 VGA
journalctl -b | grep -i drm
journalctl -b | grep -i nvidia
# 5. Reconfigure X/Wayland
# Remove problematic driver
dnf remove nvidia*
# Or reinstall
dnf reinstall xorg-x11-drv-*
Boot Hangs at "A start job is running"
# 1. Wait for timeout or press Ctrl+C
# 2. Check what's hanging
journalctl -b | grep -i timeout
# 3. Common causes:
# - Network wait (see Network Boot Issues)
# - Unmountable filesystem (check fstab)
# - Slow disk (check dmesg for disk errors)
# 4. Reduce timeouts
systemctl edit <service>
# Add:
# [Service]
# TimeoutStartSec=30
Recovery Environment
Booting from Live USB
# 1. Boot from live USB
# 2. Identify root partition
lsblk
blkid
# 3. Mount root
mount /dev/sda2 /mnt
# 4. For LVM:
vgchange -ay
mount /dev/mapper/vg-root /mnt
# 5. For LUKS:
cryptsetup luksOpen /dev/sda3 cryptroot
mount /dev/mapper/cryptroot /mnt
# 6. Mount additional partitions
mount /dev/sda1 /mnt/boot
mount /dev/sda1 /mnt/boot/efi # UEFI
# 7. Bind mount system directories
for dir in dev proc sys run; do mount --bind /$dir /mnt/$dir; done
# 8. Chroot
chroot /mnt
# 9. Now fix issues...
# 10. Exit and unmount
exit
umount -R /mnt
Quick Troubleshooting Checklist
□ Check BIOS/UEFI boot order
□ Try booting older kernel
□ Boot with nomodeset for graphics issues
□ Boot to rescue/emergency mode
□ Check journalctl -b -p err for errors
□ Check systemctl --failed for failed services
□ Verify /etc/fstab entries
□ Run fsck on unmounted filesystems
□ Regenerate initramfs
□ Reinstall bootloader if needed
□ Check SELinux/AppArmor denials
□ Review recent changes (updates, config)
Quick Command Reference
# === Boot Analysis ===
systemd-analyze # Boot time
systemd-analyze blame # Service times
systemd-analyze critical-chain # Critical path
journalctl -b # Current boot log
journalctl -b -1 # Previous boot
journalctl -b -p err # Errors only
dmesg -T # Kernel messages
# === Service Status ===
systemctl --failed # Failed services
systemctl status <service> # Service status
journalctl -u <service> # Service logs
# === Recovery ===
mount -o remount,rw / # Remount root RW
fsck /dev/sda2 # Check filesystem
passwd root # Reset password
# === Initramfs ===
dracut -f # RHEL/Fedora
mkinitcpio -P # Arch
update-initramfs -u # Debian/Ubuntu
# === GRUB ===
grub-mkconfig -o /boot/grub/grub.cfg
grub-install /dev/sda # BIOS
grub-install --target=x86_64-efi # UEFI
# === UEFI ===
efibootmgr -v # List entries
mokutil --sb-state # Secure Boot status
# === Kernel Parameters ===
# systemd.unit=rescue.target # Rescue mode
# systemd.unit=emergency.target # Emergency mode
# init=/bin/bash # Direct shell
# nomodeset # Disable KMS
# selinux=0 # Disable SELinux
# fsck.mode=force # Force fsck