Scary, scary times.
I have been syncing my iPhone using iTunes running in VirtualBox. After all, Apple doesn’t make an iTunes for Linux. And tonight I nearly bricked my iPhone and erased it of a lot of data in the process. Brilliant. I hate it when that happens. At least it’s not dead.
See, I figured backing up was good policy. Who wants to lose all the data in their phone? And virtual machines are pretty standard fare these days. My VirtualBox is running XP. I used to sync and restore Palm devices all the time, no sweat.
And I’ve been doing the “backup” sync and using iTunes to transfer music to my iPhone from VirtualBox with no issues.
So I hadn’t thought much about it.
Until tonight. I decide to back up. I plug in the sync cable. iTunes tells me there’s an update for the iPhone 3Gs firmware and asks me if I want to install it.
“Well why the hell not,” I figure, “can’t hurt.”
Turns out that throughout the update process, the iPhone resets itself repeatedly and disconnects from USB each time. This is not a problem in Windows or Mac OS, because the system would just re-detect it and iTunes would pick up where it left off with the next stage of the process.
Of course, with me running iTunes in VirtualBox on Linux, it works differently. Every time the iPhone is inserted into USB, Linux owns it. I then have to tell Linux to give control over to VirtualBox, where iTunes can then find it.
I didn’t realize the phone would silently disconnect and reconnect, without any indication from either the phone or from iTunes.
So what happened? Well, iTunes erased the damned phone in preparation for the update, then reset the phone. This promptly disconnected it from USB, then reconnected it, which gave ownership back to Linux without me knowing it. The iTunes display in VirtualBox, of course, just showed the mid-point progress bar, slick Apple production, without bothering to tell the user “there was just a USB remove and re-insert event and the phone doesn’t seem to have come back!”
So I didn’t know to click on the little status bar icon and tell VirtualBox to take ownership of the iPhone from Linux. So iTunes sat there dutifully waiting for the phone to come back as a tabula rasa… and it never did, because it was sitting connected to Linux instead.
Meanwhile, the phone now shows a scary screen that just says “iTunes” on it and has a picture of a USB cable (not something you normally see on your iPhone). Not realizing what has happened, I let it sit there in that state for hours.
Eventually iTunes times out. There is no retry option. It just fails and gives me an Apple web page about things to try next, which ultimately include contacting customer care to see about warranties, exchanges, etc. I’m thinking something along the lines of “Oh… shet.”
Nothing. Same “iTunes” graphic and image of USB cable, and nothing else. Plug cable in. Remove cable. Phone is unresponsive.
I finally realize that the iPhone is connecting to Linux, not iTunes. A light bulb goes off, and I realize what has happened. So now I tell VirtualBox to take ownership of the iPhone again. Fingers crossed. iTunes finds the phone. It’s restoring! Hooray!
Sort of… The same kind of foible happens several more times before I get the hang of the fact that actually in a single “restore,” the iPhone will reset itself (disconnecting from USB, then reconnecting) maybe half a dozen times! Each time, Linux will end up owning it when it comes back, rather than iTunes. This will interrupt iTunes’ flow.
Shades of Newton and the Newton connectivity utility that doesn’t work with any known system any longer (which is the only reason why I stopped using my Newton 2×00, after years of having to use it with a virtual machine just to get it to work at all).
Apple, sometimes you get too God damned fancy for your own good.
It takes me a while to work my way through the restore process, which, if you’re running iTunes in a virtual machine, turns out to be about as un-automatic and hair-raising as you can imagine.
And when it finally tells me that it’s successful, hours later, I let out a whoop of joy, unplug the phone, unlock it, and find…
A bare, as-new iPhone 3Gs screen in some kind of “fresh from the factory” state with the few icons for Apple’s default apps spread across four screens. No customization. No saved preferences. No downloaded apps.
Well at least it’s not dead, which it could have been. So I plug back in again and it tells me it’s going to synchronize. Whew! Maybe I can get my stuff back automatically after all!
When all is said and done…. well…
All music: lost. Must be re-selected, re-copied.
All app updates: lost. Many dozens of apps need updates. These apparently have to be downloaded over the air, rather than through iTunes.
All configuration information: lost. I have to re-set-up things like Google sync and my notification preferences and alarms. Total pain in the ass.
This sucks, and it is definitely a lesson to me: don’t get too comfortable about virtual machines. Take more seriously the fact that the devices in common use were not designed to work with Linux. Don’t overestimate the consequences of not being like everyone else.
And don’t run updates unless absolutely necessary.
I’m not a tech tweaker any longer. At this stage of my career, I’m a production environment and need production-level stability. No updates unless it’s critically necessary, and then only using the most conservative configurations/arrangements possible.