Does Mac OS X support hibernation?

OS X only has only one "sleep" option. You cannot change its name, but to change its behaviour, I use an old version of SmartSleep on a Mac mini (though in the MacBook-like "sleep & hibernate" mode). It works for a mini, though the website only refers to MacBooks.

(SmartSleep was still free when I wrote this in 2009.)

I occasionally get complains about hardware not having been removed properly (but OS X never tells me what hardware, and my Time Machine USB disks seem fine — I should peek into the logs one day, and I assume this is related to OS X, not to SmartSleep).

I've quickly tested SmartSleep's "hibernate only" on that mini (Intel; running 10.5), and it seems to work as well. Doing these tests, I noticed that after the display goes black the power light starts pulsing (like to indicate sleep rather than hibernate) for a few seconds. Maybe it's still writing RAM to disk then. (Until now, I always thought that on my MacBook the pulsing indicated that all was done. But now I think that, whichever sleep mode one is using, one should probably not unplug the power too soon). After a short while, it powers down completely.

In 2006, Macworld explains how to achieve the same without that SmartSleep preference pane. To check the current setup:

pmset -g | grep hibernatemode

According to Macworld's old article the following applies, but be sure to read Lauri's answer that suggests that nowadays only 0, 3 and 25 should be used instead:

  • 0 — Old style sleep mode, with RAM powered on while sleeping, safe sleep disabled, and super-fast wake.
  • 1 — Hibernation mode, with RAM contents written to disk, system totally shut down while “sleeping,” and slower wake up, due to reading the contents of RAM off the hard drive.
  • 3 — The default mode on machines introduced since about fall 2005. RAM is powered on while sleeping, but RAM contents are also written to disk before sleeping. In the event of total power loss, the system enters hibernation mode automatically.
  • 5 — This is the same as mode 1, but it’s for those using secure virtual memory (in System Preferences » Security).
  • 7 — This is the same as mode 3, but it’s for those using secure virtual memory.

And the same numbers can be used to change the sleep mode setting:

sudo pmset -a hibernatemode 1

I wrote a script that will let you enter hibernation immediately (without changing your settings permanently). I find it quite useful, as I like the default settings, but want to forcibly enter hibernation when on the road. Maybe someone else will find it useful too ;-)

#!/bin/bash
 
# Utility to force your mac immediately into hibernation mode/suspend to disk,
# thus conserving battery considerably (at the cost of slower startup)
# @date 2012-02-10
# @author Carl-Erik Kopseng. Contact at oligofren.wordpress.com
 
# must be run as root by using sudo or to avoid entering the password, change the pmset
# executable settings by entering
# sudo chmod +s /usr/bin/pmset
# sudo chmod +s /sbin/shutdown
 
MODE_BACKUP=/tmp/hibernate_mode.bak
SUSPEND_TO_DISK=25 #see man pmset
 
display_settings() {
    echo "Current settings: " $(pmset -g | grep hibernatemode)
}
 
save_settings() {
    echo "saving settings"
    pmset -g | grep hibernatemode | awk '{print $2}' > $MODE_BACKUP
}
 
restore_settings() {
    echo "restoring settings"
    pmset -a hibernatemode $(cat $MODE_BACKUP)
}
 
set_only_disk_hibernate() {
    echo "changing settings to only suspend to disk (slow, but does not use battery)"
    pmset -a hibernatemode $SUSPEND_TO_DISK
}
 
hibernate() {
    echo "going into hibernation"
    shutdown -s now
}
 
save_settings
set_only_disk_hibernate && hibernate
restore_settings

Adding to the Menu Bar

If you want to invoke this script from the Menu Bar ("systray"), I would:

  1. Put this script in a suitable location (like /usr/local/sbin/).
  2. Create an AppleScript that simply invokes this script. Call it "Hibernate"
  3. Add your apple scripts as an icon in the Menu Bar

Now you can trigger the script by clicking the Menu Bar->AppleScripts->Hibernate


The pmset man page also recommends using 25 instead of 1.

0000 1000 (bit 3) encourages the dynamic pager to page out inactive pages prior to hibernation, for a smaller memory footprint.

0001 0000 (bit 4) encourages the dynamic pager to page out more aggressively prior to hibernation, for a smaller memory footprint.

We do not recommend modifying hibernation settings. Any changes you make are not supported. If you choose to do so anyway, we recommend using one of these three set- tings. For your sake and mine, please don't use anything other 0, 3, or 25.

[...]

hibernatemode = 25 (binary 0001 1001) is only settable via pmset. The system will store a copy of memory to persistent storage (the disk), and will remove power to memory. The system will restore from disk image. If you want "hibernation" - slower sleeps, slower wakes, and better battery life, you should use this setting.

Some laptops now enter hibernation (standby mode) after about an hour of normal sleep if:

  • Power Nap is not enabled (so not by default)
  • The computer is on battery power
  • The computer is not connected to USB devices or external displays and not paired with Bluetooth devices

Laptops, Mac minis and iMacs use about 0.2-0.4 W when off or hibernating and 0.8-1.4 W in sleep mode. Hibernation (and the hibernation + sleep mode that laptops use by default) might also reduce the lifespan of drives.