Introduction / Why This Is Needed
The error "No boot OS found" (or "No bootable device", "Boot device not found") means the computer's firmware (UEFI/BIOS) did not detect an operating system bootloader on the disk. This is not a kernel or data corruption, but a problem with boot records (MBR, GPT, ESP) or the GRUB/systemd-boot configuration.
After completing this guide, you will:
- Restore the functionality of the GRUB (or systemd-boot) bootloader.
- Configure the correct boot order in UEFI/BIOS.
- Be able to boot into your installed Linux system without reinstalling.
Requirements / Preparation
Before starting, you must:
- Create a bootable USB drive with any Linux distribution (Ubuntu or Fedora is recommended).
- Have access to another computer to create the drive if the current one won't boot.
- Make a backup of important data to a separate drive (just in case).
- Understand basic terminal commands and the use of superuser privileges (
sudo).
Step 1: Booting into the Live Environment
- Insert the created USB drive into the computer.
- Reboot the computer and enter the boot menu (usually the
F12,F10,Esc, orDelkey — depends on the manufacturer). - Select your USB drive and the "Try Ubuntu" (or "Start Fedora Live") option.
- Wait for the Live system desktop to load. Open a terminal (
Ctrl+Alt+T).
Step 2: Determining the Boot Scheme (UEFI or BIOS)
This is a key step — commands differ for UEFI and BIOS.
ls /sys/firmware/efi
- If the directory exists → you have UEFI. Note this down.
- If the command returns "No such file or directory" → you have Legacy BIOS.
Step 3: Finding the Linux Partition
For UEFI:
sudo lsblk -f
Look for a partition with the FAT32 filesystem (usually /dev/sda1, /dev/nvme0n1p1) — this is the ESP (EFI System Partition). Also, find the partition with your main system (ext4/btrfs/xfs, e.g., /dev/sda2 or /dev/nvme0n1p2).
For BIOS:
sudo fdisk -l
Look for a partition with type Linux (code 83) or Linux swap (82). The GRUB bootloader will be installed to the MBR (the first disk sector, e.g., /dev/sda), but the root partition is a separate logical partition.
Example output for UEFI:
NAME FSTYPE LABEL UUID MOUNTPOINT
sda1 vfat ESP ABCD-1234
sda2 ext4 root 1234abcd-5678-ef90-1234-56789abcdef0 /
nvme0n1p1 vfat ESP DCBA-4321
nvme0n1p2 ext4 home 5678abcd-9012-3456-7890-abcdef123456
Here, the ESP is sda1 or nvme0n1p1, and the root is sda2 or nvme0n1p2.
Step 4: Mounting Partitions in the Live System
Create a mount point and mount your root partition:
sudo mkdir /mnt/root
sudo mount /dev/sda2 /mnt/root # Replace /dev/sda2 with your root partition
For UEFI (mandatory!):
sudo mkdir /mnt/root/boot/efi
sudo mount /dev/sda1 /mnt/root/boot/efi # Replace /dev/sda1 with your ESP
If you have a separate /boot partition (rare, but possible):
sudo mount /dev/sda3 /mnt/root/boot # Replace with your /boot partition
If using LVM, Btrfs with subvolumes, or encryption:
Additional steps will be required (activate LVM, open LUKS). This is a topic for a separate guide.
Step 5: Reinstalling GRUB
Now we will "bind" our system to the bootloader.
For UEFI:
sudo grub-install --target=x86_64-efi --efi-directory=/mnt/root/boot/efi --boot-directory=/mnt/root/boot --recheck /dev/sda
--target— UEFI architecture.--efi-directory— path to the mounted ESP.--boot-directory— path to the/bootdirectory in your system./dev/sda— the physical disk, not a partition (e.g.,/dev/sda,/dev/nvme).
For BIOS:
sudo grub-install --boot-directory=/mnt/root/boot /dev/sda
Expected output: Installation finished. No error reported.
Step 6: Updating the GRUB Configuration
sudo chroot /mnt/root
update-grub
chrootchanges the root directory to your system so commands run in its context.update-grubwill scan for kernels and create the boot menu.
The output should include lines like:
Found linux image: /boot/vmlinuz-5.15.0-78-generic
Found initrd image: /boot/initrd.img-5.15.0-78-generic
If no kernels are found, check that /mnt/root/boot contains kernel files (vmlinuz-*) and initrd (initrd.img-*).
Step 7: Exit and Reboot
exit # Exit chroot
sudo umount -R /mnt/root # Recursively unmount everything
sudo reboot
Don't forget to remove the USB drive when rebooting!
Verifying the Result
- The system should boot into the GRUB menu and then into Linux.
- If a menu appears but the system doesn't boot — try selecting a different kernel version in GRUB (the "Advanced options" item).
- Ensure the correct boot order in UEFI/BIOS: Ubuntu (or your OS) should be above Windows Boot Manager (if present).
Possible Issues
❌ error: no such device or grub rescue>
- Cause: GRUB cannot find its configuration or partition.
- Solution: Repeat steps 4-5, ensuring mount paths are correct. Verify the ESP is formatted as FAT32.
❌ grub-install cannot find the EFI partition
- Cause: Incorrect path to the ESP or it is not formatted as FAT32.
- Solution:
sudo mkfs.fat -F32 /dev/sda1(caution! This erases data on the ESP). Then repeat mounting and installation.
❌ System still doesn't boot after GRUB installation
- Cause: In UEFI, firmware may ignore the GRUB entry due to Secure Boot or an incorrect
BootOrder. - Solution:
- Enter UEFI settings during boot (
Del/F2). - Disable Secure Boot (temporarily).
- In the Boot section, find the
ubuntu(or your OS) entry and move it to the top. - Save and exit (
F10).
- Enter UEFI settings during boot (
❌ update-grub does not find kernels
- Cause: The
/boot(or root) partition is mounted in the wrong place or is corrupted. - Solution: Check that
/mnt/root/bootcontainsvmlinuz-*files. If not — perhaps/bootis a separate partition you didn't mount.
Additional Scenarios
System uses systemd-boot (instead of GRUB)
- For UEFI: Instead of
grub-installandupdate-grub, ensure theloaderdirectory exists in the ESP (/boot/efi). Configuration is in/boot/efi/loader/loader.conf. If missing — install thesystemd-bootpackage from the Live system within chroot.
RAID or LVM on the boot partition
- The RAID array or LVM group must be activated before mounting. Example:
sudo vgchange -ay # Activate all LVM groups sudo mount /dev/mapper/ubuntu--vg-root /mnt/root
System hangs at Loading... after recovery
- Cause: Incorrect kernel parameters (e.g.,
nomodesetfor NVIDIA). - Solution: In the GRUB menu, press
eto edit the boot entry. Addnomodesetafterquiet splash. PressCtrl+XorF10to boot. If it works, make the change permanent:
Addsudo nano /etc/default/grubnomodesetto theGRUB_CMDLINE_LINUX_DEFAULTline. Then runsudo update-grub.
Final Recommendations
- After a successful boot, update your system:
sudo apt update && sudo apt upgrade(for Debian/Ubuntu) orsudo dnf upgrade(for Fedora). - If you have dual-boot with Windows, run
bcdeditin Windows or useefibootmgrfrom Linux to ensure Windows Boot Manager doesn't overwrite the bootloader during updates. - For prevention, regularly back up the ESP (FAT32 partition) and
/boot.