@Tomahawk, here’s a POC of an addon that does some of what you want. Every time you start the addon, it’ll automatically copy all backups to /dev/sda1, then apply the retention policy, then stop. You can automatically start the addon with hassio.addon_start
service via an automation.
To install it, create a folder named \\hassio.local\addons\copy_backups_to_sda1
then place all 3 of these files in that folder. Refresh your addons and install it.
I don’t plan on continuing development on this. If you decide to improve on it, let me know how things progress.
\\hassio.local\addons\copy_backups_to_sda1\config.json
{
"name": "Copy Backups to sda1",
"version": "0.0.1",
"slug": "copy_backups_to_sda1",
"description": "Copies backups from /backup to /dev/sda1",
"startup": "once",
"boot": "manual",
"privileged": [
"SYS_ADMIN"
],
"hassio_api": true,
"map": [
"backup:rw"
],
"devices": [
"/dev/sda1:/dev/sda1:rwm"
],
"options": {
"max_local_backups": 2,
"max_remote_backups": 7,
"remote_backup_path": "backups"
},
"schema": {
"max_local_backups": "int",
"max_remote_backups": "int",
"remote_backup_path": "str"
}
}
\\hassio.local\addons\copy_backups_to_sda1\Dockerfile
ARG BUILD_FROM
FROM $BUILD_FROM
ENV LANG C.UTF-8
RUN apk add --no-cache rsync jq
COPY run.sh /
RUN chmod a+x /run.sh
CMD [ "/run.sh" ]
\\hassio.local\addons\copy_backups_to_sda1\run.sh
#!/bin/bash
CONFIG_PATH=/data/options.json
MAX_LOCAL=$(jq --raw-output ".max_local_backups" $CONFIG_PATH)
MAX_LOCAL_PLUS1=$(($MAX_LOCAL + 1))
MAX_REMOTE=$(jq --raw-output ".max_remote_backups" $CONFIG_PATH)
MAX_REMOTE_PLUS1=$(($MAX_REMOTE + 1))
BACKUP_PATH=$(jq --raw-output ".remote_backup_path" $CONFIG_PATH)
echo "[INFO] MAX_LOCAL=$MAX_LOCAL"
echo "[INFO] MAX_REMOTE=$MAX_REMOTE"
echo "[INFO] BACKUP_PATH=$BACKUP_PATH"
echo "[INFO] Mounting /dev/sda1 to /mnt"
mount /dev/sda1 /mnt
# Create /mnt/$BACKUP_PATH folder
if [ ! -d /mnt/$BACKUP_PATH ]; then
echo "[INFO] Creating /mnt/$BACKUP_PATH"
mkdir -p /mnt/$BACKUP_PATH
fi
echo "[INFO] Copying all backups from /backup to /mnt/$BACKUP_PATH"
rsync -v /backup/*.tar /mnt/$BACKUP_PATH
echo "[INFO] Purging backups from /backup except for the last $MAX_LOCAL"
ls -tp /backup/*.tar | grep -v '/$' | tail -n +$MAX_LOCAL_PLUS1 | xargs -I {} rm -- "{}"
echo "[INFO] Purging backups from /mnt/$BACKUP_PATH except for the last $MAX_REMOTE"
ls -tp /mnt/$BACKUP_PATH/*.tar | grep -v '/$' | tail -n +$MAX_REMOTE_PLUS1 | xargs -I {} rm -- "{}"