Introducción
Al utilizar rsync en particiones NTFS o FAT32, es necesario considerar particularidades de estos sistemas de archivos en relación con los utilizados en sistemas basados en Unix. En entornos Unix, es común utilizar la opción -a como parámetro del comando rsync, lo que equivale al conjunto de opciones -rlptgoD:
Los parámetros mencionados tienen las siguientes funciones:
- -r Copia subdirectorios recursivamente.
- -l Copia enlaces simbólicos como enlaces.
- -p Preserva permisos.
- -t Preserva fechas de modificación (timestamps).
- -g Preserva el grupo.
- -o Preserva el propietario.
- -D Transfiere archivos de dispositivos especiales y de bloques (por ejemplo, sda, tty).
Para información detallada sobre el uso del comando rsync en Linux, consulte:
De los parámetros listados, los sistemas de archivos utilizados en Windows soportan plenamente solo la copia recursiva -r. NTFS y FAT32 no ofrecen soporte para las opciones -p, -g, -o y -D. Aunque las versiones más recientes de NTFS permiten el uso de enlaces simbólicos, no son compatibles con el estilo Unix, lo que puede hacer que la opción -l falle.
La preservación de las fechas de modificación -t (timestamp) es soportada, pero en algunos casos pueden ocurrir diferencias en la precisión utilizada. NTFS emplea una precisión de 100 nanosegundos, mientras que, en sistemas basados en Unix, esta precisión puede variar de 1 segundo a microsegundos.
Entre sistemas de archivos Unix más modernos, como ext4 y XFS, y NTFS, no deben ocurrir problemas en la verificación de timestamps. Sin embargo, cuando se trata de FAT32, la discrepancia se vuelve más significativa. Esto puede llevar a que rsync interprete archivos idénticos como diferentes debido a la variación en la fecha de modificación.
Existen opciones para sortear estas limitaciones, como se demostrará a continuación.
Ambiente
Los comandos utilizados en este artículo fueron probados en Slackware Linux 15, con el kernel 5.15.161, y deberían funcionar en cualquier sistema Linux o basado en Unix. El sistema de archivos raíz fue formateado con ext4, mientras que particiones NTFS y FAT32 fueron utilizadas en otros discos presentes en el mismo sistema.
En las pruebas, las particiones NTFS fueron montadas tanto con ntfs-3g, un controlador ampliamente utilizado en espacio de usuario desde hace años, como con el controlador NTFS nativo del kernel, introducido en la versión 5.15. El comportamiento de rsync fue el mismo en ambos casos.
Usando rsync con NTFS
En versiones más recientes de los sistemas de archivos usados en Linux y NTFS, rsync debería funcionar normalmente tanto entre particiones Linux y NTFS como entre particiones NTFS, incluso al utilizar el parámetro -a, que incluye opciones incompatibles con NTFS, como se discutió anteriormente.
Esto ocurre porque, al montar una partición NTFS, Linux simula permisos de archivo. Así, los parámetros no soportados son ignorados, y los archivos reciben propietario, grupo y permisos según se definieron durante el montaje.
Es esencial que las particiones sean montadas con permisos adecuados para el usuario que ejecutará el comando rsync. Si la unidad está montada con propiedad del usuario root, incluso si otros usuarios tienen permiso de lectura y escritura, rsync presentará un error al intentar definir la fecha de modificación:
failed to set times on "/carpeta/de/destino/": Operation not permitted (1)
Este error impedirá que rsync verifique correctamente si los archivos en el destino son idénticos a los de origen, resultando en una copia redundante de los archivos en cada ejecución del comando.
Para evitar este error, la partición debe ser montada con los permisos apropiados. Un ejemplo de configuración en el archivo /etc/fstab es:
/etc/fstab
/dev/sdXn /mnt/particion ntfs3 fmask=022,dmask=022,uid=1000,gid=100
Donde:
- uid=1000 Reemplace 1000 por el ID del usuario.
- gid=100 Reemplace 100 por el ID del grupo del usuario.
- fmask=022 Concede permiso total para el propietario del archivo y permisos de lectura y ejecución para el grupo y otros usuarios.
- dmask=022 Concede permiso total para el propietario del directorio y permisos de lectura y ejecución para el grupo y otros usuarios.
Con los permisos adecuados, rsync puede ser utilizado con las opciones convencionales:
$ bash
rsync -av /origen/ /destino/
Después de la primera ejecución y la copia de los archivos al destino, ejecute el comando nuevamente para verificar si los archivos se copian se copien en el segundo intento. Si es así, rsync falló al comparar los timestamps. Si todo está correcto, en la segunda ejecución, ningún archivo debe ser transferido.
Si el comando falla debido a permisos o al uso de controladores más antiguos, puede ejecutarlo utilizando solo los parámetros compatibles con NTFS:
$ bash
rsync -rtv /origen/ /destino/
En este ejemplo, rsync se ejecuta con las siguientes opciones:
- -r Habilita el modo recursivo.
- -t Preserva la fecha de modificación (timestamp).
- -v Muestra detalles de la transferencia (verbose).
Use el parámetro --modify-window
NTFS puede mostrar pequeñas diferencias en la precisión de los timestamps en comparación con sistemas basados en Unix. Para evitar esta limitación, use el parámetro --modify-window, que permite un margen de error al comparar timestamps. Por ejemplo:
$ bash
rsync -rtv --modify-window=1 /origen/ /destino/
Esto informa a rsync para considerar los timestamps iguales si la diferencia entre ellos es de hasta 1 segundo.
Usando rsync con FAT32
FAT32 es limitado en términos de timestamps, con baja precisión, no almacena la hora de acceso y presenta problemas de zona horaria. Estas características lo hacen inadecuado para escenarios donde la precisión temporal es crucial, como en copias de seguridad o sincronización de archivos.
Para ejecutar rsync con FAT32 preservando timestamps, use el comando:
$ bash
rsync -rtv --modify-window=1 /origen/ /destino/
La opción --modify-window=1 instruye a rsync a considerar los timestamps iguales si la diferencia entre ellos es de hasta 1 segundo. Si el comando no funciona con ese valor, intente usar 2 segundos. Siempre ejecute el comando nuevamente para verificar si los archivos serán transferidos en la segunda ejecución; se copiarán solo si rsync falla al verificar el timestamp.
Use el parámetro --size-only
Si no necesita preservar las marcas de tiempo y desea evitar problemas relacionados con la precisión, utilice la opción --size-only. Esto hace que rsync considere sólo el tamaño de los archivos al decidir si un archivo debe ser copiado.
$ bash
rsync -rv --size-only /origen/ /destino/
Tenga en cuenta que los parámetros -t y --modify-window fueron removidos del comando, ya que se usan para manejar timestamps y son incompatibles con la opción --size-only, que desactiva la verificación de timestamps.
Conclusión
Al usar rsync con sistemas de archivos NTFS o FAT32, es crucial prestar atención a las opciones de montaje de las particiones, ya que los permisos y propiedades de archivos son limitaciones de estos sistemas. Parámetros como --modify-window y --size-only ayudan a sortear problemas de precisión de timestamps y garantizan una sincronización más eficiente.
Referencias
La página del manual (man page) de rsync fue consultada en la elaboración de este artículo.
- https://www.quora.com/What-are-some-rsync-hacks/answer/Raman-Kathpalia?share=68335132&srid=hfE13
- https://stackoverflow.com/questions/31229207/rsync-on-fat32-and-ntfs