恥ずかしながら、自宅サーバーのバックアップをまじめにとるぞ!とやっと思い立ちまして、以下のような手順でやることにしました。
UPDATE!!!
こちらもご覧下さい。
- 遅ればせながらFedora 18にした、ら、backupに失敗するようになった。:http://journal.soffritto.org/entry/524
time capsule のマウント
mount -t cifs -o pass='mypassword' //my_time_capsule.local/share /media/timecapsule
うちの Time Capsule は「装置パスワード」の設定にしていたので、こんな感じにパスワードを指定してマウントしました。
バックアップディスクの作成
Time Capsule を cifs でマウントして、そこにディレクトリを切って直接 rsync してバックアップしようとしたんですが、そうすると cifs の制限で symlink がつくれないとか chown できないとか問題があるようなのであきらめ。 Time Machine でやってるのと同じ感じで Time Capsule 内にディスクイメージを作って、それをマウントしてバックアップすることにしました。
cd /media/timecapsule
dd if=/dev/zero of=backup.img bs=1M count=10K
losetup /dev/loop0 backup.img
mkfs.ext4 /dev/loop0
losetup -d /dev/loop0
これで backup.img に ext4 のファイルシステムができたので、以下のようにすればマウントできます。
mount -o loop /media/timecapsule/backup.img /mnt/backup/
バックアップ
あとは http://d.hatena.ne.jp/dayflower/20090513/1242194477 を参考にスクリプトを書いてやればオッケー。若干バカっぽいですが気にしないでください。これを /etc/cron.daily/backup に置いて、一日一度バックアップをとってみます。うまくいくかなぁ。
#!/bin/sh
media_dir=/media/timecapsule
image_name=backup.img
backup_dir=/mnt/backup/
target='home var etc'
gens=4
date=`date +%Y%m%d%H%M%S`
mount -t cifs -o pass='mypassword' //my_time_capsule.local/share $media_dir
mount -o loop "$media_dir/$image_name" $backup_dir
backup_count=`/bin/ls -1t $backup_dir|grep -v 'lost+found'|wc -l`
if [ $backup_count -eq 0 ]
then
for d in $target
do
mkdir -p $backup_dir/$date/$d/
rsync -av /$d/ $backup_dir/$date/$d/
done
else
if [ $backup_count -gt $gens ]
then
rm_count=`expr $backup_count - $gens + 1`
for rm_dir in `/bin/ls -1t $backup_dir|grep -v 'lost+found'|tail -n$rm_count`
do
/bin/rm -rf $backup_dir/$rm_dir
done
fi
link_dest=`/bin/ls -1t $backup_dir|grep -v 'lost+found'|head -n1`
for d in $target
do
mkdir -p $backup_dir/$date/$d/
rsync -av --delete --link-dest=../../$link_dest/$d /$d/ $backup_dir/$date/$d/
done
fi
umount $backup_dir
umount $media_dir