Esta pagina se ve mejor con JavaScript habilitado

Sincronización de directorios mediante RSync

 ·  🎃 kr0m

Rsync es una herramienta indispensable para cualquier sysadmin que se precie, nos permite sincronizar directorios remotos de forma muy sencilla y además solo sincronizará los cambios lo que implica que posteriores sincronizaciones serán mas rápidas ;), hay infinidad de usos como sincronización e ficheros entre servidores web, copias de seguridad y cualquier otro fin que vuestras calenturientas mentes pueda llegar a imaginar.

COPIA DE DIRECTORIOS:

rsync -av "RUTA_ORIGEN RUTA_DESTINO"

Es equivalente a: -rlptgoDv

-r: Recorre de forma recurisva la estructura de directorios que le indiquemos  
-l: Copia enlaces simbólicos como enlaces simbólicos  
-p: Mantiene permisos  
-t: Mantiene hora del fichero  
-g: Mantiene el grupo  
-o: Mantiene el propietario  
-D: Mantiene los ficheros de dispositivo (solo para root)  
-v modo verbose

EVITAR COPIA COMPLETA:

Rsync por defecto copia el fichero completo en cuanto se detecta que se cambió algo, si se quiere evitar esto y solo copiar la diferencia(mas CPU).

rsync -av --no-whole-file "RUTA_ORIGEN RUTA_DESTINO"

COMPRIMIR TRÁFICO(mas CPU):

rsync -avz --no-whole-file "RUTA_ORIGEN RUTA_DESTINO"

COMPROBAR CRC:

RSync por defecto solo mira la fecha y el tamaño, si no cambia nada de esto se considera que el fichero no cambió, se puede forzar para que la comprobación se haga por CRC.

rsync -avZc --no-whole-file "RUTA_ORIGEN RUTA_DESTINO"

ELIMINAR FICHEROS ELIMINADOS EN ORIGEN(Peligroso!!):

rsync -av --delete "RUTA_ORIGEN RUTA_DESTINO"

MANTENER FICHEROS DEL DESTINO SI SON MAS RECIENTES QUE EL ORIGEN:

rsync -avu "RUTA_ORIGEN RUTA_DESTINO"

-u, para que no se sobreescriban los ficheros del destino que son más recientes que los del origen

BACKUP INCREMENTAL(Guarda copia de los ficheros que fueron modificados):

rsync -avvb --delete --backup-dir=/rsync/backup_$(date +%y%m%d%H%M) "RUTA_ORIGEN RUTA_DESTINO"

SINCRONIZACIÓN REMOTA(SSH):

rsync -avz --rsh='ssh -p22' "USER@HOST:RUTA_ORIGEN RUTA_DESTINO"
rsync -avz --delete --rsh='ssh -p22' "USER@HOST:RUTA_ORIGEN RUTA_DESTINO"

EXCLUSIONES:

Se puede excluir mediante un fichero indicando los directorios a excluir o indicándolos en el comando de sincronización.

rsync -avz --delete --exclude-from /root/.scripts/excludes_rsync --rsh='ssh -p22' "USER@HOST:RUTA_ORIGEN RUTA_DESTINO"

cat /root/.scripts/excludes_rsync
.ssh
public_html/web/images/users/
public_html/app/logs
public_html/app/cache
rsync -avz --delete --exclude .ssh --exclude public_html/web/images/users/ --exclude public_html/app/logs --exclude public_html/app/cache --rsh='ssh -p22' "USER@HOST:RUTA_ORIGEN RUTA_DESTINO"

NOTA: Las exclusiones siempre son relativas al dir de origen!!!!!

CONSIDERACIONES:

La barra / puede hacer que RSync se comporte de forma distinta:

rsync -av "RUTA_ORIGEN RUTA_DESTINO" –> Copia el directorio 1 en 2
rsync -av "RUTA_ORIGEN/ RUTA_DESTINO" –> Copia los ficheros del directorio 1 en 2

CRON:

Un uso típico es meter un RSync en el CRON para sincronizar el contenido de cierto directorio de forma periódica.

*/5 * * * * /usr/bin/rsync -avz -\-delete -\-rsh=\'ssh -p22\' \"USER@HOST:RUTA_ORIGEN RUTA_DESTINO\" >/dev/null 2>&1
Si te ha gustado el artículo puedes invitarme a un RedBull aquí