Data / ora dei file copiati sull'unità USB


13

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

  1. 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/
    
  2. 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
    
  3. 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
    
  4. 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.

  1. 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.
    
  2. 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.


Vuoi creare un altro file system nell'unità USB, ad esempio un ext4file system linux ? (Il supporto in linux per i file system proprietari Microsoft, FAT32, exFAT, NTFS, ha alcuni limiti.) Vedi questo link che suggerisce non solo ext4ma anche udfcome alternative ai file system proprietari Microsoft.
sudodus,

Risposte:


17

Il problema con la modifica dei secondi del timestamp deriva dal fatto che un filesystem VFAT (sì, anche FAT32) memorizza il tempo di modifica con una risoluzione di soli 2 secondi.

Apparentemente, fintanto che il filesystem è montato, il driver del filesystem memorizza nella cache i timestamp accurati con una risoluzione di 1 secondo (probabilmente per soddisfare i requisiti POSIX), ma una volta che il filesystem è smontato, le cache vengono cancellate e vedrai cosa è effettivamente registrato su la directory del filesystem.

La differenza di due ore tra il PC e il laptop è probabilmente dovuta alle diverse impostazioni del fuso orario e / o alle diverse opzioni di montaggio predefinite per il file system VFAT. (Immagino che ti trovi in ​​un fuso orario il cui offset UTC è attualmente di 2 ore, positivo o negativo.)

Internamente, Linux utilizza i timestamp UTC su filesystem in stile Unix; ma sui filesystem VFAT, il default (corrente) è di usare l'ora locale sui timestamp del filesystem VFAT, perché è quello che ha fatto MS-DOS e Windows fa ancora. Ma ci sono due opzioni di mount che possono influire su questo: puoi specificare l'opzione di mount tz=UTCper usare timestamp basati su UTC su filesystem VFAT, oppure puoi usare time_offset=<minutes>per specificare esplicitamente l'offset del fuso orario da usare con questo particolare filesystem.

È possibile che le opzioni di montaggio predefinite per VFAT siano cambiate tra Ubuntu 14.04 e 16.04, all'interno del kernel o del udisksservizio di supporto per supporti rimovibili, determinando la differenza di due ore che vedi.


La ringrazio per la risposta. Ho completato la mia domanda con l'output di mount | grep CORSAIRsul mio laptop, che è effettivamente diverso dall'output sul mio PC. Inoltre, hai ragione, mi trovo in Europa centrale nel fuso orario CEST (= UTC + 2).
K. Gabor,

Nessuna di queste uscite di mount sembra includere alcuna opzione di mount che influisca sui timestamp, quindi penso che la gestione predefinita per i timestamp VFAT debba essere stata modificata a livello di kernel da qualche parte tra quelle versioni di Ubuntu. Apparentemente moderno udisksdovrebbe rispettare le opzioni di montaggio specificate in /etc/fstab, se si scrive una voce per l'unità USB su di essa.
telcoM,

0

Anche se ho scritto nella mia domanda che "Vorrei mantenere il vfatfile system sulle mie unità USB", alla fine li ho riformattati in ntfsfile system. Sia Linux che Windows sono in grado di gestire ntfse sembra non mostrare lo strano fenomeno con i timestamp, raffigurati sopra.


Sì, NTFS memorizza tutti i timestamp dei file come numeri a 64 bit in base all'ora UTC, quindi hanno una risoluzione di 100 nanosecondi e l'intervallo di date va dal 1 ° gennaio 1601 al 28 maggio 60056. Dovrebbe essere più che sufficiente. Ancora più importante, non c'è posto per il tipo di ambiguità del fuso orario che hanno i filesystem VFAT.
telcoM,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.