#!/usr/bin/bash usage() { echo "Usage: $0 [ -s hostname ] [ -z UUID ] [ -b backupzone ] [ -i idbackupzone ]" >&2 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 case "$opt" in s) SOURCEGZ=$OPTARG ;; z) UUID=$OPTARG ;; b) BACKUPZ=$OPTARG ;; i) IDBACKUPZ=$OPTARG ;; \?) echo "Error: Invalid Option: -${OPTARG}" >&2 usage ;; :) echo "Error: -${OPTARG} requires an argument." usage ;; *) usage ;; esac done shift $((OPTIND -1 )) if [ -z ${SOURCEGZ} ] || [ -z "${UUID}" ] || [ -z ${BACKUPZ} ] || [ -z ${IDBACKUPZ} ]; then usage fi echo "Checking for snapshot of ${UUID}" check_snap ${UUID} if [ $? -ne 0 ]; then create_snap ${UUID} else echo "Snapshot of ${UUID} already available..." 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." echo "Sending config to ${BACKUPZ}..." zonecfg -z ${UUID} export | ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ "cat >/data/${SOURCEGZ}/${UUID}.cfg" check_err echo "done."