Znaczniki czasu plików skopiowanych na dysk USB


13

Mam problem ze znacznikami czasowymi plików skopiowanych z komputera lub laptopa na dyski USB: czas ostatniej modyfikacji oryginalnego pliku i skopiowanego pliku jest inny. Dlatego synchronizacja plików między komputerem a napędem USB jest dość kłopotliwa.

Opis krok po kroku

  1. Kopiuję dowolny plik z komputera / laptopa na dysk USB za pomocą GUI lub za pomocą polecenia

    cp -a file.txt /media/gabor/CORSAIR/
    
  2. Sprawdzam czas ostatniej modyfikacji oryginalnego pliku:

    $ 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. Sprawdzam czas ostatniej modyfikacji skopiowanego pliku:

    $ 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. Jak widać, sekundy ostatniej modyfikacji zmodyfikowanego pliku są skracane do zerowych cyfr dziesiętnych. Jeśli jednak wprowadzę polecenie

    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
    

Dostaję wynik The last modification times are equal.

  1. Sytuacja zmienia się, jeśli odłączę i ponownie podłączę dysk USB i ponownie wykonam dwa ostatnie polecenia:

    $ 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. Dlatego po ponownym zamontowaniu czas ostatniej modyfikacji skopiowanego pliku jest dodatkowo skrócony o jedną sekundę. Dalsze odmontowywanie i ponowne podłączanie nie ma jednak wpływu na czas ostatniej modyfikacji. Poza tym test na plikach pokazuje teraz, że plik na komputerze jest nowszy (chociaż tak nie jest).

Sytuację dodatkowo komplikuje fakt, że czas ostatniej modyfikacji plików jest wyświetlany inaczej na moim komputerze i laptopie , różnica wynosi dokładnie 2 godziny, chociaż data i godzina są takie same na moim komputerze i laptopie!

Dalsza informacja

Zarówno mój komputer, jak i laptop pokazują zachowanie opisane powyżej. Mam Ubuntu 14.04.5 (zaufany) na komputerze i Ubuntu 16.04.2 (xenial) na laptopie.

Moje dyski USB mają system plików VFAT. Dane wyjściowe mount | grep CORSAIR na moim komputerze to

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

Wydajność mount | grep CORSAIR na moim laptopie to

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

Moje inne napędy USB wykazują to samo zachowanie.

Pytanie

Czy można w jakiś sposób wyeliminować różnicę w czasach ostatniej modyfikacji? Na przykład, używając innych parametrów podczas montowania / odmontowywania? Czy jest to błąd w Ubuntu?

Chciałbym osiągnąć, że znaczniki czasu oryginalnych i skopiowanych plików są dokładnie takie same, aby synchronizacja mogła być wykonywana bardziej wydajnie. Chciałbym również zachować system plików vfat na moich dyskach USB, aby móc ich używać również w systemie Windows.


Czy chcesz utworzyć inny system plików na dysku USB, na przykład ext4system plików Linux ? (Wsparcie w systemie Linux dla zastrzeżonych systemów plików Microsoft, FAT32, exFAT, NTFS, ma pewne ograniczenia.) Zobacz ten link, który sugeruje nie tylko, ext4ale także udfjako alternatywę dla zastrzeżonych systemów plików Microsoft.
sudodus

Odpowiedzi:


17

Problem ze zmianą sekund znacznika czasu wynika z faktu, że system plików VFAT (tak, nawet FAT32) przechowuje czas modyfikacji z rozdzielczością zaledwie 2 sekund.

Najwyraźniej, dopóki system plików jest zamontowany, sterownik systemu plików buforuje znaczniki czasu z dokładnością do 1 sekundy (prawdopodobnie w celu spełnienia wymagań POSIX), ale gdy system plików zostanie odmontowany, pamięci podręczne zostaną wyczyszczone i zobaczysz, co jest faktycznie zapisane katalog systemu plików.

Dwugodzinna różnica między komputerem a laptopem jest prawdopodobnie spowodowana różnymi ustawieniami strefy czasowej i / lub różnymi domyślnymi opcjami montażu systemu plików VFAT. (Zgaduję, że znajdujesz się w strefie czasowej, której przesunięcie UTC wynosi obecnie 2 godziny (dodatnie lub ujemne).

Wewnętrznie Linux używa znaczników czasu UTC w systemach plików w stylu Uniksa; ale w systemach plików VFAT (bieżącym) domyślnym ustawieniem jest używanie czasu lokalnego na znacznikach czasu systemu plików VFAT, ponieważ to właśnie zrobił MS-DOS i Windows nadal. Istnieją jednak dwie opcje montowania, które mogą na to wpłynąć: możesz określić opcję montowania, tz=UTCaby używać znaczników czasu opartych na UTC w systemach plików VFAT, lub możesz time_offset=<minutes>jawnie określić przesunięcie strefy czasowej, które ma być używane z tym konkretnym systemem plików.

Może się zdarzyć, że domyślne opcje montowania VFAT zmieniły się między Ubuntu 14.04 i 16.04, albo w jądrze, albo w udisksusłudze pomocniczej nośników wymiennych, co powoduje dwugodzinną różnicę, którą widzisz.


Dziękuję za Twoją odpowiedź. Skończyłem moje pytanie z wyjściem mount | grep CORSAIRna moim laptopie, który rzeczywiście różni się od wyjścia na moim komputerze. Poza tym masz rację, jestem w środkowej Europie w strefie czasowej CEST (= UTC + 2).
K. Gabor,

Żadne z tych wyjść nie wydaje się zawierać żadnych opcji montowania, które mogłyby wpłynąć na znaczniki czasu, więc myślę, że domyślna obsługa znaczników czasu VFAT musiała zostać zmieniona na poziomie jądra pomiędzy tymi wersjami Ubuntu. Najwyraźniej nowoczesne udiskspowinny szanować opcje montowania określone w /etc/fstab, jeśli napiszesz na nim wpis dotyczący napędu USB.
telcoM,

0

Chociaż w swoim pytaniu napisałem, że „chciałbym zachować vfatsystem plików na dyskach USB”, w końcu ponownie sformatowałem je do ntfssystemu plików. Zarówno Linux, jak i Windows potrafią sobie z ntfstym poradzić i wydaje się, że nie pokazuje to dziwnego zjawiska z przedstawionymi powyżej znacznikami czasu.


Tak, NTFS przechowuje wszystkie znaczniki czasu plików jako liczby 64-bitowe na podstawie czasu UTC, więc mają rozdzielczość 100 nanosekund, a zakres dat wynosi od 1 stycznia 1601 do 28 maja 60056. To powinno wystarczyć. Co ważniejsze, nie ma miejsca na taką dwuznaczność strefy czasowej, jaką mają systemy plików VFAT.
telcoM
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.