Making a good Recovery: Installing a different macOS in Recovery

When you boot your Mac in Recovery Mode, one of its key features is installing macOS. Although you might want to do that because the system has become damaged, it could be because you want to downgrade macOS. For instance, if you just installed a macOS update or upgrade which is causing problems you can’t resolve any other way. If you’ve ever tried this, you’ll surely have discovered its big snag: in Recovery you can only install one version of macOS, and that’s the latest which has been installed on that Mac, which may be the one that you don’t want. This article suggests ways to work around that, and install the macOS of your choice.

This problem arises because when you install a more recent version of macOS on any Mac, the macOS installer also updates its firmware, including the Recovery system. Within that, the Install macOS [name of version] app which performs the installation can only install that one version of macOS. Let’s say you were running Catalina, and upgrade it to Big Sur 11.4. During the course of that upgrade, the installer will update the Mac’s firmware and its Recovery system to that for Big Sur 11.4. Boot in Recovery and the only version which the standard tools will install is Big Sur 11.4.

This is an important consideration for anyone intending to install and test Monterey betas: even when you install a beta-release of macOS to an external disk, it will automatically update your Mac’s Recovery, and the version of macOS available in that will be that Monterey beta, not your previous version of macOS.

Boot and install from another disk

One way around this is to avoid using Recovery on the internal disk (or an external, for Intel Macs), start that Mac up from another disk and run an older macOS installer from there. You can combine the two and make yourself a bootable installer on a USB ‘stick’, which is the neatest solution. Apple provides detailed instructions for creating that bootable installer in this article, which explicitly includes M1 Macs. The latter have to be booted in Recovery with the USB stick attached in order to install macOS from the stick.

Run an older installer in Recovery

With a little work in Terminal, it’s not hard to extend the capabilities of Recovery to include the installation of a different version of macOS. As I can’t find a definitive and official method of doing this, the following is based on what appears to work best. The general principle is to create a disk image containing the macOS installer, mount that from an external disk in Recovery, and run that installer to install its older version of macOS.

Creating an installer disk image could simply be a matter of creating a disk image (DMG) in Journalled HFS+ format (not APFS) and copying the Install macOS [name of version] app to it. However, to be sure that this works as well as possible I performed this in Terminal. Assuming your current directory is ~/Documents, or another location where you want to create the disk image, and the Installer app is already in your main Applications folder:
hdiutil create -o MacOSBigSur -size 16500m -volname MacOSBigSur -layout SPUD -fs HFS+J
creates the right type of disk image. Change the volname according to the version of macOS to be installed.

hdiutil attach MacOSBigSur.dmg -noverify -mountpoint /Volumes/MacOSBigSur
attaches and mounts that disk image.

sudo /Applications/Install\ macOS\ Big\ --volume /Volumes/MacOSBigSur --nointeraction
uses the createinstallmedia command within the installer to copy the installer to the disk image, and make it bootable.

hdiutil detach /Volumes/Install macOS Big Sur/
detaches and unmounts the disk image. Note that the volume name has been changed by the previous command.

Details of the createinstallmedia command for Big Sur are given in the Appendix.

Copy that disk image to external storage, and connect that to your Mac before starting it up in Recovery. In the main Recovery window, open Disk Utility, and there ensure that your external disk is accessible before opening that disk image to attach and mount it. You should then see the disk image Install macOS Big Sur (not MacOSBigSur) listed and accessible. You could of course do this in Terminal if you prefer.

Quit Disk Utility and open Terminal, in which the user is root so doesn’t need to use sudo.

To run the installer from its mounted disk image, use a command of the form
/Volumes/Install\ macOS\ Big\ Sur/Install\ macOS\ Big\ --agreetolicense --forcequitapps --nointeraction
Note that this command also has the option --reducedsecurity which can be used to complete the installation at that lower level of security. Full details are given in the Appendix.

This should, after a long pause, start the macOS installer and allow you to install that version of macOS. In some cases, it may be necessary to erase the existing System volume first.

M1 Macs

The snag with using startosinstall on an M1 Mac, even that provided in its own macOS installer, is that it invariably fails with the error
startosinstall is not currently supported in the Recovery OS on Apple Silicon

There are alternatives in the installer app, including InstallAssistant, InstallAssistant_plain and InstallAssistant_springboard, but each of these returns an error that Quartz isn’t available.

It seems that, for the moment at least, the only reliable way to install another version of macOS on an M1 Mac is to put it into DFU mode and perform a restore, which at least sets it back to the firmware, recovery and macOS in the IPSW image.

If you know how to do any of this better, please don’t hesitate to let know.

I’m very grateful to those who have already commented elsewhere pointing me in these directions.


Usage information returned by Install\ macOS\ Big\ -h

Usage: createinstallmedia –volume <path to volume to convert>
–volume, A path to a volume that can be unmounted and erased to create the install media.
–nointeraction, Erase the disk pointed to by volume without prompting for confirmation.
–downloadassets, Download on-demand assets that may be required for installation.
Example: createinstallmedia –volume /Volumes/Untitled
This tool must be run as root.

Usage information returned by Install\ macOS\ Big\ --usage

Usage: startosinstall
–license, prints the user license agreement only.
–agreetolicense, agree to the license you printed with –license.
–rebootdelay, how long to delay the reboot at the end of preparing. This delay is in seconds and has a maximum of 300 (5 minutes).
–pidtosignal, Specify a PID to which to send SIGUSR1 upon completion of the prepare phase. To bypass “rebootdelay” send SIGUSR1 back to startosinstall.
–installpackage, the path of a package (built with productbuild(1)) to install after the OS installation is complete; this option can be specified multiple times.
–eraseinstall, (Requires APFS) Erase all volumes and install to a new one. Optionally specify the name of the new volume with –newvolumename.
–newvolumename, the name of the volume to be created with –eraseinstall.
–preservecontainer, preserves other volumes in your APFS container when using –eraseinstall.
–forcequitapps, on restart applications are forcefully quit. This is the default if no users are logged in.
–usage, prints this message.
–user, an admin user to authorize installation.
–passprompt, collect a password for authorization with an interactive prompt.
–stdinpass, collect a password from stdin without interaction.
–reducedsecurity, configure target volume’s security policy as Reduced Security (will prompt for authorization after reboot).
–cloneuser, Copy account settings for the owner provided with –user when installing to a new volume.
Example: startosinstall