Divendres, abril 10, 2026
SERVIDORS

Backups automàtics a Linux amb rsync i cron

Els backups no són un projecte. Són part del dia a dia, com actualitzar paquets o revisar logs. I tanmateix, en massa sistemes, són l’últim que s’automatitza bé. Sovint s’escriuen a sobre sense control de versions, mai es revisen fins que fallen, o només s’executen quan algú s’enrecorda.

Per què rsync?

Perquè està a tot arreu, no requereix dimonis, és ràpid en copiar només el que ha canviat, i es comporta de forma predictible si es configura bé. I a diferència d’eines més complexes, no imposa una estructura tancada ni requereix formats propietaris. Això importa quan necessites restaurar una cosa ràpida sense dependre de configuracions antigues o programari addicional.

Què anem a veure

  1. Quin tipus de backup té sentit amb rsync.
  2. Com evitar sobrescriure sense voler.
  3. Com organitzar el destí i mantenir versions.
  4. Com integrar-lo amb cron de forma neta.
  5. Com rotar backups antics sense escriure scripts des de zero.
  6. Quins són el errors més comuns.

1. Quin tipus de backup convé amb rsync

rsync és molt bo per a còpies d’arbre d’arxius, ja sigui locals o per SSH. Pots fer:

  1. Backups locals d’ un directori a un altre disc o punt de muntatge.
  2. Backups remots via SSH (pull o push).
  3. Còpies incrementals simples (basades en hard links).
  4. Sincronitzacions unidireccionals amb exclusions.

No serveix per:

  1. Bases de dades en calent (sense fer dump).
  2. Backups amb control de canvis a nivell de bloc.
  3. Versionat d’ arxius binaris com imatges de disc.

Per a backups diaris d’arxius de configuració, llocs web, directoris d’usuaris o dumps de base de dades, és més que suficient.

2. Estructura bàsica: un script clar i controlat

No posis directament el comandament rsync a cron. Fes servir un script. Així pots controlar millor l’entorn, el logging i els errors. Aquí va una plantilla base comentada:

#!/bin/bash

SRC="/etc"
DEST="/backups/servidor01/etc"
DATE=$(date +%F)
LOG="/var/log/backup_etc.log"
EXCLUDES="/opt/scripts/excludes.txt"
 
mkdir -p "$DEST/$DATE"
 
rsync -aAXv \
  --delete \
  --exclude-from="$EXCLUDES" \
  "$SRC/" "$DEST/$DATE/" >> "$LOG" 2>&1
 
echo "$(date +'%F %T') Backup de $SRC completat" >> "$LOG"

Notes clau:

  1. -aAX manté permisos, ACLs i atributs estesos (útil en backups locals).
  2. –delete esborra arxius en el destí que ja no estan en l’origen. Compte amb això si t’equivoques a la ruta.
  3. “${SRC}/” amb la barra final és deliberat: sense ella, rsync crea un subdirectori dins del destí amb el nom del directori font.
  4. El destí és per data (2025-06-29, per exemple), per mantenir versions.
  5. L’ arxiu d’ exclusions permet ignorar cachés, temporals, muntatges externs, etc.

Exemple de excludes.txt:

/proc/
/sys/
/dev/
/run/
/tmp/
/mnt/
/media/
/var/cache/

3. Configurar cron sense sorpreses

Edita el crontab del root o de l’usuari que tingui accés a tots els arxius als que necessites copiar:

sudo crontab -e

Exemple de línia:

0 2 * * * /opt/scripts/backup_etc.sh

Això executa el backup cada dia a les 2:00 AM.

Consideracions pràctiques:

  1. Assegura’t de fer servir rutes absolutes a l’script (/usr/bin/rsync, no rsync) si hi ha dubtes sobre l’entorn.
  2. Redirigeix logs dins l’ script, no a la línia del crontab. Així tot queda al mateix arxiu.
  3. Fes servir flock si el backup pot trigar més del previst, per evitar solapaments:
0 2 * * * /usr/bin/flock -n /var/lock/backup_etc.lock /opt/scripts/backup_etc.sh

4. Rotar backups antics sense reinventar la roda

Tenir un backup per dia està bé, però sense control acabes omplint el disc. Hi ha diverses formes de rotar backups:

Opció A: rotar amb tmpreaper o find

Una solució simple: esborra carpetes de backup que tinguin més de N dies. Pots posar-lo com a part de l’script o com un altre job en cron.

find /backups/servidor01/etc/* -maxdepth 0 -type d -mtime +14 -exec rm -rf {} \;

Aquest comandament esborra carpetes amb més de 14 dies d’antiguitat. S’ executa en un cron a banda o al final de l’ script.

Precaució: assegura’t de no tenir comodins mal posats. Sempre prova el find amb echo o ls abans d’ aplicar rm.

Opció B: esquema de rotació amb hard links

Si necessites conservar versions però sense duplicar espai, pots fer servir –link-dest. Això permet backups “incrementals” que només ocupen espai addicional si l’arxiu ha canviat.

Estructura:

# Dia 1
rsync -aAX --delete /etc/ /backups/etc/2025-06-28/

# Dia 2 (incremental amb hard links)
rsync -aAX --delete --link-dest=/backups/etc/2025-06-28/ /etc/ /backups/etc/2025-06-29/

Aquest patró requereix més control en l’ script, però redueix ús de disc i permet rotació manual. rsnapshot automatitza això, tot i que no sempre és necessari si saps el que fas.

5. Backups remots via SSH

Fer un pull des d’ un servidor central:

rsync -aAX -e "ssh -i /root/.ssh/id_ed25519"   user@192.168.1.10:/etc/ /backups/servidor01/etc/

O fer un push des del servidor que es copia:

rsync -aAX -e "ssh -i /root/.ssh/id_ed25519"  /etc/ backup@192.168.1.100:/backups/servidor01/etc/

Consideracions:

  1. Fes servir claus SSH sense passphrase per a automatització, però restringeix el seu ús amb command=”rsync …”, from=”ip”, etc. en ~/.ssh/authorized_keys.
  2. Limita permisos de l’ usuari backup en el servidor receptor.
  3. Controla l’ample de banda amb –bwlimit=5000 si necessites evitar saturació.

6. Errors comuns

  1. Sense barra final en l’origen: Acabes amb /backups/etc/etc/ en lloc de /backups/etc/.
  2. Mal ús de –delete: Si el destí està mal apuntat, podries esborrar dades bones.
  3. Backups al mateix disc: Serveixen davant d’errors lògics, però no davant fallades físiques. No els anomenis “backup” si estan en el mateix punt de muntatge.
  4. Permisos trencats en restaurar: Si no fas servir -aAX, perds ACLs, xattrs o duels. Especialment crític en /etc, /home, o backups de contenidors.
  5. No revisar logs: Si rsync falla per permisos, ruta mal escrita o destí no muntat, i no revises el log, només ho sabràs quan necessitis restaurar.
  6. No muntar el disc: Si el backup s’escriu a /mnt/backup i aquest no està muntat, pots acabar omplint l’arrel del sistema. Fes servir alguna cosa com:
if mountpoint -q /mnt/backup; then
rsync ...
else
    echo "No muntat: /mnt/backup" >> $LOG
fi

7. Restaurar no hauria de ser una incògnita

No hi ha backup útil si no saps restaurar-lo.

Si fas servir rsync, restaurar és copiar. Pots fer-ho amb rsync -a en sentit invers, o amb cp -a, depenent del cas.

Exemple:

rsync -a /backups/etc/2025-06-28/ /etc/

Fes proves periòdiques. Munta un contenidor o VM, copia el backup, arrenca serveis. No esperis a estar contra rellotge per a descobrir que et falta alguna cosa.

8. Val la pena fer servir rsnapshot, Borg, Restic o altres?

Sí, en molts casos. Però rsync continua sent una opció vàlida si:

  1. Tens pocs servidors.
  2. Prefereixes veure els teus backups com a carpetes normals.
  3. Necessites una cosa comprensible per a altres admins sense entrenament.
  4. Ja fas servir cron i vols control explícit.

Per a més compressió, xifrat, verificació automàtica i de-duplicació, eines com Borg i Restic ofereixen molt més. Però són una altra capa de complexitat. En entorns petits o intermedis, rsync ben muntat continua sent perfectament útil.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *