Linux
XFS、GlusterFS v5.5 和 2038 年問題
我嘗試了預設保留期,例如將保留日期設置為 2071。當我執行 WORMing 時,一切似乎都正常。從 FUSE 和 Brick-Level 開始,所有節點上的保留時間都設置為 2071。此外,我啟用了該
storage.ctime
選項,以便時間戳也儲存在mdata xattr
. 但過了一會兒我觀察到,在 Brick-Level 上atime
(儲存保留)已切換到 1934:stat /gluster/brick1/glusterbrick/data/file3.txt File: /gluster/brick1/glusterbrick/data/file3.txt Size: 5 Blocks: 16 IO Block: 4096 regular file Device: 830h/2096d Inode: 115 Links: 2 Access: (0544/-r-xr--r--) Uid: ( 2000/ gluster) Gid: ( 2000/ gluster) Access: 1934-12-13 20:45:51.000000000 +0000 Modify: 2019-04-10 09:50:09.000000000 +0000 Change: 2019-04-10 10:13:39.703623917 +0000 Birth: -
從保險絲我得到正確的時間:\
stat /gluster/volume1/data/file3.txt File: /gluster/volume1/data/file3.txt Size: 5 Blocks: 1 IO Block: 131072 regular file Device: 2eh/46d Inode: 10812026387234582248 Links: 1 Access: (0544/-r-xr--r--) Uid: ( 2000/ gluster) Gid: ( 2000/ gluster) Access: 2071-01-19 03:14:07.000000000 +0000 Modify: 2019-04-10 09:50:09.000000000 +0000 Change: 2019-04-10 10:13:39.705341476 +0000 Birth: -
我發現 XFS 僅支持 32 位時間戳值。因此,在我的預期中,應該不可能將其設置
atime
為 2071。但起初它是 2071,後來由於 YEAR-2038 的問題,它被切換到了 1934。我在問自己:**1.為什麼可以
atime
在XFS上設置大於2038?
- 為什麼這
atime
會在一段時間後切換到 1970 年更低的時間?**我在 SLES15 機器上完成了所有工作。xfsprogs 是 4.15 版,Gluster 是 v5.5
可能的解釋為什麼 LastAccess 日期在磚級上更改,以及為什麼 XFS 可以有一個日期,例如可以在 INT32 欄位中儲存 2070:
令人驚奇的是,您可以將時間戳設置為遠高於 2038 的時間,並且這些時間戳也可以通過常用的系統工具顯示。一段時間後,觀察到值發生變化並映射到 1902-1969 之間的範圍。我懷疑最初成功設置超過 2038 個固定時間對應於時間戳的記憶體表示。這似乎允許設置超過 2038。另一方面,XFS的磁碟表示只允許最大值 2038,然後將上面的值映射到 1902-1969 的範圍,這是負數範圍一個有符號的 int32。這是我從這個執行緒中得到的: https ://lkml.org/lkml/2014/6/1/240