Cap waktu file yang disalin ke drive USB

13

Saya mempunyai masalah dengan cap waktu file yang disalin dari PC atau laptop ke drive USB: waktu modifikasi terakhir dari file asli dan file yang disalin berbeda. Oleh karena itu, menyinkronkan file antara PC saya dan drive USB saya cukup rumit.

Deskripsi langkah demi langkah

  1. Saya menyalin file sewenang-wenang dari PC / laptop saya ke drive USB menggunakan GUI atau dengan perintah

    cp -a file.txt /media/gabor/CORSAIR/
    
  2. Saya memeriksa waktu modifikasi terakhir dari file asli:

    $ 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. Saya memeriksa waktu modifikasi terakhir dari file yang disalin:

    $ 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. Seperti yang Anda lihat, detik dalam waktu modifikasi terakhir dari file yang disalin dipotong menjadi nol angka desimal. Namun, jika saya memasukkan perintah

    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
    

Saya mendapatkan hasilnya The last modification times are equal.

  1. Situasi berubah jika saya melepas dan memasang kembali drive USB dan saya menjalankan dua perintah terakhir lagi:

    $ 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. Jadi setelah remount, waktu modifikasi terakhir dari file yang disalin selanjutnya dikurangi satu detik. Namun, pelepasan dan penghitungan ulang lebih lanjut tidak lagi memengaruhi waktu modifikasi terakhir. Selain itu, tes pada file sekarang menunjukkan bahwa file pada PC lebih baru (meskipun tidak).

Situasi ini semakin rumit dengan fakta bahwa waktu modifikasi terakhir dari file ditampilkan secara berbeda pada PC saya dan pada laptop saya , perbedaannya persis 2 jam, meskipun pengaturan tanggal dan waktu sama pada PC saya dan pada laptop saya!

Informasi lebih lanjut

Baik PC dan laptop saya menunjukkan perilaku, yang dijelaskan di atas. Saya memiliki Ubuntu 14.04.5 (trusty) di PC saya dan Ubuntu 16.04.2 (xenial) di laptop saya.

Drive USB saya memiliki sistem file vfat. Output mount | grep CORSAIR pada PC saya adalah

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

Output mount | grep CORSAIR pada laptop saya adalah

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

Drive USB saya yang lain menunjukkan perilaku yang sama.

Pertanyaan

Bisakah perbedaan waktu modifikasi terakhir dihilangkan? Misalnya, menggunakan parameter lain saat pemasangan / pelepasan? Atau itu bug di Ubuntu?

Saya ingin mencapai bahwa cap waktu dari file asli dan yang disalin sama persis, sehingga sinkronisasi dapat dilakukan dengan lebih efisien. Juga, saya ingin menyimpan sistem file vfat di drive USB saya, sehingga saya dapat menggunakannya di Windows juga.

K. Gabor
sumber
Apakah Anda bersedia membuat sistem file lain di drive USB, misalnya ext4sistem file linux ? (Dukungan di linux untuk sistem file berpemilik Microsoft, FAT32, exFAT, NTFS, memiliki beberapa batasan.) Lihat tautan ini yang menyarankan tidak hanya ext4tetapi juga udfsebagai alternatif untuk sistem file berpemilik Microsoft.
sudodus

Jawaban:

17

Masalah dengan perubahan stempel waktu berasal dari fakta bahwa sistem file VFAT (ya, bahkan FAT32) menyimpan waktu modifikasi hanya dengan resolusi 2 detik.

Rupanya, selama filesystem diinstal, driver filesystem cache cap waktu akurat untuk resolusi 1 detik (mungkin untuk memenuhi persyaratan POSIX), tetapi begitu filesystem dilepas, cache dihapus dan Anda akan melihat apa yang sebenarnya direkam pada direktori sistem file.

Perbedaan dua jam antara PC dan laptop mungkin disebabkan oleh pengaturan zona waktu yang berbeda dan / atau opsi pemasangan standar yang berbeda untuk sistem file VFAT. (Saya menduga bahwa Anda berada di zona waktu dengan offset UTC saat ini 2 jam, baik positif atau negatif.)

Secara internal, Linux menggunakan stempel waktu UTC pada sistem file gaya Unix; tetapi pada sistem file VFAT, default (saat ini) adalah menggunakan waktu lokal pada cap waktu sistem file VFAT, karena itulah yang dilakukan oleh MS-DOS dan Windows. Tetapi ada dua opsi pemasangan yang dapat memengaruhi ini: Anda bisa menentukan opsi pemasangan tz=UTCuntuk menggunakan stempel waktu berbasis UTC pada sistem file VFAT, atau Anda dapat menggunakan time_offset=<minutes>untuk secara eksplisit menentukan offset zona waktu yang akan digunakan dengan sistem file tertentu ini.

Mungkin saja opsi pemasangan default untuk VFAT telah berubah antara Ubuntu 14.04 dan 16.04, baik di dalam kernel atau udiskslayanan pembantu media yang dapat dilepas, menghasilkan perbedaan dua jam seperti yang Anda lihat.

telcoM
sumber
Terima kasih atas jawaban Anda. Saya menyelesaikan pertanyaan saya dengan output mount | grep CORSAIRpada laptop saya, yang memang berbeda dengan output pada PC saya. Juga, Anda benar, saya berada di Eropa tengah dalam zona waktu CEST (= UTC + 2).
K. Gabor
Tidak satu pun dari output pemasangan tersebut yang tampaknya menyertakan opsi pemasangan apa pun yang akan memengaruhi stempel waktu, jadi saya pikir penanganan default untuk stempel waktu VFAT harus diubah pada tingkat kernel di suatu tempat di antara versi Ubuntu tersebut. Tampaknya modern udisksharus menghormati opsi pemasangan yang ditentukan /etc/fstab, jika Anda menulis entri untuk drive USB Anda ke sana.
telcoM
0

Meskipun saya menulis dalam pertanyaan saya bahwa "Saya ingin menjaga vfatsistem file pada drive USB saya", akhirnya saya memformat ulang mereka ke ntfssistem file. Baik Linux dan Windows dapat menangani ntfsdan tampaknya tidak menunjukkan fenomena aneh dengan cap waktu, yang digambarkan di atas.

K. Gabor
sumber
Ya, NTFS menyimpan semua cap waktu file sebagai angka 64-bit berdasarkan waktu UTC, sehingga mereka memiliki resolusi 100 nanodetik dan rentang tanggal dari 1 Januari 1601 hingga 28 Mei 60056. Itu seharusnya lebih dari cukup. Lebih penting lagi, tidak ada tempat untuk jenis ambiguitas zona waktu yang dimiliki oleh filesystem VFAT.
telcoM