Después de más de dos años de uso, tenía pendiente hacerle una mejora al MacBook Pro: ponerle un disco SSD. No es que fuera mal el equipo, pero desde hace bastantes meses no oigo otra cosa más que maravillas de estos discos y, en cualquier caso, era algo que tenía planeado desde el principio para cuando venciera el periodo de garantía del Mac.

Mi idea inicial era poner un disco "pequeño" (unos 128GB) de arranque del sistema y mantener el disco magnético como "disco de datos". Para ello, venden unos adaptadores que te permiten convertir en externa la unidad Superdrive. Al quitarla, se libera el espacio necesario para introducir un segundo disco.

Sin embargo, gracias a que en tecnología las cosas siempre bajan de precio, o bien puedes adquirir más prestaciones por el mismo precio (lo que son las dos caras de la misma moneda), me he decidido por un único disco de 500GB.

El SSD va volando, como ya os podíais imaginar. Las aplicaciones arrancan prácticamente al hacer clic en el icono. El tiempo de arranque también ha mejorado muchísimo. Y otro de los cambios que he podido hacer ha sido cambiar la política de suspensión/hibernación.

Por defecto el sistema suspendía en lo que llaman "modo 2", que es algo así como que hace un volcado a disco de la memoria y se reduce al mínimo el consumo de energía, pero sin quitar la alimentación de la memoria. De esa manera, al levantar la tapa, el equipo responde instantáneamente, a costa de consumir batería mientras está suspendido. El volcado a disco sirve para poder recuperar el sistema en caso de que la batería se agote.

Como ahora el disco va tan rápido, recuperar el volcado de memoria desde el disco es casi instantáneo, por lo que he configurado la suspensión en "modo 3". Esto es, se vuelca la memoria a disco y el equipo se apaga. De esta manera, mientras está suspendido no consume batería (o, mejor dicho, consume mucho menos que si tuviera que mantener la memoria alimentada).

¿Y cuál es la relación de toda esta chapa con el título del post? ¿Estás vacilando de SSD o qué? Pues no, la verdad. Todo esto viene a que, como ahora el equipo es "apaga", las unidades de disco se desmontan. Y, si no hacemos nada para evitarlo, como desmontarlas antes de suspender el equipo, al volver obtendremos el clásico aviso de que hemos desenchufado la unidad sin expulsarla. Como comprenderéis, menudo rollo si tenemos que andar expulsando todas las unidades antes de cerrar la tapa del Mac; le quita toda la gracia al invento. Lo suyo es que las unidades se autodesmontaran al cerrar la tapa y se automontaran al abrirla.

Incomprensiblemente el sistema operativo no tiene este comportamiento por defecto. Pero, como siempre, gracias a la comunidad, y al "concepto UNIX" que subyace bajo OSX, podemos conseguir que esto ocurra.

Lo primero será descargar e instalar la utilidad SleepWatcher de Bernard Baehr. Para instalarla, tendremos que copiar el ejecutable, la página de ayuda y añadirla a la lista de programas que se lanzan en el arranque. En la documentación del programa se nos indica cómo proceder para instalarlo. Básicamente son estos pasos (suponiendo que hayamos descargado y descomprimido SleepWatcher en el directorio Downloads):

sudo mkdir -p /usr/local/sbin /usr/local/share/man/man8

sudo cp ~/Downloads/sleepwatcher_2.2/sleepwatcher /usr/local/sbin

sudo cp ~/Downloads/sleepwatcher_2.2/sleepwatcher.8 /usr/local/share/man/man8

sudo mv ~/Downloads/sleepwatcher_2.2/config/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist

sudo chown root ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist

sudo chmod 644 ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist

sudo launchctl load ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist

Si hacemos esto, conseguiremos que, al suspender el equipo, se lance el script .sleep situado en nuestro directorio home. Y, al volver de la suspensión, se lance el script .wakeup, situado también en nuestro home. Por tanto, vamos a ver cuál debe ser el contenido de esos dos scripts:

.sleep

#!/bin/sh

/usr/sbin/diskutil list | grep -e 'disk[1-9]s.*' | sed 's/.*\(disk[0-9].*\)/\1/' | xargs -I{} /usr/sbin/diskutil eject {}

.wakeup

#!/bin/sh

sleep 5

/usr/sbin/diskutil list | grep -e ' \+[0-9]\+: \+[^ ]\+ [^ ]\+' | sed 's/.*\(disk[0-9].*\)/\1/' | xargs -I{} /usr/sbin/diskutil mount {}

De esta forma, puedo tener las unidades externas conectadas (especialmente en casa, donde tengo la de Time Machine y la de datos siempre enchufadas a través de un Hub USB 3.0) y no preocuparme de cuando abro o cierro la tapa del ordenador.

El siguiente paso es pulir el script wakeup para que no se monten las particiones ocultas, en mi caso, EFI y Recovery.

Referencias: