Time MachineでSDカードをバックアップできないのでやったこと
最近、MacBook ProのSSDの残容量が気になってきたので、iTunesやiPhotoのライブラリをSDカードに移すことにしました。
使ったのは手元にあったSandisk Extreme SDHC 32GB HD Video Class10 45MB/s x300 UHS-1です。XBenchで性能見てみると、読み書きとも手持ちのUSB2.0接続のポータブルハードディスクより早いので、普通に便利に使えそうな予感。
まずはSDHCカードをMacOS拡張(ジャーナリング)形式でフォーマット。
つぎにTime Machineのバックアップ候補に入れる(バックアップ除外対象から消す)。。。と、ここで問題が発生。なぜか、バックアップ除外対象の欄から消せません。(消しても反映されず、勝手に戻ってしまう。)
ぐぐってみると、LionとMountain Lionのユーザが結構同じ問題に遭遇して、結局解決できずじまいみたい。
→ Can't backup flash drive to Time Machine
しょうがないので、Time Machineは一旦諦めて、別の方法でバックアップすることにしました。
採用したのは、MacOSXの機構であるlaunchdでSDカードのパス内の変更とファイルシステムのマウントを検知し、rsyncで差分コピーさせる方法です。
以下、設定方法の説明です。(usernameとか環境依存の部分は適宜読み替えてね!)
1. まず /Users/username/Library/LaunchAgents/ に com.conovare.backup_sd.plist という名前で次のようなファイルを作成。
<?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">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.conovare.backup_sd</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Users/username/Library/LaunchAgents/com.conovare.backup_sd/backup.sh</string>
</array>
<key>StandardErrorPath</key>
<string>/dev/null</string>
<key>StandardOutPath</key>
<string>/dev/null</string>
<key>WatchPaths</key>
<array>
<string>/Volumes/SDHC-32G/</string>
</array>
<key>StartOnMount</key>
<true/>
</dict>
</plist>
2. 次に、上のファイル内で指定した /Users/username/Library/LaunchAgents/com.conovare.backup_sd/backup.sh というファイルを作成し、次のような内容に。
#!/bin/sh
TARGET="/Volumes/SDHC-32G/User/"
DEST="/Volumes/BACKUP/rsync/SDHC-32G/User/"if [ -d "${DEST}" ];
then
if [ -d "${TARGET}" ];
then
rsync -av --delete ${TARGET} ${DEST}
else
echo "${TARGET} directory does not exist."
fi
else
echo "${DEST} directory does not exist."
fi
3. 以下のコマンドを実行。(またはシステムを再起動。)
launchctl load /Users/username/Library/LaunchAgents/com.conovare.backup_sd.plist
Time Machineと違って世代バックアップではない点は留意して運用する必要がありますが、僕の経験上は、SDカードのファイルに異常が起こる時は、特定のファイルが壊れるとかでなく、突如一切なにも読めなくなることが多いのではないかと思うので、その保険にはなるでしょう。
なお、ちょっとだけ副作用がありまして、SDカードの取り出しをしようとするとファイル使用中である旨の警告が出て、強制取り外ししかできないようになります。まぁ、Mac用にフォーマットしてる時点で、ほぼ差しっぱなし運用が前提なので、よしとしましょうか。
-
- -
参考
- LaunchDaemons (launchctl, launchd.plist) の使い方 - maruko2 Note.
- man launchd.plist