How to dual boot Linux and Windows XP (Linux installed first) — the step-by-step guide with screenshots

How to dual boot Linux and Windows XP (Linux installed first) -- the step-by-step guide with screenshots


Updated 2 March 2009 – now uses Ubuntu 9.04 as the Linux distribution

Scenario: You want to install XP on your machine alongside your existing Linux installation on the same physical drive which already has Ubuntu 9.04 installed.

Tutorial Summary: We’ll create space on the Linux partition to install Windows XP. XP bootloader is fairly clumsy when it comes to dualbooting and will overwrite GRUB completely. We’ll reinstall GRUB to the MBR and configure it to dualboot both Ubuntu and XP.

This tutorial has been tested on a Sun Virtualbox 2.1.2 virtual machine.

[#PAGE-BREAK#Back up the GRUB boot menu#]

Regardless of which bootloader you end up using it’s a very good move to first back up the GRUB bootloader. It’s easy to lose it and unless you know how to re-write it from scratch then you’re generally facing a full reinstallation of Ubuntu.

Firstly boot into Ubuntu and go to Applications –> Accessories –> Terminal. Then type in sudo gedit /boot/grub/menu.lst.

This text file contains all the information GRUB uses to configure various boot options. Scroll down and the entries between “## ## End Default Options ##” and “### END DEBIAN AUTOMATIC KERNELS LIST” are the Linux boot options.

Make a backup of the file by going to File Save As and selecting a different location. Or take a full copy of the contents and place it into a new text file. If you can create the backup on a removable disk or networked location.

[#PAGE-BREAK#Make space for XP#]

Now we need to create space on the hard drive for XP so this will involve resizing the main Ubuntu partition. Restart the system using the Ubuntu Live CD as this gives you access to GNOME Partition Editor. When the CD loads select “Try Ubuntu without any change to your computer”.

Once the CD loads go to System Administration Partition Editor.

Right-click on the main data partition which has been formatted with ext3 – it should be /dev/sda1 – and select “Resize/Move”.

Move the slider from the right to shrink the ext3 partition and create free space on the hard drive which will take the NTFS XP partition. Make sure that the free space is sufficient to hold XP (at least 2GB – preferably 5GB). Then click “Resize/Move” to confirm the selection and “Apply” back in the main screen to carry out the pending change.

[#PAGE-BREAK#Install Windows XP#]

Restart the system with the Windows XP CD and boot into the install program.

Unfortunately XP isn’t so adaptive at handling existing partitions during installation. It detects the two Ubuntu partitions and marks then C: and E: accordingly. The remaining unpartitioned space which is available for XP will be marked as F:.

For the operating system and the vast majority of Windows applications which have properly-coded installation scripts this is not a problem. Some older applications will assume that C: is the system partition and may bring up errors. There are ways of changing the drive letter assignation of the system partition but in this scenario it’s strongly discouraged.

To insult to injury XP detects the Linux partition as an active system partition and won’t install unless it marks this partition as inactive.

[#PAGE-BREAK#Restore the GRUB boot loader#]

Once XP has been installed it will boot happily into XP but there’s no sign of Ubuntu. To reinstate GRUB as the system bootloader it needs to be reinstalled into the MBR.

Boot the system from the Ubuntu Live CD and select “Try Ubuntu without any change to your computer”.

Open a Terminal session – Applications Accessories Terminal

To enter the GRUB configuration mode type in “sudo grub” and press Enter. Then type in the following commands in sequence:
- root (hd00) NOTE – if you moved the ext3 partition to the right then use (hd01)
- setup (hd0)
- quit
- exit

Reboot the system. You’ll get the GRUB bootloader but XP won’t be an option – we need to add this to the boot options.

Boot into Ubuntu and open up another Terminal session. Then type in sudo gedit /boot/grub/menu.lst

Scroll down to the bottom of the file and type in the following text strings:

title Windows XP
root (hd01) (or (hd00) if Ubuntu is on the (hd01) partition)
makeactive
chainloader +1

Save the file and reboot. When the GRUB loader launches hit ESC for the boot menu. Windows XP is the last option – select it and XP will load.

If you want to make the GRUB menu always available boot back into Ubuntu and edit the MENU.LST file. Find the hiddenmenu text string and change it to #hiddenmenu.

To increase the menu timeout change the default timeout 3 to something more appropriate.