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.