Unraid Backup

#!/bin/bash
# Add containers below to skip e.g.: containersToSkip=("redis")
containersToSkip=("homeassistant", "binhex-plex")

# get the order of the containers in the Unraid Docker tab
mapfile orderedContainersUserPrefs < /boot/config/plugins/dockerMan/userprefs.cfg

# get the running containers
mapfile -t runningContainers < <( docker inspect --format='{{.Name}}' $(docker ps -q --no-trunc) | cut -c2- )

# create a clean list of the ordered containers
containersInStartingOrder=()
for container in "${orderedContainersUserPrefs[@]}"; do
    # keep only the container name (0="redis" -> redis)
    container=$(awk -F'="|"' '{print $2}' <<< "$container")
    
    # skip folders
    if [[ $container == folder-* ]] ;
    then
      echo "$container: Skip folder"
      continue
    fi
    if [[ ${containersToSkip[@]} =~ $container ]]
    then
      echo "$container: Skipping this container as it is on the skiplist"
      continue
    fi
    containersInStartingOrder+=($container)
done

# create a reversed list to stop the containers in the correct order
containersInStoppingOrder=()
for ((i=${#containersInStartingOrder[@]}-1; i>=0; i--)); do
    containersInStoppingOrder+=("${containersInStartingOrder[i]}")
done

# stop containers in the correct order
for container in "${containersInStoppingOrder[@]}"; do
    if [[ ${runningContainers[@]} =~ $container ]]
    then
      echo "$container: stopping"
      docker stop ${container} 1> /dev/null
      echo "$container: stopped"
    else
      echo "$container: already stopped"
    fi
done

echo "Copying appdata to backups share"
rsync -a --delete /mnt/user/appdata/ /mnt/user/backup_nas/lithium_backup/appdata/
echo "Copy completed succesfully"

# start containers in the correct order
for container in "${containersInStartingOrder[@]}"; do
    if [[ ${runningContainers[@]} =~ $container ]]
    then
      echo "$container: starting"
      docker start ${container} 1> /dev/null
      echo "$container: started"
    else
      echo "$container: was already stopped so will not be started"
    fi
done

echo "Copying flashdrive to backups share"
rsync -avXHg --delete /boot/ /mnt/user/backup_nas/lithium_backup/unraidflash
chmod 777 -R /mnt/user/backup_nas/lithium_backup/unraidflash
echo "Copy completed succesfully"

echo "Backup is finished!"