Fixing a Missing Windows Boot Entry
What this guide covers
Windows vanished from your boot menu on a dual-boot machine — usually right after a Windows Update. We'll find out why and put it back, all from Linux, with no Windows install USB needed.
You will be deleting boot files and editing firmware entries as root.
Do the backup step before anything else, and read every command before running it. Deleting the wrong folder can leave an OS unbootable.
Why Windows Disappears
Your firmware keeps a small list of boot entries. Think of each one as a bookmark: "Windows Boot Manager lives on partition X, in the file \EFI\Microsoft\Boot\bootmgfw.efi".
The files those bookmarks point to live on the EFI System Partition (ESP) — a small partition that every OS on the disk shares. Two things break this design:
- If the file a bookmark points to disappears, many firmwares (ASUS included) quietly hide the entry from the boot menu.
- If the ESP fills up, nothing can write new boot files to it.
The classic failure combines both. Old Linux installs leave their kernels on the shared ESP forever (wiping a distro's partitions does not clean the ESP), until it is full. Then a Windows Update tries to replace bootmgfw.efi: it deletes the old copy, cannot write the new one, and gives up. Windows is gone from the boot menu — but only from the menu.
A "missing" OS usually isn't gone.
Windows itself is untouched, and it keeps a recovery copy of its boot manager at C:\Windows\Boot\EFI\. We only need to restore one small file and one bookmark.
How to confirm this happened (Windows' own logs)
Windows logs the failed boot-file update in C:\Windows\Logs\CBS\CbsPersist_*.log. Search the logs for bootmgfw, BFSVC, or 0x80070070 (the "disk full" error code). A real example:
04:12:16 BFSVC: 'BfspCheckFreeSpace failed: 0x80070070. This error is ignored.'
04:12:48 Error HRESULT_FROM_WIN32(ERROR_DISK_FULL) ... BfsvcInstaller::CommitChanges
04:12:53 Boot File Servicing (BFSVC) Installer failed ... A rollback will be initiatedThe rollback restores Windows itself, but not the file it already deleted from the ESP.
Diagnosing
Check the firmware's boot entries
sudo efibootmgr -vA healthy Windows entry shows a file path ending in
bootmgfw.efi. If the entry is missing, or showsVenHw(...)instead of a file path, it is orphaned — the file it pointed to is gone.Find your ESP(s)
lsblk -o NAME,SIZE,FSTYPE,PARTTYPENAME,MOUNTPOINTSLook for partitions marked EFI System.
You may have more than one ESP.
Some installs create a second ESP instead of reusing the first. Windows only services the one it lives on — that is the one to inspect and repair. Your distro's own ESP is usually already mounted at
/boot/efi.Mount the ESP and look inside
Replace
/dev/nvme0n1p1with your ESP throughout this guide.sudo mkdir -p /mnt/esp sudo mount /dev/nvme0n1p1 /mnt/esp ls /mnt/esp/EFI/Microsoft/Boot/bootmgfw.efi df -h /mnt/espIf
bootmgfw.efiis missing anddfshows the partition (nearly) 100% full, you have this exact problem — carry on below.Confirm Windows is still intact
Replace
/dev/nvme0n1p3with your Windows partition (usually the biggest NTFS one).sudo mkdir -p /mnt/win sudo mount -o ro /dev/nvme0n1p3 /mnt/win ls /mnt/win/Windows/Boot/EFI/bootmgfw.efiIf that file lists fine, everything you need for the repair is already on your disk.
The Fix
Back up the ESP
sudo tar -C /mnt/esp -cf ~/esp-backup-$(date +%F).tar \ --exclude='*.img' --exclude='vmlinuz-*' .This archives the loaders and configs (skipping bulky kernel images) so any deletion below is reversible.
Free up space
List what is on the ESP and delete only the leftovers of OSes that no longer exist — old distro folders under
EFI/, stray kernels (vmlinuz-*), and initramfs images (*.img) in the ESP root.ls /mnt/esp /mnt/esp/EFI sudo rm -rf /mnt/esp/EFI/<dead-os-folder> df -h /mnt/espNever delete
EFI/Microsoft,EFI/Boot, or the folder of a distro you still use.If you are unsure about a folder, leave it — you only need enough free space (~100 MB) for the next step.
Put the Windows boot manager back
sudo cp /mnt/win/Windows/Boot/EFI/bootmgfw.efi /mnt/esp/EFI/Microsoft/Boot/bootmgfw.efi sudo cp /mnt/win/Windows/Boot/EFI/bootmgr.efi /mnt/esp/EFI/Microsoft/Boot/bootmgr.efiThis is the same source Microsoft's own repair tool (
bcdboot) copies from.Recreate the boot entry
First remove any orphaned entries you found while diagnosing (replace
0000with each orphan's number):sudo efibootmgr -B -b 0000Then create a fresh Windows entry (
-dis the disk,-pthe ESP's partition number):sudo efibootmgr -c -d /dev/nvme0n1 -p 1 -L "Windows Boot Manager" \ -l '\EFI\Microsoft\Boot\bootmgfw.efi'Finally set the boot order with your entry numbers, Linux first:
sudo efibootmgr -o 0004,0002Optional: show Windows in the GRUB menu
Enable
os-proberso GRUB finds Windows, then regenerate the menu:echo 'GRUB_DISABLE_OS_PROBER=false' | sudo tee -a /etc/default/grubFedorasudo grub2-mkconfig -o /boot/grub2/grub.cfgDebian/Ubuntusudo update-grubArchsudo grub-mkconfig -o /boot/grub/grub.cfgUnmount and reboot
sudo umount /mnt/esp /mnt/winWindows should be back in the firmware menu and in GRUB. Once booted into Windows, run Windows Update again — the update that broke everything rolled itself back and will now install cleanly.
If Windows Duplicates Its Entry
After booting Windows once, you may see two or three "Windows Boot Manager" entries. This is expected: the entry we made with efibootmgr lacks a data blob Windows embeds to recognise its own entry, so Windows registers a fresh one. All of them point at the same file.
Run sudo efibootmgr -v and keep the entry with the long extra data blob (containing BCDOBJECT) — that is the one Windows made and will keep recognising. Delete the rest with sudo efibootmgr -B -b <number>. It will not duplicate again.
Preventing It
- Clean the ESP when you remove a distro. Deleting its partitions leaves its boot files behind — mount the ESP and delete its
EFI/<name>folder, kernels, andloader/entries/*yourself. - Keep at least ~100 MB free on the ESP Windows uses. Boot-manager updates need room to stage files, and fail destructively without it.
- If you have two ESPs, note which is which. Windows only services its own; your distro only writes to the one mounted at
/boot/efi.
Contributors
Changelog
87751-Add guide: fixing a missing Windows boot entry (full ESP after Windows Update)on