Jump to content

Multiboot Vista / XP and Other OSes with Grub4Dos Menu


spacesurfer

Recommended Posts

Good news for people who use Grub4Dos loader for multi-booting to various Microsoft OSes, including the new Windows Vista, and Linux. I've modified an old trick I've used to load Grub4Dos on system startup with Windows XP as the main OS. See the post at 911cd.net Multi-boot WinXP and other OSes with Grub4Dos for this method.

Background

For those of you not familiar with Grub4Dos (referred to as Grub henceforth), here's some background information on its benefits. Why use Grub instead of Windows XP boot menu or Vista boot menu? There are several reasons.

  • You can't boot non-Microsoft OSes with XP/Vista boot menu. Grub4Dos loads Vista, XP, 2000, 98, Linux, BartPE on HDD or CD etc.
  • You can't boot other devices, namely floppy and CD/DVD drive, from XP or Vista menu. Grub can boot floppy, bootable CD/DVD (even if your BIOS does not support it), and floppy images from its menu.
  • It's backward compatible but not forward compatible; meaning, XP can load Windows 2000, 98, and other legacy OSes but not Vista. Vista can load previous ones but not future ones. This is not a limitation of Grub at this point.
  • You can boot Windows PE 2.0 and VistaPE with Grub.
  • Fourth, Grub does not modify the MBR or PBR. It requires no patching or hex-editing. It simply requires renaming a couple of files, which I'll explain next why renaming is required.

Why Rename?

My objective was to load Grub loader first, before XP boot menu (and now before Vista boot menu). In order to fulfill this objective, renaming two files is necessary.

You can add Grub loader to boot.ini so that you can get an option to load Grub in the XP boot menu. However, if you want Grub to load before XP boot menu, you'll have to rename two files. First, you have to rename ntldr (the XP loader) as ntldrxp and grldr (Grub loader) as ntldr. Basically, you are disguising Grub loader as the XP loader. So, the system thinks it is loading XP but it is loading Grub. Then, you can create an entry in menu.lst to load XP with the following lines:

title Microsoft Windows XP SP2 Pro (Find and Load)
find --set-root /ntldrxp
chainloader /ntldrxp

If you had edited boot.ini to automatically load Grub without a timeout, then you would not be able to boot XP because of a circular reference. Why the circular reference? Because system loads ntldr, which reads boot.ini and loads grldr automatically (without an XP menu). Then, from Grub, you would choose to boot XP. However, ntldr will look for boot.ini and load Grub again automatically. It doesn't matter if you rename ntldr to ntldrxp. Ntldrxp will also look for boot.ini and you get a circular reference. Therefore, renaming both ntldr and grldr files solves the problem.

Booting Vista with Grub

So, with Windows Vista, is it still possible to get Grub to load before Vista boot menu? And can you boot Vista with a Grub entry? Both are yes!!

Even though Vista's boot process had been modified, the same trick works with Vista as with XP. Let's look at the differences between Vista and XP boot process before I explain how to get a Grub menu before the Vista menu.

For XP, the MBR looks for and loads ntldr. Ntldr then read from boot.ini. If it finds two or more entries in boot.ini, then it will present a menu option for the entries (unless you set to boot an item automatically). That's the process. (I've read that ntldr serves two functions: bootmanager and bootloader. As bootmanager, it presents a menu for XP and other OSes. As bootloader it itself can boot XP.)

For Vista, the MBR looks for and loads bootmgr. You can say bootmgr has replaced ntldr. However, bootmgr serves only one function: as a bootmanager. Bootmgr refers to a file called bcd (short for boot configuration data). You can say bcd is like boot.ini. It contains the menu entries for Vista's boot menu. There's a third file called winload.exe that actually loads Vista. This is the bootloader for Vista.

So, for our purposes, we need to replace bootmgr with grldr to get a Grub menu before the Vista menu. Then, we need to create an entry in menu.lst for booting Vista, XP, other OSes, and other devices. Finally, now for the instructions.

Requirements

  1. grldr, the file that loads Grub loader. You can find it at http://grub4dos.jot.com/WikiHome. Download the zip file and extract files to get grldr.
  2. WinImage or any other floppy image creator
  3. Floppy drive and a floppy
  4. A system that is currently dual-booting XP and Vista

Backup System

First step is to backup your system with System Restore or Vista's backup program just in case things go haywire (if you follow directions correctly, it shouldn't). I don't use system restore but you may want to. If you are comfortable, you can skip this step.

The worst that can happen with these simple instructions is you lose the ability to boot to either Vista or XP. If you created a Vista boot floppy as explained in the next step, then you should be able to recover. If something worse than this happens, you did something beyond these instructions.

Create Vista Boot Floppy

Now, make a Vista boot floppy. Follow the instructions: http://www.msfn.org/board/index.php?showtopic=95092. I advise you not to skip this step. It will not only help you now, but also if in the future you can't load Vista or XP, it will come in handy.

Note: you can create a Vista-only boot floppy, XP-only boot floppy, or Vista/XP dual-boot floppy by modifying your boot options in Vista. If you want a Vista-only boot floppy, modify your boot options to boot Vista automatically (without a timeout). If XP-only, boot XP automatically. If you want dual-boot, specify a timeout before loading your default choice. The changes you make are reflected in the bcd file. Therefore, all files will be same on these floppies except the bcd file. For the purpose of these instructions, you're better off creating a Vista/XP dual-boot floppy so you can boot to either one.

Rename bootmgr

After creating a boot floppy, boot into XP. Give yourself permission to modify bootmgr. You may have to take ownership. (I took ownership of the file and then modified permissions. I now realize maybe that was not necessary. Not sure.) Rename bootmgr as bootmgrv.

Rename grldr

Rename grldr as bootmgr. Just like in XP, we're going to fool the system into thinking it is loading Vista, but it is loading Grub loader. Then, copy bootmgr (grldr in disguise) to where the Vista's real bootmgr was, usually in the root folder of your active primary partition.

Create Vista Entry in Menu.lst

Just like how ntldrxp was able to boot XP, bootmgrv can also boot Vista from Grub menu. Create the following entries in menu.lst. The # indicates comments. Take a look at the comments if you are not familiar with menu.lst.

# Sets colors, timeout before default selected and default value
color black/cyan yellow/cyan
timeout 5
default 0

# Boot Vista by finding and loading bootmgrv
title Microsoft Windows Vista
find --set-root /bootmgrv
chainloader /bootmgrv

# Boot XP by finding and loading ntldr
title Microsoft Windows XP
find --set-root /ntldr
chainloader /ntldr

# Boot BartPE by finding setupldr.bin
title BartPE with XPE 1.0.4 (from HDD)
find --set-root /minint/setupldr.bin
chainloader /minint/setupldr.bin

# Boot BartPE from USB HDD by swap method; note your USB HDD number may be
# different. I have two internal HDD's ((hd0) and (hd1)), making my USB HDD
# (hd2). Therefore, I have to swap (hd0) with (hd2).
title Boot BartPE from USB HDD
map (hd2) (hd0)
map (hd0) (hd2)
chainloader (hd0)+1

# Boot whatever is in CD/DVD drive, even if your BIOS does not support
# booting from CD/DVD drive. You need a file called sbootmgr.dsk.
# It's a very small SBM disk image. See the end of guide for download link.
title Boot CD using Smart Boot Manager
find --set-root /sbootmgr.dsk
map --mem /sbootmgr.dsk (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

# Example of how to boot a floppy image by finding and loading the image file.
# This is much faster than booting from the actual floppy.
title Boot Ghost 2003 (ghost.img)
find --set-root /ghost.img
map --mem /ghost.img (fd0)
map --hook
chainloader (fd0)+1

# Boot whatever is in the floppy drive
title Floppy on (fd0)
chainloader (fd0)+1
rootnoverify (fd0)

Note, we do not need to rename ntldr as ntldrxp in this case. You can also add Linux and other OSes supported by Grub. I don't use Linux. You can search for instruction on the net.

Reboot

Voila! Reboot and you should see Grub menu with your boot menu options!

Please post any discussion points.

Edited by spacesurfer
Link to comment
Share on other sites


Jaclaz, I've been around. I see you've been hanging around too.

What else do you know about BCD file? Some has posted here that you can modify the BCD file so it can work with Ghost. I think it break the dependency of BCD on GUID. You know anything else about GUIDs?

Interesting to note that even though the bootmanager is replaced in Vista, the same trick works (replacing bootmgr with grldr). Vista's boot manager somehow checks for the right ntldr because you can't rename grldr to ntldr and load Grub from Vista's boot menu. I get an error. However, replacing Vista's own bootmgr works like a charm.

Link to comment
Share on other sites

What else do you know about BCD file?

Not much, basically because at the moment I won't touch Vista with anything but a 10 feet pole ;), but two things might interest you or other members:

1. BCD is a Registry hive:

http://www.911cd.net/forums//index.php?showtopic=19439

2. Nuno Brito is working on a tool to read and write Registry hives:

http://www.boot-land.net/forums/index.php?showtopic=1703

http://www.boot-land.net/forums/index.php?showtopic=1839

I am trying to put together in the first thread every reference I can find on Registry hives, if anyone has some more info/links, he is welcome to join us in the "game".

jaclaz

Link to comment
Share on other sites

  • 4 weeks later...

With my minimal knowledge, I can't tell from reading your instructions if this will work on a machine currently using just Vista (in other words, not dual-booting with XP). I'm wondering if I can get the Wubi Ubuntu installer to work by using your method, but I don't want the extra hassle of installing XP, in addition (insert cracks about XP being superior here). Maybe using WinPE or similar to edit the Vista files? Thanks for this tutorial.

Edited by JimDandy
Link to comment
Share on other sites

Maybe using WinPE or similar to edit the Vista files?

Since all you have to do is copying/renaming some files, most probably even a floppy with NTFS4DOS would be enough:

jaclaz

Link to comment
Share on other sites

With my minimal knowledge, I can't tell from reading your instructions if this will work on a machine currently using just Vista (in other words, not dual-booting with XP). I'm wondering if I can get the Wubi Ubuntu installer to work by using your method....

Of course it will work without WinXP. Grub is not for dual booting just Vista and XP. It's for booting anything that is supported by Grub. That means you can boot whatever from floppy, whatever from CD, OS's supported by Grub (win98, xp, vista, etc).

So, you don't have to install XP. As long as Wubi Ubuntu is supported, you can boot it with Grub (without Vista or XP). I'm unfamiliar with the syntax for booting it so you'll have to research to find out what syntax goes in your menu.lst file.

Link to comment
Share on other sites

So, just to be clear, there's nothing special about already having a dual-boot system that is required. It's just a way of accessing the necessary files in Vista? Thanks.

Oops, I missed the last post. Think my question is answered. Thanks.

Edited by JimDandy
Link to comment
Share on other sites

Thanks for that tip. I think if I install Wubi it'll create the appropriate grub entry for me to copy, and then it'll just be a matter of following your directions to get it to work. When I get a chance to try this out, I'll report back.

Link to comment
Share on other sites

Just for the record, and trying to limit the confusion, everything in this thread is referred to grub4dos, not grub.

Grub4dos is a "fork" / "evolution" of grub that adds a number of features to standard "grub" and (at the moment at least) misses some other features of the original.

While the two projects are close relatives (and actually grub4dos is derived from grub), and the syntax and overall way of working is VERY similar, some commands and features present in grub4dos (mostly those related to booting DOS, Windows 9x/Me, NT/2k/XP/2003 and Vista) are COMPLETELY missing in grub, while some of the advanced features of grub, like variables handling aren't (yet) present in grub4dos.

Thus, the two programs are NOT completely interchangeable.

Grub4dos "Whereto" is here:

http://www.boot-land.net/forums/index.php?showtopic=14

jaclaz

Link to comment
Share on other sites

  • 2 weeks later...

Hi there!

what also works out great:

install GRUB on the partition where Linux resides, e.g.

/dev/hda2

(if you installed Linux here).

so do not overwrite the MBR

- which for exemple is on

/dev/hda1

which in Windows, is known as c:/

- by the 'Linux GRUB'.

then

#update-grub

it will search for other operating systems, including the loader for Vista (which is: Grub4Dos) and put them automatically in the Linux GRUB menu.

now if you start your pc it will start in Linux GRUB and show all boot options, including

'Windows Vista/Longhorn (loader)'

this is an easy, simple and elegant way to accomplish a dual boot system.

Have fun.

MANGOSTAN

Link to comment
Share on other sites

Huh? Grub4Dos is not the Vista boot loader, but an alternative version of a boot loader that is Grub-like and is available for install by EasyBCD. Another program that uses it is the VistaLoader thing that we don't talk about (or use, unless for a temporary educational purpose experiment that you then get rid of when you're finished playing, along with that unlicenced version of Windows Vista).

I played with it too, but then again I also purchased 2 Vista Ultimate's Retail so I think I'm entitled to play around on a temporary basis.

Are you saying that simply typing the command for Grub to update will install Grub4Dos? I thought that was made by a separate 3rd party project not even forked from Grub.

The Vista boot loader is specific to Microsoft Windows Vista, controlled by bcdedit or 3rd party utilities like EasyBCD or VistaBootPro, and does not bear any relation to Grub or Grub For Dos that I'm aware of.

So updating Grub is nice, but if it's not in the MBR then Vista will still be alone there unless you specifically download and install something that installs Grub4Dos, like EasyBCD or, well, Grub4Dos itself.

Grub4Dos is awesome though! It is a viable alternative boot loader for those that don't want to use the normal version of Grub.

OpenSuSE Linux installs a working Vista/Linux dual-boot automatically during installation that uses Grub, but with a cooler looking Grub menu screen. That's what I've mostly been using. Had some wacky problems with older Novell Kernel updates that needed manual fixing but that's been fixed in the latest Kernel update by updated Perl versions and scripts that do it automatically again. I can see Grub4Dos as valid for distro's that need more manual fixing to setup the dual-boot, but as of now OpenSuSE does it fine with it's use of Grub. Don't even need to go in and fix it anymore.

Edited by Eck
Link to comment
Share on other sites

Are you saying that simply typing the command for Grub to update will install Grub4Dos? I thought that was made by a separate 3rd party project not even forked from Grub.

(snip)

So updating Grub is nice, but if it's not in the MBR then Vista will still be alone there unless you specifically download and install something that installs Grub4Dos, like EasyBCD or, well, Grub4Dos itself.

Grub4Dos is awesome though! It is a viable alternative boot loader for those that don't want to use the normal version of Grub.

(snip)

Thanks for the reply.

To clear things up a little bit.

No, '#update-grub' will not install Grub4Dos on /dev/hda1 a.k.a. c:/

What I tried to say was: basically there is no need to mess around with any bootloader on the Windows partition. Even stronger: the MBR can stay untouched.

All you need is Linux Grub and its command: update-grub. This will give you all available boot options for Linux + all options for other installed operating systems.

And it works like a charm :-)

MANGOSTAN

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...