#!/bin/ksh93 # need to run as root, except if virsh is SUID and user has # zfs 'allow snapshot' permissions BASEDIR=$0 BASEDIR=${BASEDIR%/*} [ "$BASEDIR" = "$0" ] && BASEDIR="$(pwd)" source ${BASEDIR}/.info typeset -Ai SEEN for DOM in $DOMS ; do SEEN[${DOM}]=0 done integer DONE=${#ZVOLS[@]} integer MAXWAIT=3600 while (( DONE != 0 )) ; do if (( MAXWAIT < 0 )) ; then FAILED="" for DOM in $DOMS ; do if (( SEEN[${DOM}] == 0 )); then FAILED="$FAILED ${HOSTS[${DOM}]}" fi done print -u2 "Snapshots für folgende Kisten nicht erstellt, da nicht runtergefahren:\n$FAILED" break fi (( MAXWAIT=MAXWAIT-300 )) for DOM in $DOMS ; do if (( SEEN[${DOM}] != 0 )); then continue; fi STATE="$(/usr/bin/virsh domstate ${DOM} | head -1)" case $STATE in "shut off"|"crashed") STATE="down" ;; *) STATE="up" ;; esac if [ "$STATE" != "down" ]; then continue fi SEEN[${DOM}]=1 (( DONE=DONE-1 )) TODAY="$(date '+%Y-%m-%d')" /usr/sbin/zfs list -H -t snapshot "${ZVOLS[${DOM}]}@${TODAY}" >/dev/null 2>&1 if [ $? -eq 0 ]; then print -u2 "${ZVOLS[${DOM}]}@${TODAY} gibt es bereits - mache keinen neuen snapshot" else /usr/sbin/zfs snapshot "${ZVOLS[${DOM}]}@${TODAY}" sync /usr/bin/virsh start "${DOM}" >/dev/null fi done (( DONE != 0 )) && sleep 300 done