Ho un problema con i timestamp dei file copiati dal mio PC o laptop su unità USB: l'ora dell'ultima modifica del file originale e quella del file copiato sono diverse. Pertanto, la sincronizzazione dei file tra il mio PC e la mia unità USB è piuttosto complicata.
Una descrizione dettagliata
Copio un file arbitrario dal mio PC / laptop su un'unità USB utilizzando la GUI o con il comando
cp -a file.txt /media/gabor/CORSAIR/
Controllo l'ora dell'ultima modifica del file originale:
$ 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
Controllo l'ora dell'ultima modifica del file copiato:
$ 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
Come puoi vedere, i secondi dell'ultima modifica del file copiato vengono troncati a zero cifre decimali. Tuttavia, se inserisco il 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
Ottengo l'output The last modification times are equal.
La situazione cambia se smonto e rimonto l'unità USB ed eseguo di nuovo gli ultimi due comandi:
$ 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.
Quindi, dopo il rimontaggio, il tempo di ultima modifica del file copiato viene ulteriormente ridotto di un secondo. Un ulteriore smontaggio e rimontaggio, tuttavia, non influisce più sull'ultima modifica. Inoltre, il test sui file ora mostra che il file sul PC è più recente (anche se non lo è).
La situazione è ulteriormente complicata dal fatto che l'ora dell'ultima modifica dei file è mostrata in modo diverso sul mio PC e sul mio laptop , la differenza è esattamente di 2 ore, sebbene l'impostazione di data e ora sia la stessa sul mio PC e sul mio laptop!
Ulteriori informazioni
Sia il mio PC che il mio laptop mostrano il comportamento descritto sopra. Ho Ubuntu 14.04.5 (fidato) sul mio PC e Ubuntu 16.04.2 (xenial) sul mio laptop.
Le mie unità USB hanno il file system vfat. L'output di mount | grep CORSAIR
sul mio PC è
/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)
L'output di mount | grep CORSAIR
sul mio laptop è
/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)
Le altre mie unità USB mostrano lo stesso comportamento.
Domanda
La differenza negli ultimi tempi di modifica può essere eliminata in qualche modo? Ad esempio, usando altri parametri durante il montaggio / smontaggio? O è un bug in Ubuntu?
Vorrei ottenere che i timestamp dei file originali e copiati siano esattamente gli stessi, in modo che la sincronizzazione possa essere eseguita in modo più efficiente. Inoltre, vorrei mantenere il file system vfat sulle mie unità USB, in modo da poterle utilizzare anche su Windows.
ext4
file system linux ? (Il supporto in linux per i file system proprietari Microsoft, FAT32, exFAT, NTFS, ha alcuni limiti.) Vedi questo link che suggerisce non soloext4
ma ancheudf
come alternative ai file system proprietari Microsoft.