A server that doesn’t come back after a reboot is stressful, especially when SSH is your only way in. The good news: most boot failures fall into a few categories, and each leaves recognizable clues. The key is knowing which stage of the boot process failed.

First: get console access

If SSH doesn’t respond, you need to see the screen. On a VPS, open the VNC console in your control panel: it shows the boot messages and lets you type at GRUB, emergency mode or a login prompt, even without networking. On physical servers, use IPMI/iDRAC/iLO or a monitor.

Identify the failing stage

What you see Stage Typical causes
Nothing, or “No bootable device” Firmware / disk Disk missing, wrong boot order, damaged boot sector
grub rescue> or grub> prompt Bootloader Missing GRUB files, changed partitions, broken config
“Kernel panic – not syncing” Kernel Bad kernel or initramfs, root filesystem not found
“You are in emergency mode” systemd / mounts Bad /etc/fstab, filesystem errors, missing disk
Boots, but no network or SSH Services Network config errors, firewall, sshd failed

See the Linux boot process.

GRUB problems

At the grub> prompt (GRUB loaded but no config), boot manually:

grub> ls                              # list disks and partitions, e.g. (hd0,gpt2)
grub> ls (hd0,gpt2)/                  # find the one with /boot or vmlinuz
grub> set root=(hd0,gpt2)
grub> linux /boot/vmlinuz root=/dev/vda2 ro
grub> initrd /boot/initrd.img
grub> boot

(File names vary: use Tab completion.) Once booted, fix GRUB permanently:

sudo update-grub                       # Debian/Ubuntu
sudo grub2-mkconfig -o /boot/grub2/grub.cfg    # RHEL family
sudo grub-install /dev/vda             # BIOS systems; reinstall bootloader to the disk

At grub rescue>, GRUB can’t find its modules. Use ls and set prefix=(hd0,gpt2)/boot/grub, set root=(hd0,gpt2), insmod normal, normal to reach the menu, then reinstall GRUB as above.

Boot an older kernel: at the GRUB menu, choose Advanced options and an older kernel. This fixes most problems after a kernel update. See the GRUB bootloader.

Kernel panics

  • “VFS: Unable to mount root fs”: wrong root= parameter, or the initramfs lacks the disk driver. Boot an older kernel, then rebuild the initramfs:
sudo update-initramfs -u -k all        # Debian/Ubuntu
sudo dracut -f --regenerate-all        # RHEL family
  • Panics right after an update: boot the previous kernel, then remove or reinstall the new one. See Linux kernel panic.
  • To read panic details, temporarily remove quiet splash from the kernel line (press e at the GRUB menu to edit before booting).

Emergency mode and fstab

“You are in emergency mode” usually means a filesystem in /etc/fstab couldn’t be mounted: a disk was removed, a UUID changed, or there’s a typo.

# from the emergency shell (enter the root password)
journalctl -xb | grep -iE 'mount|fsck|fail' | tail -20
blkid                                  # current UUIDs
nano /etc/fstab                        # fix or comment out the bad line
mount -a                               # test all entries
systemctl daemon-reload && reboot

If root is read-only: mount -o remount,rw /.

Prevent it: add nofail to non-essential mounts (extra data disks, network shares), so their failure doesn’t block booting:

UUID=…  /data  ext4  defaults,nofail  0  2

See the fstab guide.

Filesystem errors

If fsck reports errors, run it on the unmounted filesystem (from emergency mode or a rescue environment):

fsck -f /dev/vda2          # ext4; answer the prompts, or add -y
xfs_repair /dev/vda2       # XFS

Never run fsck on a mounted read-write filesystem.

Disk full

A 100% full root filesystem can stop services from starting, and sometimes blocks logins. Boot into emergency mode or single-user mode, and free space: old logs (journalctl --vacuum-size=200M), package caches (apt clean), large files (du -xh / | sort -h | tail). See disk full troubleshooting.

Boots fine, but you can’t connect

From the console:

ip a                                   # does the interface have its IP?
systemctl status systemd-networkd NetworkManager networking
systemctl status ssh sshd
ufw status / nft list ruleset          # firewall locked you out?

Common causes: a netplan or interfaces file error after editing, a firewall rule that blocked SSH, or sshd failing after a config change (sshd -t shows syntax errors). See SSH connection refused and Netplan static IP.

When nothing works

  • Copy the important data off from emergency mode (rsync to another server) if the system is still reachable.
  • Reinstall the OS from the control panel, and restore data from backups. That’s why tested backups matter. See backup strategies for a VPS.

Quick reference

Symptom First action
No SSH after reboot Open the VNC console
grub> prompt Boot manually, then update-grub
Panic after kernel update Boot older kernel from Advanced options
Emergency mode Check journalctl -xb, fix /etc/fstab
Read-only root mount -o remount,rw /
Filesystem errors fsck -f on the unmounted device

Related: Linux troubleshooting methodology and boot configuration data (Windows).

  • Linux
  • Troubleshooting
  • Boot