Como soy súper paranoico con la seguridad, configuro mi MacBook para que esté siempre en "reposo seguro" y destruya su clave FileVault al entrar en reposo:
$ sudo pmset -a hibernatemode 25 DestroyFVKeyOnStandby 1
Como se explica en pmset(1) :
hibernatemode = 25 (binario 0001 1001) sólo se puede configurar a través de pmset. El sistema guardará una copia de la memoria en el almacenamiento persistente (el disco), y quitará la energía a la memoria. El sistema restaurará desde la imagen del disco. Si desea una "hibernación", es decir, un sueño más lento, un despertar más lento y una mejor duración de la batería, debe utilizar esta configuración.
y:
destroyfvkeyonstandby - Destruye la Clave de Bóveda de Archivos al pasar al modo de espera. Por defecto, las claves del almacén de archivos se conservan incluso cuando el sistema pasa al modo de espera. Si se destruyen las claves, el usuario deberá introducir la contraseña al salir del modo de espera (valor: 1 - Destruir, 0 - Conservar)
En consecuencia, cuando la máquina se despierta del sueño hay que:
- primero desbloquear FileVault en una pantalla de bloqueo EFI; y luego
- desbloquear OS X en una ventana de inicio de sesión.
Históricamente, había un retraso comprensible entre estos dos pasos, ya que OS X tiene que restaurar desde la imagen de disco (copiando el archivo de hibernación en la RAM) antes de poder hacer cualquier otra cosa. Mientras esto ocurría, la pantalla mostraba la ventana de inicio de sesión superpuesta por una cubierta semitransparente junto con una barra de progreso.
Sin embargo, ya no veo ningún retraso entre los pasos 1 y 2. Parece que OS X es capaz de reanudar casi tan pronto como FileVault se desbloquea, lo que me sugiere que la energía puede no haber sido eliminada de la RAM como prometió hibernatemode 25.
¿Qué ocurre? ¿Ha encontrado Apple, como sugieren los registros de abajo, alguna forma mágica de restaurar gigabytes de RAM desde la imagen de disco de forma imperiosamente rápida (y, de ser así, no preferiría todo usuario de portátil entrar en "reposo seguro", quizá sin destruir las claves de FileVault, en lugar de mantener la RAM encendida y gastar batería)? O, más probablemente (?), ¿mi MacBook ya no entra realmente en "suspensión segura"? Si es esto último, por qué -y cómo puedo solucionarlo?
$ sw\_vers
ProductName: Mac OS X
ProductVersion: 10.11.3
BuildVersion: 15D21
$ pmset -g
System-wide power settings:
SleepDisabled 0
DestroyFVKeyOnStandby 1
Active Profiles:
Battery Power -1
AC Power -1\*
Currently in use:
standbydelay 10800
standby 1
womp 0
halfdim 1
hibernatefile /var/vm/sleepimage
powernap 0
gpuswitch 2
networkoversleep 0
disksleep 10
sleep 1
autopoweroffdelay 14400
hibernatemode 25
autopoweroff 0
ttyskeepawake 1
displaysleep 10
acwake 0
lidwake 1
$ cat /var/log/system.log
Feb 5 01:19:35 eggyal PowerChime\[622\]: 53728.262434: GOING TO SLEEP: kStateDarkWake -> kStateAsleep
Feb 5 01:19:35 eggyal PowerChime\[622\]: 53728.262821: Calling goingToSleepBlock
Feb 5 01:19:38 eggyal kernel\[0\]: PM response took 3072 ms (57, powerd)
Feb 5 01:19:38 eggyal kernel\[0\]: AppleCamIn::systemWakeCall - messageType = 0xE0000280
Feb 5 01:19:38 eggyal kernel\[0\]: AppleCamIn::systemWakeCall - messageType = 0xE0000340
Feb 5 01:19:38 eggyal kernel\[0\]: kern\_open\_file\_for\_direct\_io(0)
Feb 5 01:19:38 eggyal kernel\[0\]: kern\_open\_file\_for\_direct\_io took 24 ms
Feb 5 01:19:38 eggyal kernel\[0\]: Opened file /var/log/SleepWakeStacks.bin, size 172032, extents 1, maxio 40000 ssd 1
Feb 5 01:19:38 eggyal kernel\[0\]: polled file major 1, minor 0, blocksize 4096, pollers 3
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate image path: /var/vm/sleepimage
Feb 5 07:52:38 eggyal kernel\[0\]: efi pagecount 72
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_page\_list\_setall(preflight 1) start
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_page\_list\_setall time: 292 ms
Feb 5 07:52:38 eggyal kernel\[0\]: pages 1229108, wire 262730, act 464069, inact 1872, cleaned 0 spec 10, zf 3948, throt 0, compr 155445, xpmapped 40000
Feb 5 07:52:38 eggyal kernel\[0\]: could discard act 169997 inact 38206 purgeable 85433 spec 47398 cleaned 0
Feb 5 07:52:38 eggyal kernel\[0\]: WARNING: hibernate\_page\_list\_setall skipped 10768 xpmapped pages
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_page\_list\_setall preflight pageCount 262730 est comp 39 setfile 491782144 min 1073741824
Feb 5 07:52:38 eggyal kernel\[0\]: kern\_open\_file\_for\_direct\_io(0)
Feb 5 07:52:38 eggyal kernel\[0\]: kern\_open\_file\_for\_direct\_io took 21 ms
Feb 5 07:52:38 eggyal kernel\[0\]: Opened file /var/vm/sleepimage, size 1073741824, extents 2, maxio 40000 ssd 1
Feb 5 07:52:38 eggyal kernel\[0\]: polled file major 1, minor 0, blocksize 4096, pollers 3
Feb 5 07:52:38 eggyal kernel\[0\]: vm\_compressor\_record\_warmup (29246 - 32193)
Feb 5 07:52:38 eggyal kernel\[0\]: vm\_compressor\_flush - starting
Feb 5 07:52:38 eggyal kernel\[0\]: vm\_compressor\_flush completed - took 7834 msecs
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_flush\_memory: buffer\_cache\_gc freed up 13242 wired pages
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_alloc\_pages act 261470, inact 39096, anon 11567, throt 0, spec 47402, wire 274180, wireinit 32085
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_setup(0) took 9624 ms
Feb 5 07:52:38 eggyal kernel\[0\]: AppleCamIn::systemWakeCall - messageType = 0xE0000340
Feb 5 01:19:49 eggyal kernel\[0\]: hibernate\_page\_list\_setall(preflight 0) start
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_teardown started
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_teardown: wired\_pages 274183, free\_pages 1766704, active\_pages 40000, inactive\_pages 0, speculative\_pages 0, cleaned\_pages 0, compressor\_pages 80
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_teardown\_pmap\_structs done: last\_valid\_compact\_indx 181266
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_teardown: mark\_as\_unneeded\_pages 2048, 26515, 18518
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_teardown completed - discarded 47081
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_page\_list\_setall time: 649 ms
Feb 5 07:52:38 eggyal kernel\[0\]: pages 550280, wire 202232, act 40000, inact 0, cleaned 0 spec 0, zf 0, throt 0, compr 80, xpmapped 40000
Feb 5 07:52:38 eggyal kernel\[0\]: did discard act 136037 inact 39096 purgeable 85433 spec 47402 cleaned 0
Feb 5 07:52:38 eggyal kernel\[0\]: WARNING: hibernate\_page\_list\_setall skipped 16430 xpmapped pages
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_page\_list\_setall found pageCount 242312
Feb 5 07:52:38 eggyal kernel\[0\]: IOHibernatePollerOpen, ml\_get\_interrupts\_enabled 0
Feb 5 07:52:38 eggyal kernel\[0\]: IOHibernatePollerOpen(0)
Feb 5 07:52:38 eggyal kernel\[0\]: encryptStart 14010
Feb 5 07:52:38 eggyal kernel\[0\]: bitmap\_size 0x3f444, previewSize 0x4028, writing 241958 pages @ 0x5747c
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_rebuild started
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_rebuild\_pmap\_structs done: last\_valid\_compact\_indx 181266
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_rebuild completed - took 51 msecs
Feb 5 07:52:38 eggyal kernel\[0\]: booter start at 1073 ms smc 0 ms, \[17, 0, 0\] total 16393 ms, dsply 0, 0 ms, tramp 544 ms
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_machine\_init: state 2, image pages 202019, sum was be127fc2, imageSize 0x17cb5000, image1Size 0xecb6000, conflictCount 2498, nextFree acf
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_newruntime\_map time: 0 ms, IOPolledFilePollersOpen(), ml\_get\_interrupts\_enabled 0
Feb 5 07:52:38 eggyal kernel\[0\]: IOPolledFilePollersOpen(0) 1 ms
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_machine\_init reading
Feb 5 07:52:38 eggyal kernel\[0\]: PMStats: Hibernate read took 281 ms
Feb 5 07:52:38 eggyal kernel\[0\]: hibernate\_machine\_init pagesDone 242099 sum2 91d0cb87, time: 281 ms, disk(0x20000) 512 Mb/s, comp bytes: 47316992 time: 36 ms 1232 Mb/s, crypt bytes: 150990848 time: 38 ms 3702 Mb/s