| @@ -1,5 +1,7 @@ | |||
| #!/usr/bin/bash | |||
| DATE=`date +%Y%m%d` | |||
| usage() | |||
| { | |||
| echo "Usage: $0 [ -s hostname ] [ -z UUID ] [ -b backupzone ] [ -i idbackupzone ]" >&2 | |||
| @@ -56,59 +58,111 @@ check_err() | |||
| check_snap() | |||
| { | |||
| ZONE=$1 | |||
| echo "Checking for snapshot of ${ZONE}..." | |||
| zfs list -t snapshot zones/${ZONE}@`date +%Y%m%d` 2>/dev/null 1>&2 | |||
| echo "Checking for local snapshot of ${ZONE}..." | |||
| zfs list -t snapshot zones/${ZONE}@${DATE} 2>/dev/null 1>&2 | |||
| } | |||
| check_remote_snap() | |||
| { | |||
| DATASET=$1 | |||
| echo "Checking for an existing remote snapshot of ${DATASET}..." | |||
| ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs list zones/${IDBACKUPZ}/data/${SOURCEGZ}/${DATASET}@${DATE} 2>/dev/null 1>&2 | |||
| } | |||
| check_remote_dataset() | |||
| { | |||
| DATASET=$1 | |||
| echo "Checking for an existing remote dataset of ${DATASET}..." | |||
| ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs list zones/${IDBACKUPZ}/data/${SOURCEGZ}/${DATASET} 2>/dev/null 1>&2 | |||
| } | |||
| create_snap() | |||
| { | |||
| DS=$1 | |||
| echo "Creating snapshot of ${DS}..." | |||
| zfs snapshot zones/${DS}@`date +%Y%m%d` | |||
| zfs snapshot zones/${DS}@${DATE} | |||
| check_err | |||
| echo "done." | |||
| } | |||
| send_snap () | |||
| delete_local_snap() | |||
| { | |||
| DATASET=$1 | |||
| echo "Deleting dataset ${DATASET} on ${BACKUPZ}..." | |||
| ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs destroy -r zones/${IDBACKUPZ}/data/${SOURCEGZ}/${DATASET} | |||
| echo "Deleting local snapshot zones/${DATASET}@${DATE}..." | |||
| zfs destroy zones/${DATASET}@${DATE} | |||
| check_err | |||
| echo "done." | |||
| echo "Sending snapshot to ${BACKUPZ}..." | |||
| zfs send zones/${DATASET}@`date +%Y%m%d` | ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs receive -F zones/${IDBACKUPZ}/data/${SOURCEGZ}/${DATASET} | |||
| } | |||
| delete_remote_dataset() | |||
| { | |||
| DATASET=$1 | |||
| echo "Deleting remote dataset ${DATASET} on ${BACKUPZ}..." | |||
| ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs destroy -r zones/${IDBACKUPZ}/data/${SOURCEGZ}/${DATASET} 2>/dev/null 1>&2 | |||
| check_err | |||
| echo "done." | |||
| echo "Deleting snapshot on ${BACKUPZ}..." | |||
| ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs destroy zones/${IDBACKUPZ}/data/${SOURCEGZ}/${DATASET}@`date +%Y%m%d` | |||
| } | |||
| delete_remote_snap() | |||
| { | |||
| DATASET=$1 | |||
| echo "Deleting remote snapshot zones/${DATASET}@${DATE} on ${BACKUPZ}..." | |||
| ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs destroy -r zones/${IDBACKUPZ}/data/${SOURCEGZ}/${DATASET}@${DATE} 2>/dev/null 1>&2 | |||
| check_err | |||
| echo "done." | |||
| echo "deleting local snapshot zones/${DATASET}@`date +%Y%m%d`..." | |||
| zfs destroy zones/${DATASET}@`date +%Y%m%d` | |||
| } | |||
| send_snap () | |||
| { | |||
| DATASET=$1 | |||
| echo "Sending snapshot to ${BACKUPZ}..." | |||
| zfs send zones/${DATASET}@${DATE} | ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs receive -F zones/${IDBACKUPZ}/data/${SOURCEGZ}/${DATASET} | |||
| check_err | |||
| echo "done." | |||
| } | |||
| # main | |||
| echo "--- | |||
| BACKUP_ZONE: ${IDBACKUPZ} | |||
| BACKUP_ZONE_IP: ${BACKUPZ} | |||
| UUID to backup: ${UUID} | |||
| DATE of backup: ${DATE} | |||
| ---" | |||
| check_snap ${UUID} | |||
| if [ $? -ne 0 ]; then | |||
| echo "There is no snapshot available of ${UUID}" | |||
| create_snap ${UUID} | |||
| else | |||
| echo "Snapshot of ${UUID} already available" | |||
| echo "done." | |||
| fi | |||
| check_remote_dataset ${UUID} | |||
| if [ $? -eq 0 ]; then | |||
| delete_remote_dataset ${UUID} | |||
| else | |||
| echo "There is no remote dataset of ${UUID}" | |||
| echo "done." | |||
| fi | |||
| send_snap ${UUID} | |||
| check_remote_snap ${UUID} | |||
| if [ $? -eq 0 ]; then | |||
| delete_remote_snap ${UUID} | |||
| else | |||
| echo "There is no remote snapshot of ${UUID}" | |||
| echo "done." | |||
| fi | |||
| check_snap ${UUID} | |||
| if [ $? -eq 0 ]; then | |||
| delete_local_snap ${UUID} | |||
| fi | |||
| # we check this UUID for additional datasets | |||
| echo "Looking for addtional children datasets in ${UUID}..." | |||