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
Kopiuję dowolny plik z komputera / laptopa na dysk USB za pomocą GUI lub za pomocą polecenia
cp -a file.txt /media/gabor/CORSAIR/
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
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
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.
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.
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.
ext4
system 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,ext4
ale takżeudf
jako alternatywę dla zastrzeżonych systemów plików Microsoft.