1週間分+αのバックアップをしてくれるシェルスクリプトです。
昔使ってたヤツですが動作保証ナイデス。
daily_backup.sh
# !/bin/bash
# bkuprootには外付けHDDなどのマウントディレクトリを、backuptoにはblkidなどで調べた外付けHDDのUIDを指定
bkupdir=`date +%y%m%d`
bkuproot="/tmp/backup"
bkupto="-U qiitadot-com0-15rs-23yn-c1567bk2788a"
mkdir -p $bkuproot
# unmount for safe
umount /mnt 2>&1 > /dev/null
umount $bkuproot 2>&1 > /dev/null
# mount backup drive
mount $bkupto $bkuproot || exit 1
# 日曜日には過去一週間以前のデータを消す
if [ 0 -eq `date +%w` ]; then
# 最新7つ以外は削除
declare -a backups=(`ls -1t $bkuproot`)
backups=("${backups[@]:7}")
for x in ${backups[@]}; do rm -rf $x; done
# 最新のバックアップを新しいフルバックアップとして扱う
newroot=`ls -1t $bkuproot | head -1`
if [ -d $bkuproot/root -a "root" != $newroot ]; then
rm -rf $bkuproot/root
mv $bkuproot/$newroot $bkuproot/root
fi
fi
# フルバックアップがまだならフルバックアップを、済みなら差分を
# /, /home, /rootが別パーティションである場合…
mount -r --bind / /mnt
if [ -d $bkuproot/root ]; then
rsync -av --delete --link-dest=$bkuproot/root /mnt/ $bkuproot/$bkupdir
rsync -av --delete --link-dest=$bkuproot/root/home /home/ $bkuproot/$bkupdir/home/
rsync -av --delete --link-dest=$bkuproot/root/boot /boot/ $bkuproot/$bkupdir/boot/
else
rsync -av /mnt/ $bkuproot/root
rsync -av /home/ $bkuproot/root/home/
rsync -av /boot/ $bkuproot/root/boot/
fi
umount /mnt
# バックアップ終わり、接続解除
umount $bkuproot
rmdir $bkuproot
新規/更新ファイルは普通にコピー、バックアップ済ファイルはハードリンクで省スペース設計な感じ。
バックアップ先を
daily_backup.sh
rsync -av --delete \
--link-dest=$bkuproot/root /mnt/ $bkuproot/$bkupdir
ではなく
daily_backup.sh
rsync -av --delete \
--link-dest=$bkuproot/root /mnt/ $bkuproot/daily/$bkupdir
とかにしとけば
hourly_backup.sh
rsync -av --delete \
--link-dest=$bkuproot/root /mnt/ $bkuproot/hourly/$bkupdir
とかに設定したヤツと共存出来るかもデスね。
Mac OS XのTime Machineみたい。