Recover a Non-Booting Linux System Due to a Corrupted Kernel or GRUB
- Boot from live USB or CD
Prep for recovery, mount FS, chroot:
lsblk
sudo mount /dev/sda3 /mnt # mount root
sudo mount /dev/sda1 /mnt/boot # mout /boot ( if separate )
sudo mount /dev/sda1 /mnt/boot/efi # mount EFI partition if UEFI system
Mount system directories and chroot:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run
sudo chroot /mnt
Fix Kernel
Debian / Ubuntu:
apt update
apt reinstall linux-image-generic # re-install kernel
apt install linux-image-xxxx # install specific version
Arch:
pacman -S linux # install kernel
pacman -S linux-lts # install long term support version of kernel
RHEL / Fedora
dnf reinstall kernel # re-install kernel
Fix Bootloader
Fix Grub:
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
Fix systemd-boot:
bootctl install
Fix initramfs
update-initramfs -u # Ubuntu/Debian
mkinitcpio -P # Arch Linux
RHEL / Fedora:
sudo dracut --force # for current kernel, force to overwrite existing image
sudo dracut --force /boot/initramfs-$(uname -r).img $(uname -r) # also for current kernel
sudo dracut --force --hostonly --add systemd # for systemd-boot