Marcas de tiempo de los archivos copiados en la unidad USB

13

Tengo un problema con las marcas de tiempo de los archivos copiados de mi PC o computadora portátil a las unidades USB: la última hora de modificación del archivo original y la del archivo copiado son diferentes. Por lo tanto, sincronizar archivos entre mi PC y mi unidad USB es bastante engorroso.

Una descripción paso a paso.

  1. Copio un archivo arbitrario de mi PC / laptop a una unidad USB usando la GUI o con el comando

    cp -a file.txt /media/gabor/CORSAIR/
    
  2. Compruebo la hora de la última modificación del archivo original:

    $ ls -l --time-style=full-iso file.txt
    -rw-rw-r-- 1 gabor gabor 0 2018-09-22 15:09:23.317098281 +0200 file.txt
    
  3. Compruebo la última hora de modificación del archivo copiado:

    $ ls -l --time-style=full-iso /media/gabor/CORSAIR/file.txt
    -rw-r--r-- 1 gabor gabor 0 2018-09-22 15:09:23.000000000 +0200 /media/gabor/CORSAIR/file.txt
    
  4. Como puede ver, los segundos en el último tiempo de modificación del archivo copiado se truncan a cero dígitos decimales. Sin embargo, si ingreso el comando

    if ! [ file.txt -nt /media/gabor/CORSAIR/file.txt ] && ! [ file.txt -ot /media/gabor/CORSAIR/file.txt ]; then echo "The last modification times are equal."; fi
    

Me sale la salida The last modification times are equal.

  1. La situación cambia si desmonto y vuelvo a montar la unidad USB y ejecuto los dos últimos comandos nuevamente:

    $ ls -l --time-style=full-iso /media/gabor/CORSAIR/file.txt
    -rw-r--r-- 1 gabor gabor 0 2018-09-22 15:09:22.000000000 +0200 /media/gabor/CORSAIR/file.txt
    $ if [ file.txt -nt /media/gabor/CORSAIR/file.txt ]; then echo "The file is newer on the PC."; fi
    The file is newer on the PC.
    
  2. Entonces, después del remontaje, el tiempo de última modificación del archivo copiado se reduce aún más en un segundo. Sin embargo, desmontar y volver a montar más, ya no afecta el tiempo de la última modificación. Además, la prueba en los archivos ahora muestra que el archivo en la PC es más nuevo (aunque no lo es).

La situación se complica aún más por el hecho de que la última hora de modificación de los archivos se muestra de manera diferente en mi PC y en mi computadora portátil , la diferencia es exactamente 2 horas, ¡aunque la configuración de fecha y hora es la misma en mi PC y en mi computadora portátil!

Más información

Tanto mi PC como mi computadora portátil muestran el comportamiento descrito anteriormente. Tengo Ubuntu 14.04.5 (confiable) en mi PC y Ubuntu 16.04.2 (xenial) en mi computadora portátil.

Mis unidades USB tienen sistema de archivos vfat. La salida de mount | grep CORSAIR en mi PC es

/dev/sdb1 on /media/gabor/CORSAIR type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)

La salida de mount | grep CORSAIR en mi computadora portátil es

/dev/sdb1 on /media/gabor/CORSAIR type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)

Mis otras unidades USB muestran el mismo comportamiento.

Pregunta

¿Se puede eliminar la diferencia en los últimos tiempos de modificación de alguna manera? Por ejemplo, ¿usando otros parámetros en el montaje / desmontaje? ¿O es un error en Ubuntu?

Me gustaría lograr que las marcas de tiempo de los archivos originales y copiados sean exactamente las mismas, de modo que la sincronización se pueda hacer de manera más eficiente. Además, me gustaría mantener el sistema de archivos vfat en mis unidades USB, para poder usarlas también en Windows.

K. Gabor
fuente
¿Está dispuesto a crear otro sistema de archivos en la unidad USB, por ejemplo, un ext4sistema de archivos de Linux ? (El soporte en Linux para los sistemas de archivos propietarios de Microsoft, FAT32, exFAT, NTFS, tiene algunos límites). Vea este enlace que sugiere no solo ext4sino también udfcomo alternativas a los sistemas de archivos propietarios de Microsoft.
sudodus el

Respuestas:

17

El problema con el cambio de segundos de la marca de tiempo proviene del hecho de que un sistema de archivos VFAT (sí, incluso FAT32) almacena el tiempo de modificación con una resolución de solo 2 segundos.

Aparentemente, siempre y cuando el sistema de archivos esté montado, el controlador del sistema de archivos almacena en caché las marcas de tiempo con una resolución de 1 segundo (probablemente para satisfacer los requisitos de POSIX), pero una vez que el sistema de archivos se desmonta, las memorias caché se borran y verá lo que realmente está grabado en El directorio del sistema de archivos.

La diferencia de dos horas entre la PC y la computadora portátil probablemente se deba a diferentes configuraciones de zona horaria y / o diferentes opciones de montaje predeterminadas para el sistema de archivos VFAT. (Supongo que se encuentra en una zona horaria cuyo desplazamiento UTC es actualmente de 2 horas, ya sea positivo o negativo).

Internamente, Linux usa marcas de tiempo UTC en sistemas de archivos de estilo Unix; pero en los sistemas de archivos VFAT, el valor predeterminado (actual) es usar la hora local en las marcas de tiempo del sistema de archivos VFAT, porque eso es lo que hizo MS-DOS y Windows todavía lo hace. Pero hay dos opciones de montaje que pueden afectar esto: puede especificar la opción de montaje tz=UTCpara usar marcas de tiempo basadas en UTC en sistemas de archivos VFAT, o puede usar time_offset=<minutes>para especificar explícitamente el desplazamiento de zona horaria que se utilizará con este sistema de archivos en particular.

Es posible que las opciones de montaje predeterminadas para VFAT hayan cambiado entre Ubuntu 14.04 y 16.04, ya sea dentro del núcleo o del udisksservicio auxiliar de medios extraíbles, lo que resulta en la diferencia de dos horas que ve.

telcoM
fuente
Gracias por su respuesta. Completé mi pregunta con la salida de mount | grep CORSAIRmi computadora portátil, que de hecho es diferente de la salida de mi PC. Además, tiene razón, estoy ubicado en Europa central en la zona horaria CEST (= UTC + 2).
K. Gabor
Ninguna de esas salidas de montaje parece incluir ninguna opción de montaje que afecte las marcas de tiempo, por lo que creo que el manejo predeterminado de las marcas de tiempo VFAT debe haberse cambiado a nivel del núcleo en algún lugar entre esas versiones de Ubuntu. Aparentemente moderno udisksdebe respetar las opciones de montaje especificadas en /etc/fstab, si escribe una entrada para su unidad USB.
telcoM
0

Aunque escribí en mi pregunta que "me gustaría mantener el vfatsistema de archivos en mis unidades USB", finalmente los volví a formatear al ntfssistema de archivos. Tanto Linux como Windows pueden manejar ntfsy parece no mostrar el extraño fenómeno con las marcas de tiempo, que se muestran arriba.

K. Gabor
fuente
Sí, NTFS almacena todas las marcas de tiempo de archivo como números de 64 bits en función de la hora UTC, por lo que tienen una resolución de 100 nanosegundos y el rango de fechas es del 1 de enero de 1601 al 28 de mayo de 60056. Eso debería ser más que suficiente. Más importante aún, no hay lugar para el tipo de ambigüedad de zona horaria que tienen los sistemas de archivos VFAT.
telcoM