diff --git a/zonebackuptozone.sh b/zonebackuptozone.sh old mode 100644 new mode 100755 index 652ea02..5bb5b8a --- a/zonebackuptozone.sh +++ b/zonebackuptozone.sh @@ -6,29 +6,6 @@ usage() exit 1 } -check_err() -{ - STATUS=$? - if [ ${STATUS} -ne 0 ]; then - echo "Unexpected error: ${STATUS}" - exit ${STATUS} - fi -} - -check_snap() -{ - ZONE=$1 - zfs list -t snapshot zones/${ZONE}@`date +%Y%m%d` 2&>/dev/null 1>&2 -} - -create_snap() -{ - ZONE=$1 - echo "Creating snapshot of ${ZONE}..." - zfs snapshot zones/${ZONE}@`date +%Y%m%d` - check_err - echo "done." -} while getopts ":s:z:b:i:" opt; do @@ -65,8 +42,46 @@ if [ -z ${SOURCEGZ} ] || [ -z "${UUID}" ] || [ -z ${BACKUPZ} ] || [ -z ${IDBACKU usage fi -echo "Checking for snapshot of ${UUID}" +# functions + +check_err() +{ + STATUS=$? + if [ ${STATUS} -ne 0 ]; then + echo "Unexpected error: ${STATUS}" + exit ${STATUS} + fi +} + +check_snap() +{ + ZONE=$1 + echo "Checking for snapshot of ${UUID}" + zfs list -t snapshot zones/${ZONE}@`date +%Y%m%d` 2&>/dev/null 1>&2 +} + +create_snap() +{ + DS=$1 + echo "Creating snapshot of ${DS}..." + zfs snapshot zones/${DS}@`date +%Y%m%d` + check_err + echo "done." +} + +send_snap () +{ + DATASET=$1 + echo "Sending snapshot to ${BACKUPZ}..." + zfs send zones/${DATASET}@`date +%Y%m%d` | ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs receive zones/${IDBACKUPZ}/data/${SOURCEGZ}/${DATASET} + check_err + echo "done." +} + +# main + check_snap ${UUID} + if [ $? -ne 0 ]; then create_snap ${UUID} else @@ -74,10 +89,27 @@ else echo "done." fi -echo "Sending snapshot to ${BACKUPZ}..." -zfs send zones/${UUID}@`date +%Y%m%d` | ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs receive zones/${IDBACKUPZ}/data/${SOURCEGZ}/${UUID} -check_err -echo "done." +send_snap ${UUID} + +# we check this UUID for additional datasets + +echo "Look for addtional datasets..." +DATASET=`vmadm get ${UUID} | json datasets.0 | tr -d '\n'` + +if [ -n "${DATASET}" ]; then + check_snap ${DATASET} +fi + +if [ $? -ne 0 ]; then + create_snap ${DATASET} +else + echo "Snapshot of ${DATASET} already available..." + echo "done." +fi + +send_snap ${DATASET} + +# we send the config echo "Sending config to ${BACKUPZ}..." zonecfg -z ${UUID} export | ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ "cat >/data/${SOURCEGZ}/${UUID}.cfg"