Usb-Drive

複製到 USB 驅動器的文件的時間戳

  • October 3, 2018

我對從 PC 或筆記型電腦復製到 USB 驅動器的文件的時間戳有疑問:原始文件的最後修改時間和復製文件的最後修改時間不同。因此,在我的 PC 和我的 USB 驅動器之間同步文件是相當麻煩的。

一步一步的描述

  1. 我使用 GUI 或使用命令將任意文件從我的 PC/筆記型電腦復製到 USB 驅動器
cp -a file.txt /media/gabor/CORSAIR/
  1. 我檢查原始文件的最後修改時間:
$ 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
  1. 我檢查了複製文件的最後修改時間:
$ 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
  1. 如您所見,複製文件的最後修改時間中的秒數被截斷為零十進制數字。但是,如果我輸入命令
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

我得到輸出The last modification times are equal.

  1. 如果我解除安裝並重新安裝 USB 驅動器並再次執行最後兩個命令,情況會發生變化:
$ 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.
  1. 所以remount後,拷貝文件的最後修改時間進一步減少了一秒。但是,進一步解除安裝和重新安裝不再影響上次修改時間。此外,對文件的測試現在表明 PC 上的文件較新(儘管不是)。

由於文件的最後修改時間在我的 PC 和筆記型電腦上顯示的不同,情況變得更加複雜,差異正好是 2 小時,儘管我的 PC 和筆記型電腦上的日期和時間設置是相同的!

更多的資訊

我的 PC 和筆記型電腦都顯示了上述行為。我的 PC 上有 Ubuntu 14.04.5 (trusty),筆記型電腦上有 Ubuntu 16.04.2 (xenial)。

我的 USB 驅動器有 vfat 文件系統。mount | grep CORSAIR 我的電腦上的輸出是

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

mount | grep CORSAIR 我筆記型電腦上的輸出是

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

我的其他 USB 驅動器顯示相同的行為。

問題

可以以某種方式消除最後修改時間的差異嗎?例如,在安裝/解除安裝時使用其他參數?或者它是 Ubuntu 中的一個錯誤?

我想實現原始文件和復製文件的時間戳完全相同,這樣可以更有效地進行同步。另外,我想將 vfat 文件系統保留在我的 USB 驅動器上,以便我也可以在 Windows 下使用它們。

時間戳秒更改的問題來自於 VFAT(是的,甚至是 FAT32)文件系統以 2 秒的解析度儲存修改時間的事實。

顯然,只要文件系統被掛載,文件系統驅動程序就會記憶體精確到 1 秒解析度的時間戳(可能滿足 POSIX 要求),但是一旦文件系統被解除安裝,記憶體就會被清除,你會看到實際記錄的內容文件系統目錄。

PC 和筆記型電腦之間的兩小時差異可能是由不同的時區設置和/或 VFAT 文件系統的不同預設掛載選項引起的。(我猜您所在的時區的 UTC 偏移量目前為 2 小時,無論是正數還是負數。)

在內部,Linux 在 Unix 風格的文件系統上使用 UTC 時間戳;但是在 VFAT 文件系統上,(目前)預設值是在 VFAT 文件系統時間戳上使用本地時間,因為這是 MS-DOS 所做的,而 Windows 仍然如此。但是有兩個掛載選項會影響這一點:您可以指定掛載選項tz=UTC以在 VFAT 文件系統上使用基於 UTC 的時間戳,或者您可以使用time_offset=<minutes>顯式指定要與此特定文件系統一起使用的時區偏移量。

可能是 VFAT 的預設掛載選項在 Ubuntu 14.04 和 16.04 之間發生了變化,無論是在核心還是udisks可移動媒體幫助服務中,導致您看到兩個小時的差異。

引用自:https://unix.stackexchange.com/questions/470856