21

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.

37

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.

  • 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 '17 at 7:18
  • Thanks LawrenceC your explanation make my understanding more clear .thanks once again – Prashant Singh Dec 1 '17 at 6:51
11

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 can't work.


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, then click the Apply button in the lower right corner.

    Converting Ubuntu into UEFI mode

  4. 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.

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.

  • 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 – Prashant Singh Nov 29 '17 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 '17 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. – Prashant Singh Nov 29 '17 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 '17 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 '17 at 3:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.