Skip to main content

Fixing an Unfinished Mac OS-X Update

Windows famously had the Blue Screen of Death, when the computer was hopelessly frozen in an error state; Macs have the spinning Rainbow Wheel or Beach Ball that often also spells doom. I thought of those recently when I faced a dead computer interrupted mid-upgrade.

While recently upgrading the operating system on my MacBook Pro, I got this screen:
Nothing but a greyish-white backdrop and a darker grey circle-slash in the center. When I'd power down and back on, same thing. It was well and truly stuck mid-upgrade.

How do you fix a Mac when an OS X upgrade fails in the middle of its upgrade?

The first question to ask is: did the upgrade package successfully download?

Your upgrade could get stuck at the download stage, before ever getting to the installation of the upgrade itself. If you are having trouble with downloading the upgrade, you might try:

  • Plug in the network cable - WiFi is great, but it is slower and prone to its own set of issues with maintaining the connection. And these upgrades are very large files to download, so the connection needs to be maintained for a long time. Eliminate one potential source of trouble and speed things up by plugging your Mac directly into your router or network.
  • Are you downloading through the App Store? Try cancelling and restarting the download. Cancel it by going to the App Store and the software being downloaded. Highlight it and press Option + Alt. This should provide the option to cancel the download. Click OK. Once it is cancelled, you can try to restart the download.
  • Go directly to the source by downloading from the Apple support website instead of the App Store. It is currently support.apple.com Open the website and search for the application upgrade you are looking for. In my experience, the higher results of the search will direct you back to the App Store, but farther down the list will be a link to the download from the support site itself. For example, when I searched for "OS X Upgrade High Sierra 10.13.2" the attached image shows the seventh link on the page, and its download does not come from the App Store.


Now, let's assume that you have successfully downloaded the upgrade package. The next question is whether the upgrade process has truly stopped in a hung state or if it is just taking a very, very long time.

This is important to get right. Interrupting an upgrade that is not truly stalled can cause a loss of data. You did back up the computer first, right?

If the screen shows the upgrade progress bar, possibly with the spinning beach ball cursor, it may not have moved in a while. Even when it does move, it may seem erratic, jumping from one estimate to another. (There is brains behind it, but a lot of factors can make its display progress rather non-linear.

The first thing to do is to give it a while longer. Plug in the power and set it aside to do its thing for a few more hours.

Alternately, press Command-L to access a little more information. It will ideally show what is currently being worked on by the installation.

Once you have confirmed that something has gone wrong and the upgrade installation has indeed frozen, there are several options to try.

  • Do a hard-restart of your Mac. Press and hold the power button until the machine shuts off. Count to ten then turn it back on; Hopefully the intelligence in the installation will either back out and let you restart it, or continue where it left off
  • If you downloaded the upgrade package through the App Store, go back to the App Store and click on Updates. Hopefully the intelligence built into the App Store will resume the upgrade
  • After powering off the computer, hold the Shift key while it powers back on. This launches "Safe Mode" on the Mac. Then go to the App Store and try the installation or upgrade in Safe Mode. Be sure to reboot again once the installation completes
  • An even more drastic measure is to reset the NVRAM. The NV stands for Non-Volatile, meaning that this part of the RAM does not lose its contents when the power is turned off. While restarting the Mac, hold down the Command-Option-P-R keys to reset the NVRAM. This is what finally got my OS X installation moving again. Or in my case, it let me restore to the previous operating system, so that I could then start the download-and-upgrade process over again (successfully the 2nd time!)
  • And more drastic still: use Recovery Mode. As with the previous two options, use a key sequence while restarting the Mac. In this case, Command-R launches in Recovery Mode. From there, you can restore a backup from Time Machine, run utilities for disk analysis and repair, install an operating system, etc.

Stalled upgrades and installations are never pleasant, and the issues are so much more severe when the stall happens with an OS X upgrade. Best wishes in getting unstuck!

Popular posts from this blog

How to do Git Rebase in Eclipse

This is an abbreviated version of a fuller post about Git Rebase in Eclipse. See the longer one here : One side-effect of merging Git branches is that it leaves a Merge commit. This can create a history view something like: The clutter of parallel lines shows the life spans of those local branches, and extra commits (nine in the above screen-shot, marked by the green arrows icon). Check out this extreme-case history:  http://agentdero.cachefly.net/unethicalblogger.com/images/branch_madness.jpeg Merge Commits show all the gory details of how the code base evolved. For some teams, that’s what they want or need, all the time. Others may find it unnecessarily long and cluttered. They prefer the history to tell the bigger story, and not dwell on tiny details like every trivial Merge-commit. Git Rebase offers us 2 benefits over Git Merge: First, Rebase allows us to clean up a set of local commits before pushing them to the shared, central repository. For this

Java 8: Rewrite For-loops using Stream API

Java 8 Tip: Anytime you write a Java For-loop, ask yourself if you can rewrite it with the Streams API. Now that I have moved to Java 8 in my work and home development, whenever I want to use a For-loop, I write it and then see if I can rewrite it using the Stream API. For example: I have an object called myThing, some Collection-like data structure which contains an arbitrary number of Fields. Something has happened, and I want to set all of the fields to some common state, in my case "Hidden"

Git Reset in Eclipse

Using Git and the Eclipse IDE, you have a series of commits in your branch history, but need to back up to an earlier version. The Git Reset feature is a powerful tool with just a whiff of danger, and is accessible with just a couple clicks in Eclipse. In Eclipse, switch to the History view. In my example it shows a series of 3 changes, 3 separate committed versions of the Person file. After commit 6d5ef3e, the HEAD (shown), Index, and Working Directory all have the same version, Person 3.0.

Code Coverage in C#.NET Unit Tests - Setting up OpenCover

The purpose of this post is to be a brain-dump for how we set up and used OpenCover and ReportGenerator command-line tools for code coverage analysis and reporting in our projects. The documentation made some assumptions that took some digging to fully understand, so to save my (and maybe others') time and effort in the future, here are my notes. Our project, which I will call CEP for short, includes a handful of sub-projects within the same solution. They are a mix of Web APIs, ASP MVC applications and Class libraries. For Unit Tests, we chose to write them using the MSTest framework, along with the Moq mocking framework. As the various sub-projects evolved, we needed to know more about the coverage of our automated tests. What classes, methods and instructions had tests exercising them, and what ones did not? Code Coverage tools are conveniently built-in for Visual Studio 2017 Enterprise Edition, but not for our Professional Edition installations. Much less for any Commun

Scala Collections: A Group of groupBy() Examples

Scala provides a rich Collections API. Let's look at the useful groupBy() function. What does groupBy() do? It takes a collection, assesses each item in that collection against a discriminator function, and returns a Map data structure. Each key in the returned map is a distinct result of the discriminator function, and the key's corresponding value is another collection which contains all elements of the original one that evaluate the same way against the discriminator function. So, for example, here is a collection of Strings: val sports = Seq ("baseball", "ice hockey", "football", "basketball", "110m hurdles", "field hockey") Running it through the Scala interpreter produces this output showing our value's definition: sports: Seq[String] = List(baseball, ice hockey, football, basketball, 110m hurdles, field hockey) We can group those sports names by, say, their first letter. To do so, we need a disc