These instructions assume you're using a sparsebundle file in 10.9 because you use an encrypted drive. If not, modify accordingly.
First, follow the instructions in the link below to figure out how to use
security find-generic-password to grab the password to your encrypted drive out of your Keychain programmatically.
Then create a file called
mounter in your local bin directory
~/bin that contains the following code (replace all paths with your paths, and in the
security find-generic-password, use the name of the key in Keychain):
#!/usr/bin/env bash -e
# Check existing states
if [ -e "$SPARSEBUNDLE_MOUNT_PATH" ]; then
echo "Already mounted."
if [ ! -e "$PHYSICAL_DRIVE_PATH" ]; then
echo "Physical drive not attached"
if [ ! -e "$SPARSEBUNDLE_PATH" ]; then
echo "Virtual drive not found on physical drive"
# The mount command uses security find-generic-password
# to get the password from the keychain store
MOUNT_PASSWORD=$(security find-generic-password -w -D "disk image password" -l TimeMachine.sparsebundle)
printf $MOUNT_PASSWORD | hdiutil attach -stdinpass -mountpoint "$SPARSEBUNDLE_MOUNT_PATH" "$SPARSEBUNDLE_PATH"
This is a bit verbose, but means no storing passwords anywhere but keychain. In any case, now we have to get it to run. Create a file in
~/Library/LaunchAgents/com.martorana.dave.mounter.plist and put the following code in it, replacing, of course, the paths with your own paths:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
launchd instead of
cron for a host of reasons, the most important being access to your keychain.
Now load your launch daemon:
launchctl load -w ~/Library/LaunchAgents/com.martoranas.dave.mounter.plist
And that should do it. Now
launchd will run your shell script every 60 seconds, and if not mounted and available, will mount your
sparsebundle disk image.