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:
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).
COMPRIMIR TRÁFICO(mas CPU):
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.
ELIMINAR FICHEROS ELIMINADOS EN ORIGEN(Peligroso!!):
MANTENER FICHEROS DEL DESTINO SI SON MAS RECIENTES QUE EL ORIGEN:
-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):
SINCRONIZACIÓN REMOTA(SSH):
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.
.ssh
public_html/web/images/users/
public_html/app/logs
public_html/app/cache
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 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