Note: The Haswell-based MBP has an internal modification which requires adding the USB3 drivers from the Bootcamp download to the Win7 installer so that they are automatically loaded. Without that step, you’ll have a non-responsive keyboard and mouse, preventing completion of the install. Attaching an external keyboard or mouse does not appear to address the problem. I am still attempting to get my old Sitefinity-based site loaded so that I can figure out which files are required and where they should be placed without having to nuke my Bootcamp partition.
Also, this was initially written for Ubuntu 12.x and OSX Mountain Lion. I’ve verified that it works fine for other Linux versions and OSX Mavericks, but haven’t tried with Yosemite.
A few of the applications I’m working on are required to run on The Big Two (+1) (Windows, OSX and [unfortunately] Linux). I spend most of my time moving around and working on my MBPr (stupidest abbreviation ever!), and VMs like VirtualBox, Fusion and Parallels won’t work for me since their 3D acceleration support is beyond crappy.
So, I need to be able to switch between these three operating systems. There’s quite a bit of documentation out there about how exactly to go about this, but most of it either omits crucial steps or makes unacceptable compromises like removing the OSX recovery partition.
After much research (and a few reinstalls) I managed to get this to work quite well. My current configuration is Mountain Lion, Win7 x64, Ubuntu 12, a shared data partition and, of course, the OSX Recovery partition. (5 total, or 6 with the EFI partition).
Note: The Late 2011 model MacBook Pro I had before upgrading to the Retina refused to boot from a USB stick. The only workaround I found was to partition the drive in OSX, move it to a PC (Thinkpad, in this case), and install Windows and Linux from there – not fun, to say the least.
So, I present:
How To Do It
The primary challenge in this configuration is recognizing and adapting to the fact that Windows can’t see more than four partitions on its boot drive. (If you try and go beyond that limit, it’ll ask if you want to convert the drive to a “Dynamic Disk.” If you say yes, you will no longer be able to boot Windows, and are pretty much screwed, unless you’re one of the five people that have figured out how to turn a dynamic disk back into a basic disk.)
OSX, on the other hand, can see as many partitions as I’ve thrown at it, and happily boots from wherever you want it to live. Ubuntu appears to do this, as well. (Despite my previous disparaging comments about Linux, and OSX’s dev tools, I’ve now spent enough time with both OSX that I am annoyed when I have to use Windows. Fortunately, it’s only for my day job. XCode is awesome. I am still not an Eclipse fan.)
So, here’s the procedure, assuming you’re starting from scratch.
In addition to your MBP, you will need:
1. A fast external drive. I recommend a USB 3 stick with at least 4GB of memory (big enough to hold a Win7 ISO). These are ridiculously cheap (my 64GB SanDisk was $40 at Microcenter on closeout). During the install, you’ll have to unmount the primary hard drive and boot from the this. A CD will not work (and why do they make those anymore?!). Don’t even think about trying to fake this using a single drive. It won’t work. Really. It sucks, but such is life. The cost of a USB stick doesn’t even break the noise floor considering you’re looking at a $2k-$4k laptop.
2. The OSX Recovery Assistant. (Download direct from Apple here.) This nifty little app lets you create a bootable copy of the recovery environment on the flash drive. This is what we’ll be using to manipulate our partitions.
3. The LinuxLive USB Creator. (Download here) We’ll use this to easily (yes, really – this is the last easy thing you’ll ever do with Linux) create a bootable Ubuntu installer.
4. 64-bit ISOs for Ubuntu and Windows 7. The Win7 ISO is downloadable ffrom Microsoft, and Ubuntu Desktop is out there somewhere. Go Google it yourself.
The key to this procedure is to relocate OSX and the recovery partition to the end of your drive (note that Disk Utility moves the Recovery partition for you to keep it next to the OSX partition). Since you can’t move the partition you’ve booted from in *any* OS (to my knowledge), you’ll need to boot from an external device that provides a good partitioning tool. Avoid the impulse to go learn gparted or clonezilla – they’re unnecessary. Clonezilla also trashed my source partition, and bricked a USB stick – as an electrical engineer, I didn’t think that was even possible – while I was figuring all of this out.
Install the OSX Recovery Assistant to your external drive, and reboot. Hold down the left option/ALT key while rebooting until you’re presented with a boot menu, which should provide options for (assuming you’re starting from a 100% OSX drive) OSX, Recovery HD and the USB Recovery system (which will be the last Recovery item listed). Select the last recovery option listed.
Once it boots, you’ll be presented with four menu options including “Reinstall OSX” and “Disk Utility.” Select “Disk Utility.”
Select the Apple SSD in the explorer (left pane).
You should only have one partition at this point. Divide it into a few parts. You’ll need (based on my config, which has the 768GB SSD)
1. The existing OSX partition at the beginning of the drive (which we’ll call OSX1 in this article). This will eventually become your Bootcamp partition, so size it appropriately. I set it to 128GB. (I’m working on a 768GB SSD.)
2. A shared data partition, if desired. I set this to about 390GB.
3. A Linux partition. (80GB)
4. A Linux swap partition (I set mine to 16GB to match my RAM, which may or may not be a good reason).
5. The final home of OSX – I also set this to 128GB. (We’ll call this OSX2 from now on)
I found it easiest to add all the partitions before resizing them, and to keep everything as HFS+ (MacOS Journaled) until later. HFS+ partitions are easier to resize/move around than anything else. Also, Disk Utility does weird things to partition sizes when you create new partitions; save yourself a headache, create all the partitions, then set the sizes starting with the top-most partition and working your way down.
The important part is that you need an OSX HFS+ partition at the end of the drive. Resize the existing OSX partition to whatever size you want your Win7 partition to be. (This is really, really difficult to change later – give yourself plenty of space!)
Now, the fun part:
1. Your OSX2 partition needs to be at least as large as the OSX1 partition (eventual home of Win7). In Disk Utility, select OSX1, and click the “Restore” tab.
2. Select OSX1 as the source, and OSX2 as the destination.
3. Click Restore. You may have to right-click on the partitions and unmount them (context menu option). Just make sure OSX1 is the source, and not the other way around, or you’re looking at a really, really slow (1+ hours) Internet recovery.
4. Wait awhile. This took me about 20 minutes to move apps, data and the OS.
At this point, you should have two functioning OSX installations. Disk Utility was kind enough to clone the recovery partition, as well, freeing up valuable slots at the beginning of the drive.
Reboot, holding down the Option key (aka, ALT). You should see something like “OSX | Recovery | OSX | Recovery | Recovery”. Select the SECOND OSX install. We’ll do the rest of the disk utility work from there, and also need to make sure it really works before nuking the original.
Assuming this works (and if it didn’t, you’re on your own), open up Disk Utilty and delete the first OSX partition. Create a new FAT partition in its place of the same size. (You may be able to do this from the Win7 installer, but doing all the partitioning stuff from the OSX side makes it a little easier to keep the GPT and MBR in sync.)
Now, use Boot Camp Assistant to create the Win7 installer (feel free to use the same USB key as we won’t be needing it at any more) and download the Boot Camp drivers if you haven’t already.
Reboot, holding down Option/ALT once more, and select the USB key to boot from. Proceed normally through the install process, picking the previously-created Boot Camp partition as the target. You’ll probably have to reformat it. (If you get an error like “Could not find or create a system partition”, close the window with the X in the corner to get back to the initial install screen, remove the USB drive, wait a second, put it back in (any port will do) and then try again. [Yes, it”s weird. This appears to only happen when installing from a USB3 stick.])
Install Windows, install the Boot Camp drivers.
Have a beer. Two down, one to go…
Download the LinuxLive USB Creator and, if you haven’t already, the Ubuntu Desktop ISO. Use LinuxLive to create a bootable Ubuntu installer on the USB stick.
Now, reboot (again), hold down Option/ALT, and select the USB stick with the Linux installer. Install as normal, but this time to the ~80GB Linux partition that you created earlier.
Important! While installing, make sure you boot the boot loader (Grub, typically) on the home (‘/’) partition. Bad things happen otherwise. I recommend keeping Grub (even though it seems redundant if, as I am, you’re using rEFInd) since it lets you do things like provide boot parameters to the Linux kernel for entering run level 3 (text console, for fixing the inevitable bad driver installation).
When it’s complete, remove the USB stick and reboot (again). Hold down Option/ALT, and select the OS of your choice.
I really recommend installing Refind. It presents a much prettier UI than Grub, and is nearly self-configuring. Once Refind (apparently a branch of Refit) is installed correctly, you’ll be presented with a lovely screen showing an Apple, Windows symbol, and a Penguin whenever you reboot without having to wait for the OSX boot loader to decided to grace you with its presence.
The Least You Need to Know
That should be it. To sum up:
– Install the OSX Recovery Assistant to a USB drive and boot from it
– Repartition your drive, creating a new OSX-sized partition at the end of the drive
– Use Disk Utility’s “Restore” feature to copy your original OSX partition to the new one
– Delete the original OSX partition
– Install Win7 in its place. Again, you’ll have to remove and reinsert the USB stick after the installer is loaded or you’ll get weird errors. (You don’t have to switch ports – just remove and reattach to cause the correct USB drivers to be loaded.)
– Use LiLi to create a bootable Ubuntu install stick, and go from there.