os-prober utility being disabled or outdated bootloader entries. You can resolve this by enabling OS detection in /etc/default/grub, running sudo update-grub, and verifying that your Windows partition is correctly identified. If automatic detection fails, manually adding a custom entry to /etc/grub.d/ ensures Windows appears reliably at startup without requiring third-party tools.
Understanding Why Windows Disappears
GRUB (Grand Unified Bootloader) relies on a helper program calledos-prober to scan all available partitions for other operating systems during the update process. When you install Linux alongside Windows, os-prober searches for the Windows Boot Manager files, typically located in an EFI System Partition (ESP). However, many modern Linux distributions disable this feature by default for security reasons or to speed up boot times. Consequently, even if Windows is installed and healthy, GRUB will not generate a menu entry for it unless explicitly told to look.
Another common cause is a mismatch between the UUID of your Windows partition and what GRUB expects. If you have recently repartitioned your drive, moved the EFI partition, or reinstalled Windows, the identifiers stored in the GRUB configuration may no longer match the actual disk layout. In such cases, simply updating the configuration might not suffice if the underlying data has changed significantly.
For users who have previously struggled with corrupted boot sectors, regenerating Windows boot files in an EFI dualboot system can sometimes be a prerequisite before GRUB can detect the OS again. Ensuring the Windows side is stable helps prevent detection failures on the Linux side.
Enabling OS Probing in GRUB Configuration
The first step to restoring the Windows option is to ensure that GRUB is allowed to probe for other operating systems. This requires editing the main configuration file for GRUB settings. Open a terminal and use a text editor likenano or vim to modify /etc/default/grub. Look for the line that begins with GRUB_DISABLE_OS_PROBER.
By default, this line often reads GRUB_DISABLE_OS_PROBER=true. You must change this value to false. It is important to note that simply commenting out the line may not work on newer versions of GRUB; you must explicitly set it to false. After making this change, save the file and exit the editor. This setting tells the bootloader initialization scripts to actively search for other OS installations during the next update cycle.
Once the configuration file is updated, you need to apply these changes. Run the command sudo update-grub in your terminal. This command regenerates the grub.cfg file based on the new settings and scans your drives. If os-prober finds the Windows installation, it will automatically add a menu entry for it. Reboot your computer to see if Windows now appears in the list.
Manually Adding a Custom GRUB Entry
Ifupdate-grub does not produce a Windows entry despite having enabled os-prober, you likely need to create a manual configuration script. GRUB allows users to add custom entries by placing shell scripts in the /etc/grub.d/ directory. Scripts in this folder are executed in numerical order to build the final configuration.
Create a new file in /etc/grub.d/, naming it something like 40_custom_windows. The number prefix determines its position in the menu; using 40_ places it after the standard Linux entries but before any other custom additions. Inside this file, you need to write a block of code that defines the Windows entry. You must identify the correct partition and UUID of your Windows EFI system partition. You can find this information by running sudo blkid or lsblk -f in the terminal.
Your custom script should resemble the following structure:
#!/bin/sh
exec tail -n +3 $0
# This file provides a custom entry for Windows 10
menuentry "Windows 10" {
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=root YOUR_UUID_HERE
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
Replace YOUR_UUID_HERE with the actual UUID of your EFI partition found earlier. Ensure the path to bootmgfw.efi matches your specific installation; some systems may use different paths depending on how Windows was installed. After saving the file, make it executable by running chmod +x /etc/grub.d/40_custom_windows. Finally, run sudo update-grub again to integrate this manual entry into your boot menu.
Troubleshooting Common Errors
Sometimes, despite correct configurations, GRUB may fail to boot Windows due to permission issues or syntax errors. Always verify that your custom script starts with#!/bin/sh and uses exec tail -n +3 $0 to include the rest of the file content correctly. If the menu entry appears but selecting it results in a black screen or error, check the file paths carefully. The EFI partition is often formatted as FAT32, so ensure you are using insmod fat rather than ext2 or ntfs.
Additionally, ensure that Secure Boot is either disabled or configured to trust your Linux bootloader keys. Some systems restrict unsigned bootloaders from loading Windows drivers if the chain of trust is broken. If you continue to face issues, consider checking the logs generated by os-prober to see exactly why it failed to detect the OS.
Frequently Asked Questions
Why does os-prober say the device is busy?
This error occurs when another process has the Windows partition mounted. You can resolve this by unmounting the partition using the umount command before running update-grub. Ensure no file managers or backup tools are accessing the Windows drive.
Can I use ntfs-3g instead of fat for the EFI partition?
No, the EFI System Partition is almost always formatted as FAT32. Using ntfs modules will cause GRUB to fail to read the boot files. Stick to insmod fat for standard UEFI Windows installations.
What if my Windows partition is not detected at all?
Check if the partition is hidden or marked as inactive in your disk management tool. Sometimes, Windows marks its own partition as "Hidden" to prevent accidental modification, which can confuse os-prober. Use fdisk -l to view raw partition tables.
Is it safe to edit files in /etc/grub.d/?
Yes, provided you follow the correct syntax and numbering convention. These scripts are designed for user customization. However, always test your configuration in a virtual machine or ensure you have a live USB rescue disk available in case the bootloader breaks.
How do I remove a stale Windows entry from GRUB?
If you have deleted Windows but the menu entry remains, simply delete or rename the custom script in /etc/grub.d/ that created it. Then run sudo update-grub to regenerate the menu without the obsolete entry.