Today I wanted to install Windows on my MacBook Air. The wife needs to run a software on the laptop that’s not available on anything else than Windows. It requires proper 3D acceleration, so virtualization is out of question. I didn’t have a choice but to have a native Windows installation. This would’ve been a joy ride, considering Apple created Boot Camp, and things they do just work. Right?
First of all I needed a USB drive for some reason. I didn’t understand why it couldn’t create a temp partition with the install image. First, I tried using an SD card (which is, from the software’s perspective is just a USB drive), but Boot Camp was implemented by more clever people, so it simply rejected the card as a viable medium. OK, I dug up my cheap 64G flash drive from the bottom of the drawer, created the install disk and copied the Apple drivers to it.
The next step should’ve re-partitioned the disk so I have a new one that can be used by Windows. Boot Camp failed at this step. It didn’t tell me why exactly, so I thought that I could do this manually, I could even name the partition BOOTCAMP, hoping they wouldn’t check for anything else. Started the Disk Utility that comes with Mac OS, selected my drive and clicked the Partition button. To my surprise, the product created by the Kings of UX doesn’t handle me changing the partition size in the numeric spinbox, only by moving the handle in the pie chart. *SIGH*. OK, I’ll use that even though it’s much harder to size it exactly to what I want. After hitting Apply, it ran a quick disk check but found errors. Of course those can’t be fixed while you run the OS booted from the drive, so I rebooted in recovery mode to run fsck. After starting the partitioning process again (using the stupid handle to precisely resize) and hitting Apply, the check finished successfully, but. But it simply couldn’t resize the partition. That’s it, no meaningful error details. This is when I said, screw it.
I started looking around for third-party software that would accomplish this hard task. Unfortunately these ranged from $30 to $50 in price, but I didn’t intend to pay for something that I’d only use once and should be available fro free. A hint I read is that probably the volume was fragmented and this wasn’t handled by Apple’s own software. Hurray! I’d need to defrag the drive first, then re-partition. Eventually I decided to revert to something I knew, GParted. It can’t run on Mac OS natively, so I needed a Live USB drive to boot. Went to look for a second USB drive in the drawer and I created the Live GParted disk. I booted it and using the ugly-but-working UI I resized the partition (I could type in numbers that meant megabytes!), created a new one, formatted it to NTFS and I started to feel the accomplishment. Oh, how wrong I was.
Apple silently converted all simple GPT disks to CoreStorage, aka a Logical Volume Manager. This was needed so they can implement FileVault and these hybrid HDD/SSD disks. It kind of makes sense, although nobody asked me if I wanted this or not, or even if I’d ever need it. Not only me, but GParted was also not aware. Changing things around basically broke all the meta data this thing needs. The MacBook started not to boot up. I tried to analyze the kernel’s log, but googling the error message didn’t reveal much. I went over about 10-15 blog posts/Apple forum posts, but nothing really helped. I slowly started to give up on the data on my original partition. Then I started to look around in the list of available commands the command-line version of diskutility supports. I’ve found an interesting one: ‘corestorage revert’, which should revert a CoreStorage Logical Volume to regular GPT partitions. I said what the heck, I can’t lose my stuff even more, I ran the command. Everything related to CoreStorage was gone from my drive. I rebooted.
Voila, the OS managed to start up. I started to feel a little bit better. I went back to Boot Camp to finally finish the installation. I was naive, haha. It said that it couldn’t partition the disk because it needed it to have only one partition. What?! Great. I need to add the LVG back, so I can arrange the thing to only have one partition logically. So I did. The diskutility can do this in a non-destructive manner. I issued the command. I rebooted again to make the new Logical Group online, reran Boot Camp again, got the same error. I went to Disk Utility, and tried to completely remove the new partition (I planned to give Boot Camp only the space, not the partition), but when I deleted it, it always resized the HFS one to occupy the full available space. A quick round of googling didn’t help, nobody had this issue. So I rebooted the GParted USB drive once again, hoping I wouldn’t need to replay the mess with CoreStorage. I deleted the partition and for some reason this time CoreStorage didn’t go haywire and I could straight up boot into Mac OS. Gave Boot Camp another chance. I think you can guess if it succeeded or not. Crap!
I got angry at all those very clever engineers behind Boot Camp, so I thought that I’d simply install Windows on my partition without that stupid thing. I did a google search that revealed that this should work. So I rebooted from the Windows USB drive and installed Windows. Everything succeeded, even the drivers added by Boot Camp installed correctly. The last test remaining was checking if I could still start Mac OS. I could. Pheww, such a relief!
This is my story with the great Apple User Experience. It reminds me of the time when I had a course at the university about J2EE. It all works perfectly until it simply doesn’t, and you can’t possibly fix it because of the endless layers of crap (abstraction!) added to it. Apple managed to close the gap to Sun in this regard, for sure.