27

I have a dual boot of Windows and Ubuntu. When I switch on the machine, the BIOS does POST and after that the bootloader starts.

I want to understand how the BIOS chooses which bootloader to run. I want to know the process going on between the BIOS and the bootloader in a dual boot computer.

1

3 Answers 3

42

BIOS firmware doesn't really choose the bootloader. It loads code from sector 0 of a drive and executes it. Whatever is there, it will execute. Hopefully it is a bootloader (or something that loads a bootloader) but it doesn't have to be. In the early PC days you had games on floppy disks that would simply boot and run without an OS - these are now called "booters."

UEFI firmware actually understands partitions and filesystems, and scans drives for a UEFI System partition type. Since this is a filesystem, multiple bootloaders can be placed here. UEFI firmware is supposed to provide a menu or other way for you to select which bootloader is used.

Many UEFI systems are booting in "Legacy mode" - where the UEFI loads a "Compatibility Service Module" - something that makes it look like a BIOS - and actually work like the BIOS.

GRUB is a common open-source bootloader that can either boot Linux or "chainload" (give control to) a Windows bootloader (typically winload.exe in the Boot folder of a Windows partition). GRUB is what's giving you the ability to make a decision. GRUB can read configuration files and take its default choice from them.

Read this if you want copious, gory details.

2
  • This is one of the reasons that, on Ubuntu, you need sudo or root to write anything to an unmounted disk; if a program or malicious user writes malware to the boot partition...
    – wizzwizz4
    Nov 30, 2017 at 7:18
  • Thanks LawrenceC your explanation make my understanding more clear .thanks once again Dec 1, 2017 at 6:51
20
+50

This diagram shows how control passes from the firmware (BIOS or UEFI) to the bootloader and from the bootloader to the operating system in Ubuntu.

enter image description here
          BIOS vs. UEFI

If the OSs were installed in different modes (BIOS and UEFI), dual booting Windows and Ubuntu with grub can't work. In some computers that have Windows pre-installed there is an option to boot Windows in the UEFI setup utility.


Converting Ubuntu into UEFI mode

  1. Start Boot-Repair, and select Advanced options -> GRUB location tab.
  2. If you do not see a Separate /boot/efi partition option, this means that your PC does not have any UEFI partition.
  3. If you see a Separate /boot/efi partition option, put a checkmark in the checkbox to the left of it.
  4. Click the Apply button in the lower right corner.

Converting Ubuntu into UEFI mode

  1. Set up your BIOS so that it boots the hard drive in UEFI mode. The way to adjust this setting depends on the specific model of the computer, but generally this setting is located in the boot priority settings under the Boot tab of the BIOS/UEFI setup utility.

Alternatively you can convert an existing Ubuntu installation from BIOS mode to UEFI mode from the terminal in a live Ubuntu USB session which was booted in UEFI mode by following the instructions in this answer.


Converting Ubuntu into BIOS mode

Note: Use this procedure only to convert an UEFI mode Ubuntu installation to boot in BIOS/CSM/legacy mode. Such a conversion may be necessary if some hardware doesn't work correctly under UEFI mode. (Graphics cards are a common source of problems.) Converting to boot in BIOS/CSM/legacy mode while Windows boots in UEFI mode can make the boot process more awkward -- you'll need to use the computer's built-in boot manager to switch between OSs, and some computer's have such poor boot managers that this may be impossible.

  • If Ubuntu is installed on a GPT disk (you can check it via the sudo parted -l command), use GParted partition editor to create a BIOS-Boot partition (1MB, unformatted filesystem, bios_grub flag) at the start of its disk.
  • Start Boot-Repair, and select Advanced options -> GRUB location tab.
  • Uncheck the Separate /boot/efi partition option

Uncheck the Separate /boot/efi partition option

  • Click the Apply button in the lower right corner.
  • Set up your BIOS so that it boots the HDD in Legacy mode. Generally this setting is located in the Boot tab → Boot order section of the BIOS.

Converting Windows into GPT mode

MBR2GPT.exe is a command line tool which is located in the System32 folder in Windows 10. With it you can effectively and non-destructively convert a Windows 10 OS disk from MBR (for Legacy BIOS) to GPT partition style (for UEFI) without modifying/deleting any data on the disk or making a clean installation of Windows 10.


Links:

7

In legacy mode (BIOS boot and not UEFI) BIOS controls the drive order. Once upon a time this used to be controlled by the cables; but changing a BIOS setting beats opening the box & changing cables.

BIOS loads (into memory) the first sector (512 bytes of disk called MBR or master boot record) of the first disk (or drive order controlled by BIOS) and then passes (CPU) control to this 'bootloader'. BIOS has thus completed its job and the code in the first sector runs.

11
  • SORRY sir but i am bit confuse as bios give control to the boot loader and window and linux have different boot loader so to which boot loader it give control .what process bios go through to choose the boot loader Nov 29, 2017 at 10:47
  • 2
    Your system can only have a single boot loader per disk (and only one is ever active). Generally, if you have two operating systems on your system, the second one installed owns the boot-loader as it wrote its own code into the MBR. This is why GNU/Linux (Ubuntu) uses GRUB; its a multi-step system (step 1 is the MBR, steps 1.5 & 2 are found in /boot) that puts up menu asking which OS you want to load/run (the ones grub knows about anyway, plus whatever ISO's you've added to it). If you have two disk drives; you can have a boot loader on each drive, but BIOS will determine which will run.
    – guiverc
    Nov 29, 2017 at 11:13
  • So if i have 2 operating system in my computer then is it necessary that GRUB will put up the menu asking which os i want to load why not window's boot loader put that menu as i have both os in my computer. Nov 29, 2017 at 11:28
  • windows has a boot loader too (up to vista anyway); but its not as smart as grub is. the windoze version doesn't search for non-msft products (and can't read ext/reiserfs/xfs/zfs/btrfs/...) thus has you have to add the *nix yourself; and next update ..... the windoze version isn't worth using as grub is so much better. If windoze was on one drive, Ubuntu on the other you could alter the boot by BIOS; but grub is faster/easier. (if happy with my answer; accept it to close the question)
    – guiverc
    Nov 29, 2017 at 11:33
  • 3
    @Prashant Singh: The most fundamental reason why the Windows bootloader doesn't do this (or didn't, back when I knew a bit about Windows) is that MicroSoft doesn't make money by letting you run other operating systems.
    – jamesqf
    Nov 30, 2017 at 3:44

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .