When I wanted to install Windows 7 via Boot Camp on my Mac, the Boot Camp Assistant didn't let me. Various reasons for this are: Not enough space on boot disk, more than one partition on boot disk. And I wanted to install Windows to a different (internal) drive, not to the boot drive, anyway.
Luckily, having the perfect tools for this job, I went ahead to find out how to work around that.
I tried to turn this into a (somewhat) dummy-proof article, but I just realize that this would require me to write some tools for those who do not understand how to work with the MBR partition scheme by hand. Unless there's a big market for this, I won't probably follow up with this.
Yet, here's my notes that might help me or someone else in the future, perhaps:
- Turns out my solution only works when the Windows drive is also installed as an internal drive on the Mac, e.g. as a SATA drive in a Mac Pro (which I am using here). If the drive is external, connected via USB, there are more steps to perform, see here: http://guides.macrumors.com/Boot_Camp_Windows_XP_On_External_Drive (haven't verified myself that this works, though)
- On a Mac Pro, Windows partitions connected to the two extra internal SATA connectors (i.e. the 5th and 6th) appear not to be mountable or useable. E.g, when booting Windows with Bootcamp, Windows only sees the first four internal drives (those in the bays).
- The Windows installed gave me error 0x80300024 for the partition I wanted to install to. Solution: Inside my Mac Pro, move the drive that I wanted to install Windows to into Bay 1 (the leftmost bay). It might also work to simply remove all other internal disks. It seems that this error indicates that Windows can not make sure that this drive will be the one the BIOS will select for startup. Not an issue on a Mac, so this trick is temporary just to fool the Windows installer.
- By default, the Mac formatted drives use the GUID partition scheme. For the Windows installer, the block 0 of the disk has to be converted into a MBR partition type (with the first partition still using $EE).
- The modified MBR's partition list may be very different from the GUID partition list. It appears that OS X only looks at the GUID partition list, while Windows will use the MBR's list, and the Mac's firmware code looking for bootable disks looks at both. That makes it possible to have up to 3 Windows-accessible partitions on the disk, along with as many OS X-accessible partitions as you like (see below, "Theory on the MBR vs GPT usage").
- As Apple's software (Boot Camp control software in Windows, Startup Disk in OS X System Preferences) doesn't find the Windows installation if it's not a partition on the OS X startup disk, one has to hold down the option (alt) key at startup (during the startup sound) in order to get the boot menu in which one can then select Windows as the startup system. Once Windows is up, one can use the Boot Camp control panel to make the startup from this disk the default - without that the next reboot will go back to OS X. Once Windows has made the startup disk this way, holding down the option key at startup brings back the boot menu, and after one is back in OS X one can use the Startup Disk preference panel to choose the OS X disk as default again.
- Since Vista, Windows seems to use a new, more complex, boot system, which records particulars about the volumes in a special Registry file (inside "\Boot\BCD", on the active partition). And if the volume is even encrypted, then there'll be another small (100MB) partition that becomes the active partition, containing a small NTFS volume with just the BCD file and a few other items. This will be used to boot (and decrypt) the main C: volume then. That means that the BCD file can also refer to another volume that's becoming the actual startup volume. As the BCD contents become rather complex, the best way to get them updated when a bootable Windows volume is moved to a new disk is to start up from the Windows Installer DVD, press Shift-F10 as soon as the first dialog appears. This will open a command interface window, in which one can use the "bcdboot" command to update the BCD file to make the system bootable again (e.g. enter: "
\Windows\System32\bcdboot c:\Windows /s c:". Before this happens, Windows can't boot and will show messages such as "BOOTMGR is missing" or the error code 0xc000000e. I found that I also needed to update the boot code in block 0 sometimes, with the command "
bootsect /nt60 c: /mbr" (the
bootsect.com program can be found inside the Win7 Installer's Boot folder).
- More information can be found at superuser.com where I posted the question What needs updating when moving a bootable Windows 7 (or Vista) partition?.
- When moving the Windows partition to a different start block number, that number has to be set in the first (NTFS) block of the partition, at offset $1C (4 bytes).
- After I got my moved Windows partition working, it eventually happened that it would not boot any more. I had, in the mean time, also used it with VMware, so maybe that caused this. Anyway, what happened was the the MBR lost the "active" partition flag on my Windows partition. Once I activated that partition, it booted again.
Theory on the MBR vs GPT usage:
With the Windows install, the disk will have two separate partitioning schemes (with the GPT scheme rules being violated, because a GPT scheme shall only have one $EE type partition entry in block 0). This raises the question of which overrules which, and what it means if both differ from each other.
I have the impression that the Mac's boot loader (invoked by holding the Alt or Option key at startup) looks at the MBR, not the GPT, for bootable partitions. Therefore, the MBR may need to contain, apart from the Windows partition(s), an EFI and a HFS+ partition in case this drive should also boot into OS X. Otherwise, both may be omissed. I am not 100% sure on this yet, though - it may well be that the boot loader can find a bootable OS X system also in the GUID partitions list even if the MBR has been modified for Windows booting.
Once OS X is up, it seems to only look at the GPT infos, though. I get this impression from the fact that after Windows was installed, the Windows partition did not appear on the desktop (the GPT hadn't been updated accordingly yet), and Disk Utility also showed me the partition layout from the GPT, not from the MBR.
I just learned about the program WinClone, which is a OS X application that can transfer a Windows Boot Camp partition to another disk. This may be useful. I've also experimented with AOMEI Backupper, a free and quite capable Backup-and-Restore tool for Windows. It worked well when I simply wanted to copy a Windows installation to another disk, but it wouldn't perform a Restore when I had the MBR and the GPT partitions out-of-sync.