VERSION=0.2 HELP=0 LIST=0 TEST=0 VERBOSE=0 ZBACKUP=0 ZONES="" BACKUPDIR=/var/tmp FSSNAPDIR=/var/tmp MOUNTDIR=/mnt usage() { echo "Usage: zonebkp [OPTION]" echo " [-h] Prints this help text." echo " -l Lists zones for backup." echo " -t Tests only, without backup." echo " -v Verbose mode." echo " -b zonename[,zonename...]" echo " Backups specified zones." echo " -d backupdir Location of backup. Default is /var/tmp" } getoptions () { OPTS=$@ OPTARGS=":hltvb:d:" getopts "$OPTARGS" OPT $OPTS if [ "$OPT" = "?" ] then HELP=1 fi while [ "$OPT" != "?" ] do case "$OPT" in h) HELP=1 ;; l) LIST=1 ;; t) TEST=1 ;; v) VERBOSE=1 ;; b) ZBACKUP=1 ZONES=`echo $OPTARG | tr ',' ' '` ;; d) BACKUPDIR=$OPTARG ;; esac getopts "$OPTARGS" OPT $OPTS done } zonebackup() { if [ "$1" = "" ] then echo "No zone specified." exit 1 fi for Z in $1 do [ "$VERBOSE" = 1 ] && echo "Prepare zone $Z for backup." # get the mountpoint where the zone is located ZONEDIR=`zoneadm list -ip | grep $Z | nawk -F: '{print $4}'` cd $ZONEDIR ZONEMOUNT=`df -k . | tail -1 | nawk '{print $6}` [ "$VERBOSE" = 1 ] && echo "Mountpoint of $Z is $ZONEMOUNT." FSTYPE=`df -n . | nawk '{print $3}'` if [ "$FSTYPE" != ufs ] then echo "FSType is not ufs!" exit 1 fi [ "$VERBOSE" = 1 ] && echo "FSType is $FSTYPE" [ "$VERBOSE" = 1 ] && echo "Create fssnap for zone $Z." FSSNAPDEV=`fssnap -o bs=$FSSNAPDIR $ZONEMOUNT` SNAPSHOTFILE=snapshot`fssnap -i | nawk '{print $1}'` [ "$VERBOSE" = 1 ] && echo "Mount $FSSNAPDEV." mount -o ro $FSSNAPDEV $MOUNTDIR cd $MOUNTDIR${ZONEDIR#$ZONEMOUNT} if [ "$TEST" = 0 ] then [ "$VERBOSE" = 1 ] && echo "Backup zone configuration." zonecfg -z $Z export -f $BACKUPDIR/$Z.cfg [ "$VERBOSE" = 1 ] && echo "Backup zone $Z." tar cf - * | gzip > $BACKUPDIR/$Z.tar.gz [ "$VERBOSE" = 1 ] && echo "Backup done for $Z." else echo "No backup done ... only testing." fi cd / [ "$VERBOSE" = 1 ] && echo "Unmount $FSSNAPDEV." umount $FSSNAPDEV if [ "$?" -ne 0 ] then echo "Warning: Not able to unmount $FSSNAPDEV... force unmount!" umount -f $FSSNAPDEV fi fssnap -d $ZONEMOUNT [ "$VERBOSE" = 1 ] && echo "Delete snapshot file." rm $FSSNAPDIR/$SNAPSHOTFILE done }