BASH   54

doSnapshots sh

Guest on 24th July 2022 03:42:47 PM

  1. #!/bin/ksh93
  2.  
  3. # need to run as root, except if virsh is SUID and user has
  4. # zfs 'allow snapshot' permissions
  5.  
  6. BASEDIR=$0
  7. BASEDIR=${BASEDIR%/*}
  8. [ "$BASEDIR" = "$0" ] && BASEDIR="$(pwd)"
  9. source ${BASEDIR}/.info
  10.  
  11. typeset -Ai SEEN
  12. for DOM in $DOMS ; do
  13.         SEEN[${DOM}]=0
  14. done
  15.  
  16. integer DONE=${#ZVOLS[@]}
  17. integer MAXWAIT=3600
  18. while (( DONE != 0 )) ; do
  19.         if (( MAXWAIT < 0 )) ; then
  20.                 FAILED=""
  21.                 for DOM in $DOMS ; do
  22.                         if (( SEEN[${DOM}] == 0 )); then
  23.                                 FAILED="$FAILED ${HOSTS[${DOM}]}"
  24.                         fi
  25.                 done
  26.                 print -u2 "Snapshots für folgende Kisten nicht erstellt, da nicht runtergefahren:\n$FAILED"
  27.                 break
  28.         fi
  29.         (( MAXWAIT=MAXWAIT-300 ))
  30.         for DOM in $DOMS ; do
  31.                 if (( SEEN[${DOM}] != 0 )); then
  32.                         continue;
  33.                 fi
  34.                 STATE=""$(/usr/bin/virsh domstate {DOM} | head -1)"
  35.                 case $STATE in
  36.                         "shut off"|"crashed")   STATE="down" ;;
  37.                         *)                      STATE="up" ;;
  38.                 esac
  39.                 if [ "$STATE" != "down" ]; then
  40.                         continue
  41.                 fi
  42.                 SEEN[{DOM}]]=1
  43.                 (( DONE=DONE-1 ))
  44.                 TODAY="$(date '+%Y-%m-%d')"
  45.                 /usr/sbin/zfs list -H -t snapshot "{ZVOLS[${DOM}]]}@{TODAY}"" >/dev/null 2>&1
  46.                 if [ $? -eq 0 ]; then
  47.                         print -u2 "{ZVOLS[${DOM}]]}@{TODAY} gibt es bereits - mache keinen neuen snapshot"
  48.                 else
  49.                         /usr/sbin/zfs snapshot "{ZVOLS[${DOM}]]}@{TODAY}""
  50.                         sync
  51.                         /usr/bin/virsh start "{DOM}"" >/dev/null
  52.                 fi
  53.         done
  54.         (( DONE != 0 )) && sleep 300
  55. don

Raw Paste


Login or Register to edit or fork this paste. It's free.