Post

Rsync crontab y backups caseros

Rsync crontab y backups caseros

Rsync crontab y backups caseros

Este post sirve para preparar copias simples con rsync, programarlas con cron y documentar circuitos basicos de backup en homelab.

Rsync local

1
rsync -avh --delete /origen/ /destino/

Rsync remoto por SSH

1
rsync -avh --delete -e ssh /origen/ <USUARIO>@<HOSTNAME>:/destino/

Excluir rutas

1
2
3
4
rsync -avh --delete \
  --exclude 'cache/' \
  --exclude '*.tmp' \
  /origen/ /destino/

Script base

1
2
3
4
5
6
7
8
#!/usr/bin/env bash
set -euo pipefail

ORIGEN="/origen/"
DESTINO="/destino/"
LOG="/var/log/backup-rsync.log"

rsync -avh --delete "$ORIGEN" "$DESTINO" >> "$LOG" 2>&1

Cron

30 2 * * * /usr/local/sbin/backup-rsync.sh

Comandos utiles de crontab

1
2
3
crontab -l
crontab -e
crontab -u <USUARIO> -l

Patron de log para SFTP

1
2
3
4
YYYY-MM-DD HH:MM:SS - Comienza SFTP
YYYY-MM-DD HH:MM:SS - Finaliza descarga
YYYY-MM-DD HH:MM:SS - Se eliminan archivos temporales
YYYY-MM-DD HH:MM:SS - Finaliza limpieza remota

Este patron permite comprobar rapidamente si la descarga, el borrado local y la limpieza remota han terminado correctamente.

Patron rsync con lista de rutas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env bash
set -euo pipefail

DESTINO="<USUARIO>@<HOSTNAME>:/destino/"
LOG="/var/log/rsync-homelab.log"

rutas=(
  "/home/<USUARIO>/Documentos"
  "/home/<USUARIO>/Imagenes"
  "/opt/tools"
)

for ruta in "${rutas[@]}"; do
  printf '[%s] Sincronizando %s\n' "$(date --iso-8601=seconds)" "$ruta" >> "$LOG"
  rsync -avh --delete "$ruta/" "$DESTINO$(basename "$ruta")/" >> "$LOG" 2>&1
done

Local vs SSH

Destino local:

1
rsync -avh --delete /origen/ /mnt/backup/origen/

Destino remoto:

1
rsync -avh --delete -e ssh /origen/ <USUARIO>@<HOSTNAME>:/backup/origen/

Script relacionado

copio_cosas_collar_local.sh aplica este patron a varias rutas origen locales y destinos locales de backup.

This post is licensed under CC BY 4.0 by the author.