rsync no funciona entre NTFS / FAT y EXT

13

Tengo música que reproduzco en mi automóvil, desde una memoria USB FAT32. La carpeta que uso para poner canciones está almacenada en mi disco duro EXT4. Agrego / elimino / vuelvo a etiquetar canciones regularmente y ocasionalmente quiero rsynclos cambios en la memoria USB. Pero por alguna razón desconocida (¿tal vez permisos?), rsyncCopia todos los archivos cada vez en lugar de solo los modificados. Estoy llamando rsynccomo:

rsync -vrlptgD source dest

¿Cómo puedo hacer que funcione como quiero (es decir, saber cuándo un archivo no ha sido modificado y no copiarlo)?

wim
fuente

Respuestas:

17

La respuesta de Javier Rivera funciona, pero rsync tarda bastante en verificar y comparar todas las sumas de comprobación de archivos. Descubrí que usar la siguiente opción funcionó mejor para mí:

rsync -rtv --modify-window=1 /source /dest

El --modify-window=1interruptor permite una variación de ± 1s en las marcas de tiempo. Con esta opción habilitada, la comparación de marca de tiempo será más indulgente y analizará las minúsculas diferencias de tiempo entre los sistemas de archivos NTFS / FAT y Unix.

Fuente (ger): http://www.kai-hildebrandt.de/tutorials/rsync.html

PD: Tenga en cuenta que el horario de verano provocará transferencias completas de archivos dos veces al año. Vea aquí para más detalles y posibles soluciones.

Glutanimato
fuente
Esto es genial. También encontré la opción --iconvútil al pasar de la fuente de Linux a la MacOS de
destino
2
Por alguna razón, necesito usar modify-window=2porque =1todavía copia todos los archivos. Copiando de NTFS a FAT32. Después de eso está bien sin embargo.
Luc
Agregué la --size-onlybandera para omitir archivos que coinciden en tamaño
alexandre1985
1
@ alexandre1985: Eso omitirá archivos que cambien su contenido pero no su tamaño. Solo debe usarlo cuando solo desea hacer una copia de seguridad de los archivos que siempre cambian de tamaño cuando cambian de contenido, por ejemplo, porque los datos solo se agregan a ellos pero nunca se sobrescriben.
David Foerster
11

Las marcas de tiempo en FAT32 son demasiado diferentes de las de Unix para confiar en ellas para verificar los cambios de archivo, debe usar también el modificador -c, obligará a rsync a comparar todos los archivos para detectar cambios en lugar de confiar en las marcas de tiempo. Funcionará, pero es más lento.

Finalmente, hay un par de opciones en su comando que no pueden funcionar con los sistemas de archivos FAT32.

  • -l preservaré enlaces, FAT32 no tiene concepto de enlaces
  • -p intentará preservar el permiso, nuevamente no habrá permisos en FAT32
  • -Intentará conservar las marcas de tiempo de modificación, solo hay una marca de tiempo en FAT32
  • -g intentará preservar la propiedad del grupo, nuevamente no es compatible con FAT32
  • -D intentará preservar archivos y dispositivos especiales, ahora lo que viene aquí.

Como comenta htorque, las opciones no válidas no te harán daño, simplemente no harán nada. Pero debe agregar el modificador -c.

Esta:

rsync -vrc source dest

debería funcionar (al menos funciona en mi computadora).

Javier Rivera
fuente
3

Estaba teniendo un problema similar en OSX, y la respuesta de Glutanamate no ayudó. Algunos de los archivos difieren en una hora; Esto puede deberse a que tiendo a cruzar zonas horarias con relativa frecuencia. Otros archivos están desactivados por un día o incluso un mes. No estoy seguro de por qué es esto. La suma de comprobación en algunos de los archivos con marcas de tiempo muy diferentes muestra que, de hecho, son idénticos.

En cualquier caso, parece que la --size-onlyopción, que indica rsyncignorar las marcas de tiempo, funcionará para mis propósitos. -c/ --checksum(como lo menciona Javier) también funciona, pero lleva un poco más de tiempo. Lo cronometré y me llevó aproximadamente un minuto comparar las sumas de verificación para el GB más o menos en el subdirectorio con el que estoy trabajando. Por supuesto, la velocidad a la que esto sucederá dependerá de la unidad más lenta del sistema; en mi caso, esa es la tarjeta SD en mi teléfono. Sin embargo, eso fue después de que ya había estado haciendo algo de manipulación de archivos (incluida la suma de comprobación), por lo que muchos de los archivos pueden haber sido copiados en la memoria caché de RAM.

intuido
fuente
1

También debe evitar usar la popular opción -a. Mi recomendación sobre FAT32 es

 rsync -vrc --delete --progress --no-p source  destination

--no-p: sin permiso

--Eliminar: elimine archivos y carpetas no coincidentes en el destino (si realmente quiere esto)

--progreso: muestra el progreso durante la transferencia. Es bueno para archivos grandes.

Ahmad Yoosofan
fuente
1
Tengo un voto positivo de mí, aunque además -vrc, también lo hago-vrcz
Antony
0

Son demasiadas banderas (-vrlptgD) que estás usando. Recuerde, rsync es una utilidad de Linux y no funciona con Fat32 y NTFS de manera efectiva.

Tendrías que buscar trucos para poder usarlo.

Tratar:

rsync -rvh --size-only --progress --delete /path/to/ext4/ /path/to/fat32/

Más información aquí.

Raman Kathpalia
fuente