我尝试了默认保留期,例如将保留日期设置为 2071。当我执行 WORMing 时,一切似乎都正常。从 FUSE 以及砖级来看,所有节点上的保留设置为 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: -
从 FUSE 我得到正确的 atime:\
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. 为什么XFS可以设置atime
大于2038?
2. 为什么atime
一段时间后会切换到 1970 年以下的时间?
我在 SLES15 机器上完成了所有操作。 xfsprogs 是版本 4.15,Gluster 是 v5.5
答案1
可能解释为什么 LastAccess 日期在块级别更改以及为什么 XFS 可以有一个日期,例如可以在 INT32 字段中存储 2070:
令人惊奇的是,您可以将 atime 的时间戳设置为远高于 2038,并且这些时间戳也可以通过常用的系统工具显示。一段时间后,观察到值发生变化并映射到 1902-1969 之间的范围。我怀疑最初成功设置的远超过 2038 个固定 atime 对应于在记忆中时间戳的表示。这似乎允许设置超过 2038。磁盘上另一方面,XFS 的表示只允许最大值 2038,上面的值则映射到范围 1902-1969,这是有符号 int32 的负数范围。这是我从该线程中获取的内容: https://lkml.org/lkml/2014/6/1/240