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
Saya menyalin file sewenang-wenang dari PC / laptop saya ke drive USB menggunakan GUI atau dengan perintah
cp -a file.txt /media/gabor/CORSAIR/
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
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
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.
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.
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.
sumber
ext4
sistem file linux ? (Dukungan di linux untuk sistem file berpemilik Microsoft, FAT32, exFAT, NTFS, memiliki beberapa batasan.) Lihat tautan ini yang menyarankan tidak hanyaext4
tetapi jugaudf
sebagai alternatif untuk sistem file berpemilik Microsoft.Jawaban:
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=UTC
untuk menggunakan stempel waktu berbasis UTC pada sistem file VFAT, atau Anda dapat menggunakantime_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
udisks
layanan pembantu media yang dapat dilepas, menghasilkan perbedaan dua jam seperti yang Anda lihat.sumber
mount | grep CORSAIR
pada laptop saya, yang memang berbeda dengan output pada PC saya. Juga, Anda benar, saya berada di Eropa tengah dalam zona waktu CEST (= UTC + 2).udisks
harus menghormati opsi pemasangan yang ditentukan/etc/fstab
, jika Anda menulis entri untuk drive USB Anda ke sana.Meskipun saya menulis dalam pertanyaan saya bahwa "Saya ingin menjaga
vfat
sistem file pada drive USB saya", akhirnya saya memformat ulang mereka kentfs
sistem file. Baik Linux dan Windows dapat menanganintfs
dan tampaknya tidak menunjukkan fenomena aneh dengan cap waktu, yang digambarkan di atas.sumber