我尝试了默认保留期,例如将保留日期设置为 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?
2. 为什么这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