rsyncとlaunchctlでバックアップ

理由:Time Machineが信用ならないから。アクセス制限がかかっちゃって戻すの大変だったから。

ということで、Time Machineは使うのやめて、自前でバックアップするようにしました。 基本、ホームディレクトリをバックアップできればいいので、そんなには難しくはないのかなって。 データはWindowsマシンで二重バックアップしているし。

備忘録がてらこのエントリーを書いているので、主に結果を記す程度になるかとは思うんですけど、ちょっと箇条書きしてみますと、

ホームディレクトリは/Users/padmacolors/で、要は~/padmacolors/であります。

  • ホームディレクトリーをバックアップする(rsyncをつかう)
  • 時間を決めてバックアップする(launchctlをつかう)
  • バックアップ先は外付ハードディスクに
  • バックアップログが欲しい

こんな感じ。 とりあえずは外付ハードディスクにフォルダを作る。 外付けハードディスクのパスは /Volumes/Backup/ であります。

  • /Volumes/Backup/Backup/
  • /Volumes/Backup/Backup_Logs/

Backupフォルダはホームディレクトリのコピーがまるっと置かれるところ。 Backup_Logsは、バックアップログを置いたり、あれこれファイルを置くところで、

  • /Volumes/Backup/Backup_Logs/backup.sh
  • /Volumes/Backup/Backup_Logs/logs/
  • /Volumes/Backup/Backup_Logs/org.padmacolors.backup.plist

こういう構成。 logsフォルダはバックアップログを置くところで、それ以外の2ファイルは、前者がバックアップを行う・・・rsyncを使って・・・bashファイルで、後者はlaunchctlを使って決まった時間に前者を起動する(開く)プロパティリストファイル。 org.padmacolorsじゃなくてもいいので適宜書き換えるがいいさ!

何はともあれrsyncで何をさせるかなんですけど、こういうふうに書きました。 backup.shの中身はこれだけです。

#!/bin/bash

{
rsync -av –exclude=’Library/Caches’ –exclude=’Library/Developer’ –exclude=’Library/Application Support’ /Users/padmacolors/ /Volumes/Backup/Backup

} >> “/Volumes/Backup/Backup_Logs/logs/`date +%Y%m%d%H%M%S`.log” 2>&1

先に「ホームディレクトリをまるっとコピー」って書きましたが、実際にはホームディレクトリの中の、ライブラリフォルダの中のいくつかのフォルダは対象外としています。 CachesもDeveloperもApplication Supportも、ちょーファイルがあるわりにはバックアップしなくてもいいですから。 当初はこれらもバックアップしていたんですけど、時間はかかるわログファイルがデカくなるわで大変だったので。

ここでとりあえずテストしてみればいいです。

bash /Volumes/Backup/Backup_Logs/backup.sh

なんてして実際にバックアップします。 問題なければ次にlaunchctlを使って定期的なバックアップを行います。 org.padmacolors.backup.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>org.padmacolors.backup</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Volumes/Backup/Backup_Logs/backup.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key>
<integer>5</integer>
<key>Hour</key>
<integer>6</integer>
</dict>
</dict>
</plist>

毎日06:05にバックアップを開始(backup.shを開く)ようにします。 もしこの時間にスリープしてたら悲しいので、システム環境設定の省エネルギーで06:00に「起動またはスリープ解除」するようにします(あたりまえだけどスリープ開始まで5分以内だと無意味なので、設定するならこれ以上にしておくこと)。

で、org.padmacolors.backup.plistを所定のフォルダに置くのですけど、シンボリックリンクにしておけば後で書きなおす時に便利です。

ln -s /Volumes/Backup/Backup_Logs/org.padmacolors.backup.plist /Users/padmacolors/Library/LaunchAgents

要はユーザーライブラリフォルダのLaunchAgentsに入れるわけです。 そしてロードして準備します。

launchctl load -w /Users/padmacolors/Library/LaunchAgents/org.padmacolors.backup.plist

これで準備完了。 launchctl listしてみてorg.padmacolors.backupがあるかどうか確認して、朝6時に動作確認しますです。

launchctlの設定に関してパーミッションを変更することは今回、なかったと思います。