Windows (XP) and other Microsoft technologies
This article discusses the optimal way to install Windows on a hard drive where Linux will be the main OS (of course).
It is better to install on this order:
- First partition the drive on Linux (this is cleaner). Boot on a LiveCD, then use fdisk to partition the drive. Choose the first primary partition as the Windows partition. Update: choosing first partition is not needed at all. However, first drive is important (or see below).
- Remove all drives except the drive where you intend to install Windows. Boot the Windows install CD and install Windows. It will write (without asking permission, of course) the Windows bootloader into the Master Boot Sector of the drive. This is not a problem as we will overwrite it with GRUB which is much better.
- If you need to install another Windows OS (on a different partition), do so now. It will update your boot.ini setting in the first Windows partition.
- Install Linux on the remaining partitions. Then install GRUB on the MBR and use it to dual boot.
- When you install Windows, be sure to install it on a system with a SINGLE hard drive, or at least with no other hard drives containing Windows. If you install it while another drive containing Windows is present, it won't write the bootloader into the partition of the newly installed Windows. Rather it will modify (without telling you anything) the configuration file (boot.ini) of where the previous bootloader is installed. You'll later encounter problems with GRUB's chain-loading (dual-booting) mechanism.
- If you anyway made a mistake and installed Windows while another drive containing Windows was present, you can still fix the problem. Copy the files boot.ini, ntldr and ntdetect.com from the older Windows installation into the new one. These files are present on the root of the partition (although they are hidden, so you must edit settings to see them). Once they are copied, modify the file boot.ini on the new system so that it is correct.
- On any hard drive, there can be only 4 primary partitions. Primary partitions can be used for booting; an extended partition can then contain any other number of partitions (it's in fact a placeholder). In fdisk for example, if there is an extended partition fdisk will display it overlapping with the actual partitions it contains (an extended partition is not an "actual" partition). Booting from an extended partition (in fact, a partition within an extended partition may be more correct) may be possible, but I am not sure. It may not be possible to boot directly from within GRUB into such a partition.
- Create the primary partition under Linux, choosing NTFS as the partition type, then boot the Windows install CD-ROM and install onto that partition. As always, the less Windows does for you the better, since you do not control the process (Windows can actually create an extended partition without your knowledge!).
- Sometimes, during a Windows update, the process can create additional partitions, thus breaking the Linux boot (the previous root partition for Linux boot will have changed). Only way to repair is to boot via an USB key.
Windows Boot System
- On a system with UEFI, Windows will need three partitions: the EFI boot partition (FAT32 file system), the MSR (Microsoft Reserved Partition, it has no filesystem and under gparted has the msftr flag), and the main Windows partition (in this order).
- Do not delete the MSR partition as the system will probably become unbootable!
- You can create a Windows 8 Repair USB drive easily if you have access to a Windows 8 computer. This even works under VirtualBox.
Creating a Windows Boot USB Key on Linux
- BIOS: MBR partition scheme
- Rewrite the partition table as msdos and format your USB drive as NTFS using GParted (also add the boot flag).
- In GParted, right click the USB partition and select Information. Copy the UUID somewhere as you will need it.
- Copy all files from mounted Windows ISO or DVD to USB drive using your favorite file manager.
- Go to USB drive and if the folder named boot has uppercase characters, make them all lowercase by renaming it.
- Install GRUB on USB: sudo grub-install -v --target=i386-pc --boot-directory="/<USB_mount_folder>/boot" /dev/sdX (for instance /dev/sdc).
- Create a GRUB config file in the USB drive folder boot/grub with the name grub.cfg:
echo "If you see this, you have successfully booted from USB" insmod ntfs insmod search_fs_uuid search --no-floppy --fs-uuid <UUID_from_step_2> --set root ntldr /bootmgr
- Unmount the USB drive and restart your PC. Choose the USB as the first boot device in BIOS and start booting from it.
- You can go to the recovery console by booting the install CD and then typing "R".
- You can extract the file from a Windows installer by running it like that in the Windows console:
setup.exe -a -pc c:\path\to\extraction
Windows on a non-first hard drive
- Windows does not support booting from the non first hard drive in the system. So if you install Windows on such a drive, the following manipulation will be necessary in GRUB:
title Windows XP SP2 (English) map (hd0) (hd1) map (hd1) (hd0) rootnoverify (hd1,0) makeactive chainloader +1
This fakes the second drive as the first one. You do not need to edit boot.ini settings after you did this.
- With Windows Vista, if you somehow change your hard drive partitions, Vista will generally end up being unbootable. This can be repaired with a Vista boot CD easily though. It should not even wipe out GRUB of the MBR.
Copying a Windows 7 partition under Linux
- The procedure is explained here.
- It is extremely important to respect the same partition offsets. In particular, recent versions of fdisk seem to start the first partition on sector 2048. To be able to start on previous sectors, use fdisk -c=nondos option. Also don't forget to copy the MBR to the new hard drive.
- Note also that in my case, ntfsclone did not work. dd worked however.
- Even with FAT32, you cannot use files larger than 4GB. Thus FAT32 is not a good file system for USB keys.