How to use Windows Vista’s Boot Manager to boot Linux


The Web is full of explanations on how to dual boot Windows and Linux using a Linux boot manager like GRUB or LILO. If you want to dual boot Windows Vista and Linux using Windows Vista’s Boot Manager, please read on. I will assume that you already have installed Linux on your machine using GRUB as your boot loader.


 


Step 1 – Install GRUB on the Linux partition (outside of MBR)


As Windows Vista will replace the Master Boot Record (MBR) with its own, we need to relocate GRUB elsewhere by running grub-install with the Linux partition as a parameter.


        On Linux, launch a Terminal with root privileges


•    Find the name of the partition Linux is installed on by running fdisk –l (the partition you’re looking for is the one whose system is Linux, can be  something like /dev/sda1 or /dev/hda1. For the rest of this post, I’ll use /dev/sda1)


•    Install GRUB on the Linux partition by running : grub-install /dev/sda1


 


Step 2 – Get a copy of Linux boot sector


We will need to instruct Windows Boot Manager how to boot correctly Linux using Linux boot sector, which we will extract using dd.


        On Linux, launch a Terminal with root privileges


        Take a copy of Linux boot sector : dd if=/dev/sda1 of=/tmp/linux.bin bs=512 count=1


        Copy linux.bin on a FAT formatted USB key or any storage accessible from Windows Vista


 


Step 3 – Install Windows Vista


 


Step 4 –  Configure dual booting in Windows Vista


We will create an entry for GRUB in Windows Vista boot configuration data store using bcdedit.


        On Windows Vista, launch a command prompt with administrative privileges (by right clicking on cmd and choosing Run as Administrator)


        Copy Linux boot sector on the root of the Windows boot (active) partition, namely the one containing bootmgr. If you don’t know for sure you can use diskpart or diskmgmt.msc to find out which one it is.


        Create an entry for GRUB :


o   bcdedit /create /d “GRUB” /application BOOTSECTOR


o   Note: bcdedit will return an ID for this entry that we will call {LinuxID} below. You will need to replace {LinuxID} by the returned identifier in this step. An example of {LinuxID} is {81ed7925-47ee-11db-bd26-cbb4e160eb27}


        Specify which device hosts a copy of the Linux boot sector


o   bcdedit /set {LinuxID} device boot


        Specify the path to a copy of the Linux boot sector


o   bcdedit /set {LinuxID}  PATH \linux.bin


        Add Linux entry to the displayed menu at boot time


o   bcdedit /displayorder {LinuxID} /addlast


        Let the menu be displayed 10 seconds to allow for OS selection


o   bcdedit /timeout 10


 


I want to thank Pascal Sauliere (http://blogs.technet.com/pascals) and Mathieu Malaise (http://www.microsoft.com/france/securite) for help on Linux/GRUB and for helping research bcdedit options.

Comments (7)

  1. Anonymous says:

    For this to work in Windows 7 I had to change the second command to: bcdedit /set {LinuxID} device partition=C:

  2. Anonymous says:

    Updated 2008-05-12 : added a step to turn the TPM on before enabling BitLocker Many people have wondered

  3. Anonymous says:

    Com à aquisição pelo mercado corporativo e doméstivo do Windows Vista, sabendo que existem vários usuários

  4. Anonymous says:

    Mon collègue Cyril Voisin vient de publier un webcast sur la configuration d’un dual boot Linux

  5. Anonymous says:

    Booting Linux using Windows Boot Manager

  6. AKA the A says:

    @danielOxley – same goes for Windows 8, without that entry, it never finds the linux.bin

    Please update the article on this, spent a total of about 8 hours trying to find why it refuses to work…
    this was of great help
    https://technet.microsoft.com/en-us/library/cc766223(v=ws.10).aspx