Horodatage des fichiers copiés sur une clé USB

13

J'ai un problème avec les horodatages des fichiers copiés depuis mon PC ou ordinateur portable vers des clés USB: la dernière heure de modification du fichier d'origine et celle du fichier copié sont différentes. Par conséquent, la synchronisation des fichiers entre mon PC et ma clé USB est assez compliquée.

Une description étape par étape

  1. Je copie un fichier arbitraire de mon PC / ordinateur portable sur une clé USB en utilisant l'interface graphique ou avec la commande

    cp -a file.txt /media/gabor/CORSAIR/
    
  2. Je vérifie la dernière heure de modification du fichier d'origine:

    $ 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. Je vérifie la dernière heure de modification du fichier copié:

    $ 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. Comme vous pouvez le voir, les secondes de la dernière heure de modification du fichier copié sont tronquées à zéro chiffre décimal. Cependant, si j'entre la commande

    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
    

Je reçois la sortie The last modification times are equal.

  1. La situation change si je démonte et remonte la clé USB et que j'exécute à nouveau les deux dernières commandes:

    $ 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. Ainsi, après le remontage, la dernière heure de modification du fichier copié est encore réduite d'une seconde. Cependant, le démontage et le remontage supplémentaires n'affectent plus la dernière modification. En outre, le test sur les fichiers montre maintenant que le fichier sur le PC est plus récent (bien qu'il ne le soit pas).

La situation est encore compliquée par le fait que la dernière heure de modification des fichiers est affichée différemment sur mon PC et sur mon ordinateur portable , la différence étant exactement de 2 heures, bien que le réglage de la date et de l'heure soit le même sur mon PC et sur mon ordinateur portable!

Plus d'informations

Mon PC et mon ordinateur portable affichent le comportement décrit ci-dessus. J'ai Ubuntu 14.04.5 (fidèle) sur mon PC et Ubuntu 16.04.2 (xenial) sur mon ordinateur portable.

Mes clés USB ont un système de fichiers vfat. La sortie de mount | grep CORSAIR sur mon PC est

/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 sortie de mount | grep CORSAIR sur mon ordinateur portable est

/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)

Mes autres clés USB affichent le même comportement.

Question

La différence dans les derniers temps de modification peut-elle être éliminée d'une manière ou d'une autre? Par exemple, utiliser d'autres paramètres lors du montage / démontage? Ou est-ce un bug dans Ubuntu?

Je voudrais que les horodatages des fichiers originaux et copiés soient exactement les mêmes, afin que la synchronisation puisse être effectuée plus efficacement. De plus, je voudrais conserver le système de fichiers vfat sur mes clés USB, afin de pouvoir également les utiliser sous Windows.

K. Gabor
la source
Êtes-vous prêt à créer un autre système de fichiers sur la clé USB, par exemple un ext4système de fichiers Linux ? (La prise en charge sous Linux des systèmes de fichiers propriétaires Microsoft, FAT32, exFAT, NTFS, a certaines limites.) Voir ce lien qui suggère non seulement ext4mais également udfcomme alternatives aux systèmes de fichiers propriétaires Microsoft.
sudodus

Réponses:

17

Le problème avec le changement d'horodatage en secondes vient du fait qu'un système de fichiers VFAT (oui, même FAT32) stocke l'heure de modification avec une résolution de seulement 2 secondes.

Apparemment, tant que le système de fichiers est monté, le pilote du système de fichiers met en cache des horodatages précis à une résolution d'une seconde (probablement pour satisfaire aux exigences POSIX), mais une fois que le système de fichiers est démonté, les caches sont effacés et vous verrez ce qui est réellement enregistré sur le répertoire du système de fichiers.

La différence de deux heures entre le PC et l'ordinateur portable est probablement due à différents paramètres de fuseau horaire et / ou à différentes options de montage par défaut pour le système de fichiers VFAT. (Je suppose que vous vous trouvez dans un fuseau horaire dont le décalage UTC est actuellement de 2 heures, positif ou négatif.)

En interne, Linux utilise des horodatages UTC sur les systèmes de fichiers de style Unix; mais sur les systèmes de fichiers VFAT, la valeur par défaut (actuelle) consiste à utiliser l'heure locale sur les horodatages du système de fichiers VFAT, car c'est ce que MS-DOS a fait et Windows continue de faire. Mais deux options de montage peuvent affecter cela: vous pouvez spécifier l'option de montage tz=UTCpour utiliser des horodatages basés sur UTC sur les systèmes de fichiers VFAT, ou vous pouvez utiliser time_offset=<minutes>pour spécifier explicitement le décalage de fuseau horaire à utiliser avec ce système de fichiers particulier.

Il se peut que les options de montage par défaut pour VFAT aient changé entre Ubuntu 14.04 et 16.04, soit dans le noyau, soit dans le udisksservice d'assistance sur support amovible, entraînant la différence de deux heures que vous voyez.

telcoM
la source
Merci pour votre réponse. J'ai terminé ma question avec la sortie de mount | grep CORSAIRsur mon ordinateur portable, qui est en effet différente de la sortie sur mon PC. Aussi, vous avez raison, je suis situé en Europe centrale dans le fuseau horaire CEST (= UTC + 2).
K. Gabor
Aucune de ces sorties de montage ne semble inclure d'options de montage susceptibles d'affecter les horodatages.Je pense donc que la gestion par défaut des horodatages VFAT doit avoir été modifiée au niveau du noyau quelque part entre ces versions d'Ubuntu. Apparemment moderne udisksdevrait respecter les options de montage spécifiées dans /etc/fstab, si vous écrivez une entrée pour votre clé USB.
telcoM
0

Bien que j'aie écrit dans ma question que "je voudrais garder le vfatsystème de fichiers sur mes clés USB", je les ai finalement reformatés en ntfssystème de fichiers. Linux et Windows peuvent le gérer ntfset il ne semble pas montrer le phénomène étrange avec les horodatages, décrits ci-dessus.

K. Gabor
la source
Oui, NTFS stocke tous les horodatages de fichiers sous forme de nombres 64 bits basés sur l'heure UTC, ils ont donc une résolution de 100 nanosecondes et la plage de dates s'étend du 1er janvier 1601 au 28 mai 60056. Cela devrait être plus que suffisant. Plus important encore, il n'y a pas de place pour le type d'ambiguïté de fuseau horaire des systèmes de fichiers VFAT.
telcoM