| @@ -1,5 +1,7 @@ | |||||
| #!/usr/bin/bash | #!/usr/bin/bash | ||||
| DATE=`date +%Y%m%d` | |||||
| usage() | usage() | ||||
| { | { | ||||
| echo "Usage: $0 [ -s hostname ] [ -z UUID ] [ -b backupzone ] [ -i idbackupzone ]" >&2 | echo "Usage: $0 [ -s hostname ] [ -z UUID ] [ -b backupzone ] [ -i idbackupzone ]" >&2 | ||||
| @@ -56,59 +58,111 @@ check_err() | |||||
| check_snap() | check_snap() | ||||
| { | { | ||||
| ZONE=$1 | 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() | create_snap() | ||||
| { | { | ||||
| DS=$1 | DS=$1 | ||||
| echo "Creating snapshot of ${DS}..." | echo "Creating snapshot of ${DS}..." | ||||
| zfs snapshot zones/${DS}@`date +%Y%m%d` | |||||
| zfs snapshot zones/${DS}@${DATE} | |||||
| check_err | check_err | ||||
| echo "done." | echo "done." | ||||
| } | } | ||||
| send_snap () | |||||
| delete_local_snap() | |||||
| { | { | ||||
| DATASET=$1 | 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 | check_err | ||||
| echo "done." | 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 | check_err | ||||
| echo "done." | 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 | check_err | ||||
| echo "done." | 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 | check_err | ||||
| echo "done." | echo "done." | ||||
| } | } | ||||
| # main | # main | ||||
| echo "--- | echo "--- | ||||
| BACKUP_ZONE: ${IDBACKUPZ} | BACKUP_ZONE: ${IDBACKUPZ} | ||||
| BACKUP_ZONE_IP: ${BACKUPZ} | BACKUP_ZONE_IP: ${BACKUPZ} | ||||
| UUID to backup: ${UUID} | UUID to backup: ${UUID} | ||||
| DATE of backup: ${DATE} | |||||
| ---" | ---" | ||||
| check_snap ${UUID} | check_snap ${UUID} | ||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||
| echo "There is no snapshot available of ${UUID}" | |||||
| create_snap ${UUID} | create_snap ${UUID} | ||||
| else | else | ||||
| echo "Snapshot of ${UUID} already available" | echo "Snapshot of ${UUID} already available" | ||||
| echo "done." | echo "done." | ||||
| fi | 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} | 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 | # we check this UUID for additional datasets | ||||
| echo "Looking for addtional children datasets in ${UUID}..." | echo "Looking for addtional children datasets in ${UUID}..." | ||||