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!"