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 |
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 splashfrom the kernel line (presseat 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).