Vamos a ver un ejemplo de backup incremental con
rsync, sincronizaremos el directorio
/home/destino con el directorio
/home/origen:
$ rsync -avvbP --delete --backup-dir=/home/BACKUP/$(date +%y-%m-%d_%H.%M) /home/origen/ /home/destino
La opción
--delete indica que se deben eliminar de
destino los ficheros que fueron eliminados de
origen.
La opción -
-backup-dir indica que se deben copiar en el directorio
/home/BACKUP/'fecha' los ficheros de
destino que van a ser actualizados antes de sobreescribirlos con los nuevos cambios.
Supongamos que
destino y
origen estaban sincronizados con
rsync antes de realizar cambios en
origen. Si modificamos el fichero
/home/origen/prueba.txt y ejecutamos el comando anterior,
rsync guardará el fichero
/home/destino/prueba.txt en
/home/BACKUP/'fecha' y luego copiará
prueba.txt de
origen a
destino.
Problemas al hacer rsync de un dispositivo EXT3 a un dispositivo FAT32
Tratando
de hacer un backup con
rsync de una unidad en EXT3 a un disco duro USB
en FAT32 he podido apreciar que en el backup siempre faltan archivos y
que
rsync siempre copia de nuevo todo el contenido incluso cuando no ha
habido cambios.
La razón de todo esto está relacionada con el formato FAT32. Por un lado
en FAT no es posible tener en el mismo directorio dos carpetas con el
mismo nombre. Esto tampoco es posible en EXT3 pero al ser esta case
sensitive te permite tener una carpeta "pruebas" y otra "PRUEBAS" en el
mismo directorio. El resultado al tratar de copiar ambas carpetas al
disco FAT32 es que la primera se copia correctamente pero la segunda es
excluida de la copia. Optar por nombres distintos en las carpetas es la
solución además de una práctica recomendada.
En cuanto a que
rsync, siempre hace un volcado completo incluso cuando
los archivos no han cambiado, se debe a que en FAT32 para almacenar la
fecha en la que se ha modificado un archivo se dispone de una precisión
máxima de solo 2 segundos. Esto hace que no coincida la fecha exacta de
EXT3 con la fecha aproximada de FAT32, y dado que Rsync se basa en la
comparación de estas fechas para determinar si el archivo ha sido
modificado o no desde la última copia, decide volver a hacer el backup.
Para estos casos Rsync cuenta con dos soluciones. La primera por medio del parámetro
--size-only,
con el que solo considerará que deben copiarse de nuevo aquellos
archivos que han cambiado su tamaño, pero no su fecha. Y la segunda y
más recomendable por medio del parámetro
--modify-window=1, que permite especificar un margen de tolerancia entre fechas, en este caso de 1 segundo.
En tal caso quedaría como sigue:
$ rsync -avvbP --modify-window=1 --delete --backup-dir=/media/USB/BACKUP/$(date +%y-%m-%d_%H.%M) /home/origen/ /media/USB/destino
En estos casos se recomienda que el disco duro USB esté en formato
EXT3, con lo que no solo no hará falta nada de todo esto sino que además
el backup mantendrá intactos los permisos.