zfs-backup.sh
zfsのスナップショット機能を使って定期的なバックアップをやろうかと思って以下のようなスクリプトを書いてみた。
でも、これだと永遠に差分を取っていくしかできないので、ある程度溜まるとスナップショットが大きくなるし、そもそもrollbackが大変になる。
だから定期的にスナップショットを破棄して普通の差分ではないスナップショットを取り直すことがしたいんだけど、一般ユーザ権限ではスナップショットの破棄(zfs destroy)ができない。最新のバージョンで要確認だけどね。
というわけで不完全だけど、とりあえず記録ということで載せておく。
#!/usr/bin/env sh TARGET="zpool_lo/home" BACKUP_HOST="backup.example.org" BACKUP_PATH="zfs_snapshots/" BACKUP_PREFIX="zfs-home-" BACKUP_SUFFIX=".zfssnap" ## Option FORMAT="+%Y%m%d" ## Main part LAST_SNAP=`zfs list -H -t snapshot | cut -f1 | tail -1` DATE=`date $FORMAT` SNAPSHOT_NAME="$TARGET@$DATE" echo "zfs snapshot $SNAPSHOT_NAME" zfs snapshot $SNAPSHOT_NAME SSH_SEND="ssh $BACKUP_HOST \"\"cat > $BACKUP_PATH$BACKUP_PREFIX$DATE$BACKUP_SUFFIX\"\"" if [ -z $LAST_SNAP ]; then echo "zfs send $SNAPSHOT_NAME | $SSH_SEND" # zfs send $SNAPSHOT_NAME | $SSH_SEND else # Incremental send echo "zfs send -i $LAST_SNAP $SNAPSHOT_NAME | $SSH_SEND" zfs send -i $LAST_SNAP $SNAPSHOT_NAME | $SSH_SEND fi