Linux

XFS、GlusterFS v5.5 和 2038 年問題

  • April 16, 2019

我嘗試了預設保留期,例如將保留日期設置為 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?

  1. 為什麼這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

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