Zeitstempel von Dateien, die auf ein USB-Laufwerk kopiert wurden


13

Ich habe ein Problem mit den Zeitstempeln von Dateien, die von meinem PC oder Laptop auf USB-Laufwerke kopiert wurden: Der letzte Änderungszeitpunkt der Originaldatei und der der kopierten Datei sind unterschiedlich. Daher ist das Synchronisieren von Dateien zwischen meinem PC und meinem USB-Laufwerk ziemlich umständlich.

Eine schrittweise Beschreibung

  1. Ich kopiere eine beliebige Datei von meinem PC / Laptop über die GUI oder mit dem Befehl auf ein USB-Laufwerk

    cp -a file.txt /media/gabor/CORSAIR/
    
  2. Ich überprüfe den letzten Änderungszeitpunkt der Originaldatei:

    $ 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. Ich überprüfe den letzten Änderungszeitpunkt der kopierten Datei:

    $ 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. Wie Sie sehen, werden die Sekunden in der letzten Änderungszeit der kopierten Datei auf null Dezimalstellen gekürzt. Allerdings wenn ich den befehl eingebe

    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
    

Ich bekomme die Ausgabe The last modification times are equal.

  1. Die Situation ändert sich, wenn ich das USB-Laufwerk aushänge und wieder einbinde und die letzten beiden Befehle erneut ausführe:

    $ 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. Nach dem erneuten Mounten verringert sich die letzte Änderungszeit der kopierten Datei um eine Sekunde. Ein weiteres Abhängen und erneutes Abhängen wirkt sich jedoch nicht mehr auf den Zeitpunkt der letzten Änderung aus. Außerdem zeigt der Test der Dateien jetzt, dass die Datei auf dem PC neuer ist (obwohl dies nicht der Fall ist).

Erschwerend kommt hinzu, dass die letzte Änderungszeit von Dateien auf meinem PC und auf meinem Laptop unterschiedlich angezeigt wird , wobei der Unterschied genau 2 Stunden beträgt, obwohl Datum und Uhrzeit auf meinem PC und auf meinem Laptop gleich eingestellt sind!

Weitere Informationen

Sowohl mein PC als auch mein Laptop zeigen das oben beschriebene Verhalten. Ich habe Ubuntu 14.04.5 (vertrauenswürdig) auf meinem PC und Ubuntu 16.04.2 (xenial) auf meinem Laptop.

Meine USB-Sticks haben ein VFAT-Dateisystem. Die Ausgabe von mount | grep CORSAIR auf meinem PC ist

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

Die Ausgabe von mount | grep CORSAIR auf meinem Laptop ist

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

Meine anderen USB-Laufwerke zeigen dasselbe Verhalten.

Frage

Kann der Unterschied in den letzten Änderungszeiten irgendwie beseitigt werden? Verwenden Sie zum Beispiel andere Parameter beim Ein- und Aushängen? Oder ist es ein Fehler in Ubuntu?

Ich möchte erreichen, dass die Zeitstempel der ursprünglichen und der kopierten Dateien genau gleich sind, damit die Synchronisierung effizienter durchgeführt werden kann. Außerdem möchte ich das vfat-Dateisystem auf meinen USB-Laufwerken behalten, damit ich sie auch unter Windows verwenden kann.


Möchten Sie ein anderes Dateisystem auf dem USB-Laufwerk erstellen, beispielsweise ein Linux- ext4Dateisystem? (Die Linux-Unterstützung für Microsoft-proprietäre Dateisysteme, FAT32, exFAT, NTFS, hat einige Grenzen.) Siehe diesen Link, der nicht nur, ext4sondern auch udfAlternativen zu Microsoft-proprietären Dateisystemen vorschlägt .
Sudodus

Antworten:


17

Das Problem mit der Änderung der Zeitstempelsekunden beruht auf der Tatsache, dass ein VFAT-Dateisystem (ja, sogar FAT32) die Änderungszeit nur mit einer Auflösung von 2 Sekunden speichert.

Anscheinend speichert der Dateisystemtreiber, solange das Dateisystem gemountet ist, Zeitstempel mit einer Auflösung von 1 Sekunde (wahrscheinlich um die POSIX-Anforderungen zu erfüllen). Sobald das Dateisystem jedoch nicht mehr gemountet ist, werden die Caches gelöscht und Sie sehen, worauf tatsächlich aufgezeichnet wurde das Dateisystemverzeichnis.

Der Zwei-Stunden-Unterschied zwischen dem PC und dem Laptop wird wahrscheinlich durch unterschiedliche Zeitzoneneinstellungen und / oder unterschiedliche Standardeinhängeoptionen für das VFAT-Dateisystem verursacht. (Ich vermute, dass Sie sich in einer Zeitzone befinden, deren UTC-Versatz derzeit 2 Stunden beträgt, entweder positiv oder negativ.)

Intern verwendet Linux UTC-Zeitstempel auf Dateisystemen im Unix-Stil. Auf VFAT-Dateisystemen wird jedoch standardmäßig die Ortszeit für Zeitstempel des VFAT-Dateisystems verwendet, da dies unter MS-DOS und nach wie vor unter Windows der Fall ist. Es gibt jedoch zwei Mount-Optionen, die sich darauf auswirken können: Sie können die Mount-Option tz=UTCfür die Verwendung von UTC-basierten Zeitstempeln in VFAT-Dateisystemen time_offset=<minutes>angeben oder den Zeitzonenversatz für dieses bestimmte Dateisystem explizit angeben.

Möglicherweise haben sich die Standard-Mount-Optionen für VFAT zwischen Ubuntu 14.04 und 16.04 geändert, entweder im Kernel oder im udisksHilfsdienst für Wechselmedien, was zu einem Unterschied von zwei Stunden führt.


Vielen Dank für Ihre Antwort. Ich habe meine Frage mit der Ausgabe von mount | grep CORSAIRauf meinem Laptop abgeschlossen, die sich in der Tat von der Ausgabe auf meinem PC unterscheidet. Sie haben auch Recht, ich befinde mich in Mitteleuropa in der Zeitzone MESZ (= UTC + 2).
K. Gabor

Keine dieser Mount-Ausgaben scheint Mount-Optionen zu enthalten, die sich auf die Zeitstempel auswirken würden. Ich denke, dass die Standardbehandlung für VFAT-Zeitstempel auf Kernel-Ebene irgendwo zwischen diesen Versionen von Ubuntu geändert worden sein muss. Offenbar udiskssollten moderne Mount-Optionen die in angegebenen einhalten /etc/fstab, wenn Sie einen Eintrag für Ihr USB-Laufwerk darauf schreiben.
TelcoM

0

Obwohl ich in meiner Frage geschrieben habe, dass "ich das vfatDateisystem auf meinen USB-Laufwerken behalten möchte ", habe ich sie schließlich neu in das ntfsDateisystem formatiert . Sowohl Linux als auch Windows können damit umgehen ntfsund es scheint nicht das seltsame Phänomen mit den oben abgebildeten Zeitstempeln zu zeigen.


Ja, NTFS speichert alle Dateizeitstempel als 64-Bit-Zahlen basierend auf der UTC-Zeit. Sie haben also eine Auflösung von 100 Nanosekunden und einen Datumsbereich vom 1. Januar 1601 bis zum 28. Mai 60056. Das sollte mehr als genug sein. Noch wichtiger ist, dass die Mehrdeutigkeit der Zeitzonen in den VFAT-Dateisystemen keinen Platz findet.
TelcoM
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.