zfs snapshot script(s)

here is a zfs snapshot script that keys off of scriptname

#!/usr/bin/bash
#
# vmsnaps.sh - make snapshots of all VM zfs
# 	no calling args.  linked filename invoking script \
# 	determines behavior.  zfs snapshots require root access
#
SCRIPTNAME=${0##*/}
DATETIME=`/usr/bin/date +%H%M-%d-%m-%Y`
ROOTSNAPS='rpool rpool/ROOT rpool/ROOT/oicuraqt rpool/Shotwell rpool/USERDATA  rpool/USERDATA/luser rpool/USERDATA/luser2 rpool/USERDATA/root'
VMSNAPS=`zfs list |grep VM|awk '{printf(" "$1)}'`
ALLSNAPS=`zfs list -t snap 2>/dev/null|grep -v MOUNTPOINT|awk '{printf(" "$1)}'`

function rootsnaps() {
	for ROOT in ${ROOTSNAPS}
		do
			echo snapshot ${ROOT}\@${DATETIME}
			sudo zfs snapshot ${ROOT}@${DATETIME}
		done
		}
function vmsnaps() {
	for VM in ${VMSNAPS}
		do
			echo snapshot ${VM}\@${DATETIME}
			sudo zfs snapshot ${VM}@${DATETIME}
		done
		}
function destroyAllSnaps() {

			if confirmDestroy; then
			    echo "luser chose YES. Destroying all existing snapshots..."
 	for ALLSNAP in ${ALLSNAPS}
                do	
			sudo zfs destroy ${ALLSNAP}
		done	
			else
    			echo "luser chose NO. Aborting destruction of all snapshots..."
			fi
		}
	
function confirmDestroy() {
    while true; do
        read -p "This will destroy ALL existing snapshots.\n Do you want to proceed? (YES/NO/CANCEL) " yn
        case $yn in
            [Yy]* ) return 0;;
            [Nn]* ) return 1;;
            [Cc]* ) exit;;
            * ) echo "Please answer YES, NO, or CANCEL.";;
        esac
    done
}

# main script begins
case ${SCRIPTNAME} in
	snaproots.sh)
		
		rootsnaps
		;;

	snapvms.sh)
	
		vmsnaps
		;;

	snapall.sh)

		rootsnaps
		vmsnaps
		;;

	destroyallsnaps.sh)

		destroyAllSnaps
		;;
	*)
		printf "\nValid scriptnames are snaproots.sh, snapvms.sh, snapall.sh or \n destroyallsnaps.sh \nPlease create symbolic link with one of theses names to snaps.sh\n"
		;;
esac

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.