Hola,
Tras una semanas trabajando en ello, he conseguido sustituir los backups de imagen de VPS enteras por copias incrementales de los elementos clave usando el programa borg.
La ventaja de las copias de VPS enteras es que restaurar un servidor es superfácil. La ventaja de las copias incrementales con borg es que:
- Las copias ocupan mucho menos.
- Al copiar sólo los ficheros nuevos o modificados, la copia de seguridad se hace en mucho menos tiempo (lo que aligera los recursos requeridos).
- Podemos almacenar muchas más copias anteriores, lo que puede permitir corregir errores que lleven días acumulados.
He configurado copias de los siguientes servicios (marco los que he podido realizar una recuperación real):
- Cloud
- Audio
- Picto
- Video
- Social
- Forum
- Site
- Blog
- Lutim
Aquí muestro como ejemplo el script para los backups del servidor cloud (he quitado contraseñas e IPs):
#!/bin/bash
sshfs anartist@XX.XXX.XXX.XX:/home/anartist/borgbackup /root/borgbackup/
export BORG_REPO=/root/borgbackup/cloud
export BORG_PASSPHRASE=''
info () { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
info "Entering Maintenance Mode"
sudo -u www-data php /usr/share/nginx/nextcloud/occ maintenance:mode --on
info "Starting DB backup"
dbdate=`date +"%Y%m%d-%H%M%S"`
mysqldump --opt --password=XXXXXXXXXX --user=root nextcloud | gzip > /backup/base/nextcloud-sqlbkp_${dbdate}.sql.gz
info "Starting Remote backup"
/usr/bin/borg create --verbose --stats ::backup_$(date +%Y%m%d) /usr/share/nginx/nextcloud-data /usr/share/nginx/nextcloud /backup/base/nextcloud-sqlbkp_${dbdate}.sql.gz /etc/nginx/conf.d/nextcloud.conf
backup_exit=$?
/usr/bin/borg prune --list --show-rc --keep-daily 7 --keep-weekly 4 --keep-monthly 6
prune_exit=$?
# use highest exit code as global exit code
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit))
if [ ${global_exit} -eq 0 ]; then
info "Backup and Prune finished successfully"
elif [ ${global_exit} -eq 1 ]; then
info "Backup and/or Prune finished with warnings"
else
info "Backup and/or Prune finished with errors"
fi
fusermount -u /root/borgbackup/
info "Eliminating old db"
ls /backup/base/* -trd | head -n -2 | xargs --no-run-if-empty rm
info "Deactivating Maintenance Mode"
sudo -u www-data php /usr/share/nginx/nextcloud/occ maintenance:mode --off
info "Backup Finished"
exit ${global_exit}
Aquí podéis encontrar el código de todos los scripts de backup:
Un saludo!