Sincronització de fitxers: rsync i grsync

1. Introducció

rsync (Remote Sync) és una de les eines més potents i versàtils de Linux per a la còpia i sincronització de fitxers, tant en local com en remot. La seva característica principal és l’algorisme delta: només transfereix les diferències entre fitxers, estalviant temps i amplada de banda.

rsync logo

grsync és una interfície gràfica (GUI) per a rsync, que facilita el seu ús a usuaris menys familiaritzats amb la línia d’ordres.

2. rsync

2.1 Característiques principals

2.2 Instal·lació

# Debian/Ubuntu
sudo apt install rsync

# Fedora/RHEL
sudo dnf install rsync

# Arch/Manjaro
sudo pacman -S rsync

2.3 Sintaxi bàsica

rsync [OPCIONS] ORIGEN DESTÍ

L’origen i el destí poden ser:

Important: La barra final (/) a l’origen té significat:

2.4 Opcions principals

Opció Descripció
-a, --archive Mode arxiu: preserva permisos, dates, propietari, grups, enllaços simbòlics, dispositius. Equivalent a -rlptgoD
-v, --verbose Mostra els fitxers processats
-z, --compress Comprimeix les dades durant la transferència
-r, --recursive Copia recursivament directoris
-u, --update Salta fitxers al destí que siguin més nous
-n, --dry-run Simulació: mostra què faria sense fer res
-P Equivalent a --progress --partial: mostra progrés i reprèn
--progress Mostra el progrés de cada fitxer
--partial Conserva els fitxers parcialment transferits
-e Especifica el programa de transport remot (p. ex. ssh)
--delete Elimina al destí els fitxers que ja no existeixen a l’origen
--exclude Exclou fitxers o directoris per patró
--include Inclou fitxers que coincideixen amb el patró
--filter Regles de filtratge avançades
--bwlimit Limita l’amplada de banda (en KB/s)
-h, --human-readable Mostra mides en format llegible (KB, MB, GB)
--stats Mostra estadístiques al final
--checksum Compara fitxers per checksum en lloc de data/mida
--link-dest Fa còpies incrementals amb enllaços durs (hard links)
-l Copia els enllaços simbòlics com a tals
-p Preserva els permisos
-t Preserva les dates de modificació
-o Preserva el propietari (cal ser root)
-g Preserva el grup
--log-file Desa un registre de l’operació en un fitxer

2.5 Exemples pràctics

Còpia local

# Copiar un directori localment
rsync -av /home/ramon/documents/ /backup/documents/

# Sincronitzar eliminant fitxers esborrats a l'origen
rsync -av --delete /home/ramon/documents/ /backup/documents/

# Simulació prèvia
rsync -avn --delete /home/ramon/documents/ /backup/documents/

Còpia remota via SSH

# Copiar directori local cap a servidor remot
rsync -avz /home/ramon/web/ usuari@servidor.cat:/var/www/html/

# Copiar des d'un servidor remot cap a local
rsync -avz usuari@servidor.cat:/var/www/html/ /backup/web/

# Especificar port SSH diferent de 22
rsync -avz -e "ssh -p 2222" /dades/ usuari@servidor.cat:/backup/dades/

# Amb clau SSH privada
rsync -avz -e "ssh -i ~/.ssh/id_rsa" /dades/ usuari@servidor.cat:/backup/

Exclusions

# Excloure un directori
rsync -av --exclude='node_modules/' /projecte/ /backup/projecte/

# Excloure múltiples patrons
rsync -av --exclude='*.tmp' --exclude='*.log' --exclude='.git/' /projecte/ /backup/

# Usar un fitxer d'exclusions
rsync -av --exclude-from='exclusions.txt' /dades/ /backup/

# Contingut d'exclusions.txt:
# *.tmp
# *.log
# .git/
# node_modules/
# __pycache__/

Limitar l’amplada de banda

# Limitar a 1 MB/s
rsync -avz --bwlimit=1000 /dades/ usuari@servidor.cat:/backup/
# Primera còpia completa
rsync -av /home/ramon/ /backup/2025-06-01/

# Còpies incrementals (els fitxers no canviats s'enllaçen amb hard links)
rsync -av --link-dest=/backup/2025-06-01/ /home/ramon/ /backup/2025-06-02/
rsync -av --link-dest=/backup/2025-06-02/ /home/ramon/ /backup/2025-06-03/

Cada directori de còpia sembla una còpia completa, però ocupa molt poc espai gràcies als hard links.

2.6 rsync com a dimoni

rsync pot funcionar com a dimoni independent (sense SSH), útil per a sincronitzacions internes a la xarxa:

Fitxer de configuració /etc/rsyncd.conf

[backup]
    path = /srv/backup
    comment = Directori de còpies de seguretat
    read only = false
    auth users = ramon
    secrets file = /etc/rsyncd.secrets
    hosts allow = 192.168.1.0/24

Fitxer de contrasenyes /etc/rsyncd.secrets

ramon:contrasenya_segura
chmod 600 /etc/rsyncd.secrets

Iniciar el dimoni

sudo systemctl enable --now rsync

Connectar al dimoni

rsync -av usuari@servidor::backup /backup/local/

2.7 Automatització amb cron

# Backup diari a les 2:00 de la matinada
0 2 * * * rsync -avz --delete /home/ramon/ /backup/home/ >> /var/log/rsync_backup.log 2>&1

2.8 Algorisme de transferència delta

rsync divideix cada fitxer en blocs i calcula checksums. Compara els checksums entre origen i destí i només transfereix els blocs que difereixen. Això el fa molt eficient per a:

2.9 Sortida i estadístiques

rsync -avh --stats /origen/ /destí/

Exemple de sortida amb --stats:

Number of files: 1,234
Number of created files: 12
Number of deleted files: 3
Number of regular files transferred: 45
Total file size: 2.34G bytes
Total transferred file size: 12.5M bytes
Literal data: 12.5M bytes
Matched data: 2.33G bytes
File list size: 45.6K
Total bytes sent: 12.6M
Total bytes received: 1.23K

3. grsync: interfície gràfica per a rsync

3.1 Descripció

grsync és una aplicació GTK que proporciona una GUI amigable per configurar i executar operacions rsync sense necessitat de recordar opcions de línia d’ordres.

3.2 Instal·lació

# Debian/Ubuntu
sudo apt install grsync

# Fedora/RHEL
sudo dnf install grsync

# Arch/Manjaro
sudo pacman -S grsync

3.3 Característiques de la interfície

3.4 Opcions disponibles a la GUI

La interfície agrupa les opcions en pestanyes:

Opcions bàsiques:

Opcions avançades:

3.5 Gestió de sessions

grsync permet desar configuracions com a sessions amb nom:

  1. Configurar els paràmetres desitjats.
  2. Menú Sessions → Desa sessió.
  3. Assignar un nom (p. ex. backup_home, sincro_web).
  4. Per recuperar-la: menú Sessions → Obre sessió.

Les sessions es desen a ~/.grsync/ en format text pla.

3.6 Execució des de la línia d’ordres

grsync permet obrir directament una sessió guardada:

grsync --session="backup_home"

Això facilita l’automatització des de scripts o cron mantenint la configuració visual.

4. Comparativa rsync vs. altres eines

Eina Ús Avantatges Inconvenients
rsync Còpia/sincronització general Incremental, SSH, molt configurable Sintaxi complexa per a novells
cp Còpia simple local Senzill Sense incremental ni remot
scp Còpia remota via SSH Senzill per a fitxers puntuals Sense incremental
sftp Transferència interactiva SSH Interactiu Manual, sense automatització
unison Sincronització bidireccional Detecta canvis en ambdós extrems Més complex de configurar
rclone Sincronització amb cloud Suporta S3, Drive, Dropbox, etc. No usa l’algorisme delta d’rsync

5. Bones pràctiques

  1. Sempre fer un --dry-run primer (-n) per veure què canviarà.

  2. Anar amb compte amb --delete: eliminarà fitxers al destí de manera permanent.

  3. Usar --backup per conservar versions anteriors dels fitxers sobreescrits:

    rsync -av --backup --backup-dir=/backup/old/ /origen/ /destí/
  4. Verificar la barra final a l’origen per evitar duplicació de directoris.

  5. Logs: sempre redirigir la sortida a un fitxer quan s’automatitza.

  6. Connexions SSH: usar claus sense contrasenya per a tasques automatitzades.

  7. Provar la connectivitat abans d’automatitzar tasques remotes.

6. Casos d’ús habituals

# 1. Mirror d'un lloc web
rsync -avz --delete /var/www/html/ usuari@servidor2:/var/www/html/

# 2. Còpia de seguretat de /home excloent fitxers grans
rsync -avz --exclude='*.iso' --exclude='*.vmdk' /home/ /backup/home/

# 3. Sincronització bidireccional (amb precaució)
# Origen → Destí
rsync -av /dades/ /backup/
# Destí → Origen (si cal)
rsync -av /backup/ /dades/

# 4. Transferència amb progrés visible
rsync -avhP fitxer_gran.iso usuari@servidor:/tmp/

# 5. Còpia preservant ACL i atributs estesos
rsync -avAX /origen/ /destí/

7. Resum d’ordres (referència ràpida)

# Còpia local bàsica
rsync -av /origen/ /destí/

# Còpia amb sincronització (elimina al destí)
rsync -av --delete /origen/ /destí/

# Còpia remota
rsync -avz /origen/ usuari@host:/destí/

# Simulació
rsync -avn --delete /origen/ /destí/

# Amb progrés
rsync -avhP /origen/ /destí/

# Excloure patrons
rsync -av --exclude='*.tmp' /origen/ /destí/

# Còpia incremental amb hard links
rsync -av --link-dest=/backup/anterior/ /origen/ /backup/nou/

# Limitar ample de banda
rsync -avz --bwlimit=500 /origen/ usuari@host:/destí/

# Estadístiques
rsync -avh --stats /origen/ /destí/

8. Referències

Versions d’aquest document

Domini Públic (CC0)