{"id":160,"date":"2020-12-18T23:29:32","date_gmt":"2020-12-18T23:29:32","guid":{"rendered":"http:\/\/beyondgoodandevil.org\/?p=160"},"modified":"2020-12-18T23:29:32","modified_gmt":"2020-12-18T23:29:32","slug":"iphone-backup-a-case-of-software-incompetence","status":"publish","type":"post","link":"https:\/\/beyondgoodandevil.org\/?p=160","title":{"rendered":"iPhone backup: a case of software incompetence"},"content":{"rendered":"\n<p>My wife started a new job Tuesday. To make sure she wakes up on time, we set the alarm on both our phones to 6 am, just in case.<\/p>\n\n\n\n<p>At 3 am, I woke up to feed one of our children. As she finished her bottle and went back to sleep,  I noticed a white light coming from my wife&#8217;s iPhone. My first thought: <em>Not good<\/em>. Most of her passwords and work-related information is accessible via her phone.<\/p>\n\n\n\n<p>After a few of minutes of checking it and reading online, it became clear the device is stuck in a boot loop. I knew I have a few hours to make it right, and decided to stay up and hack at it. <\/p>\n\n\n\n<p>The rest of this article details the list of issues I encountered along the path to a full fix. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Part 1: iTunes-based OS upgrade<\/h3>\n\n\n\n<p>My Google search immediately pointed me to the fact Apple has just released iOS 14.3 a bit earlier, which explained the probably source of the issue.<br><br><em><strong>Incompetence #1<\/strong>: <\/em>there was no upgrade notification presented prior to performing the actual update . Before pointing to the fact this is controllable via the iPhone&#8217;s settings, remember that most people just keep their default settings.<\/p>\n\n\n\n<p>I was happy to learn iTunes can &#8220;fix&#8221; a broken update without requiring a restore from backup, and immediately started the process. iTunes asked whether I want to Update (fix the iOS update, keep the data) or Recover (fresh install, requires  restore from backup later on); I chose &#8220;Update&#8221;, hoping this will all finish before my wife is ready to leave for work.<\/p>\n\n\n\n<p>While iTunes did not provide any clear message saying the update is not successful, it ended up doing a full factory reset. That meant a few days of lost data (will touch on that soon), and a much longer recovery time (full download of all data to the device).<\/p>\n\n\n\n<p><em><strong><em><strong>Incompetence<\/strong><\/em> #2<\/strong>: <\/em>no clear indication that update failed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"block-faaf2d50-9024-4fdb-95cd-edc2914afceb\">Part 2: no iCloud backup<\/h3>\n\n\n\n<p>&#8220;OK, I&#8217;ll recover from iCloud.&#8221;<\/p>\n\n\n\n<p>Nope; nothing there. There was not a single successful backup for this phone<em>, ever.<\/em> That seemed crazy to me, but after verifying it&#8217;s the actual case, I went on to recover from our computer: by a stroke of pure luck, we backed this device up 4 days earlier as we felt the phone was slower than usual and did a full wipe and restore. Not perfect, but pretty good.<\/p>\n\n\n\n<p><strong><em><em><strong>Incompetence<\/strong><\/em> #3<\/em><\/strong><em>:<\/em> we have a 2TB iCloud account (thank you Apple for monopolistically not allowing 3rd-party backup solutions). A phone does not complete a full backup for ~3 years, and the user does not have a huge red icon yelling at them? This is a super-basic feature of backup clients. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"block-faaf2d50-9024-4fdb-95cd-edc2914afceb\">Part 3: restore fails<\/h3>\n\n\n\n<p>At this point, my wife was already awake and concerned. The restore would take about 3 hours &#8211; she would need to take the computer with her, but it would complete the restore after her first hour at work, so we were still good.<\/p>\n\n\n\n<p>30 minutes pass, and we get an error message: iTunes failed reading from or writing to the device, and so restore failed. Pretty obvious what to do, right?<\/p>\n\n\n\n<p>Luckily, I&#8217;ve debugged my fair share of problems in the past &#8211; anything from low-level assembly debug of failing OS boots to networking SDK-s passing 10s of terabits per second, and so I followed a hunch: maybe I&#8217;m running out of disk space? Bingo. <\/p>\n\n\n\n<p>I have a 1TB SSD drive, so that seemed a bit weird, but I found the culprit pretty soon; iTunes kept two backups, each ~200GB, on my drive. I deleted one that seemed to be irrelevant (more on that soon) and continued with restore.<\/p>\n\n\n\n<p><strong><em>Incompetence #4<\/em><\/strong><em>:<\/em> an incomprehensible error message that would&#8217;ve kept 9 out of 10 people waiting for professional help.<\/p>\n\n\n\n<p><strong><em>Incompetence #5<\/em><\/strong><em>:<\/em> are you seriously unable to ensure there&#8217;s enough disk space for restore to be successful? Would&#8217;ve saved tons of time.<\/p>\n\n\n\n<p><strong><em>Incompetence #6<\/em><\/strong>: turns out the 2nd backup (the one I deleted) was actually being generated during the restore operation. So, the restore I did a few days earlier just kept wasting another ~200GB of space on my drive for no useful reason.<br>Is it really so hard to clean up after yourself?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Part 4: a complete recovery<\/h3>\n\n\n\n<p>My wife left by that time; I let the restore process go to ~20 minutes remaining, then put both laptop and iPhone in the car and started driving. It actually took more than 5 minutes to finish from the point iTunes said &#8220;5 seconds remaining&#8221;, but hey &#8211; it is what it is.<\/p>\n\n\n\n<p>The iPhone didn&#8217;t initially download apps since it was connected to a mobile network only; I pressed one of the apps to have it installed, only to be asked if I&#8217;d like to let &#8220;(null)&#8221; install over a cellular network.<\/p>\n\n\n\n<p><strong><em>Incompetence #7<\/em><\/strong><em>: really? (null)?<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Part 5: aftermath<\/h3>\n\n\n\n<p>I ended up handing my wife the phone ~3 hours after her day started; overall, this took ~7 straight hours of my time (Apple: you owe me for that).<\/p>\n\n\n\n<p>There was still one issue nagging me that I had to figure out: <em>why did iCloud backup not work?<\/em><\/p>\n\n\n\n<p>Reading through the docs, I learned that iCloud backup only happens when your phone is charging, locked, and connected to WiFi, which is what we do every night. Also, our network at home is a 200Mb\/5Mb (down\/up) link; at this rate I&#8217;d expect even an initial drop of 200GB to be backed up in ~30 days; we have that phone for several years already.<\/p>\n\n\n\n<p>When my wife came home, I took the phone and triggered a manual backup; it ran a bit and failed, even though I repeated that a few times.<\/p>\n\n\n\n<p>The day after, I asked her for the phone; turned off the automatic screen lock; connected it to power; and triggered a manual iCloud backup. A few hours later, we had our first successful iCloud backup, and I&#8217;ll be tracking it for the next few days to ensure backups continue successfully.<\/p>\n\n\n\n<p><strong><em>Incompetence #8<\/em><\/strong><em>: <\/em>there&#8217;s no visibility into why this failed, and no simple way to enable backup over cellular (which would&#8217;ve had a much faster uplink).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Epilogue<\/h3>\n\n\n\n<p>In the end, we were able to contain this incident almost entirely.<\/p>\n\n\n\n<p>Like many other software products, Apple software works very well for the common case, but not always for the less common cases.<\/p>\n\n\n\n<p>We were lucky to have a working backup, and (humility aside) a talented engineer that cares enough to start working on it non-stop at 3 am. <\/p>\n\n\n\n<p>If you have an Apple product, don&#8217;t assume your backup works just because &#8220;Apple knows how to do it&#8221;, &#8220;Apple devices have no viruses&#8221; etc. Set a monthly reminder and check that your backups are alive and well.<\/p>\n\n\n\n<p>If you&#8217;re working for Apple, please send this to the right person(s) so they can get that fixed. No need for anyone else to suffer through this.<\/p>\n\n\n\n<p>Cheers,<\/p>\n\n\n\n<p>Yair<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>My wife started a new job Tuesday. To make sure she wakes up on time, we set the alarm on both our phones to 6 am, just in case. At 3 am, I woke up to feed one of our children. As she finished her bottle and went back to sleep, I noticed a white &hellip; <a href=\"https:\/\/beyondgoodandevil.org\/?p=160\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">iPhone backup: a case of software incompetence<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,5],"tags":[],"class_list":["post-160","post","type-post","status-publish","format-standard","hentry","category-engineering","category-technology"],"_links":{"self":[{"href":"https:\/\/beyondgoodandevil.org\/index.php?rest_route=\/wp\/v2\/posts\/160","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beyondgoodandevil.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beyondgoodandevil.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beyondgoodandevil.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/beyondgoodandevil.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=160"}],"version-history":[{"count":0,"href":"https:\/\/beyondgoodandevil.org\/index.php?rest_route=\/wp\/v2\/posts\/160\/revisions"}],"wp:attachment":[{"href":"https:\/\/beyondgoodandevil.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beyondgoodandevil.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=160"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beyondgoodandevil.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}