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
