Linux xfs文件系统stat命令Birth字段为空的原因探究
在Linux平台找出某个目录下创建时间最早的文件,测试验证脚本结果是否准确的过程中发现一个很有意思的现象,stat命令在一些平台下Birth字段有值,而在一些平台则为空值,如下所示:
RHEL 8.7下, XFS文件系统
[mysql@mysqlu02 ~]$ more /etc/redhat-release
Red Hat Enterprise Linux release 8.7 (Ootpa)
[mysql@mysqlu02 ~]$ touch test.txt
[mysql@mysqlu02 ~]$ stat test.txt
File: test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd05h/64773d Inode: 144 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 801/ mysql) Gid: ( 800/ mysql)
Access: 2023-05-06 17:09:44.428050549 +0800
Modify: 2023-05-06 17:09:44.428050549 +0800
Change: 2023-05-06 17:09:44.428050549 +0800
Birth: 2023-05-06 17:09:44.428050549 +0800

RHEL 7.9 XFS文件系统
[oracle@KerryDB ~]$ more /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
[oracle@KerryDB ~]$ touch test.txt
[oracle@KerryDB ~]$ stat test.txt
File: ‘test.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd03h/64771d Inode: 4238838 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 700/ oracle) Gid: ( 600/oinstall)
Access: 2023-05-06 17:03:42.964517675 +0800
Modify: 2023-05-06 17:03:42.964517675 +0800
Change: 2023-05-06 17:03:42.964517675 +0800
Birth: -
[oracle@KerryDB ~]$

stat命令的Birth字段表示文件的创建时间,该属性是ext4的新功能(当然也适用于xfs文件系统),也称为crtime或btime,但是当前两个测试环境的文件系统为xfs,之前也在xfs文件系统中测试过,发现xfs不支持creation time. 但是从xfs v5开始,xfs已经支持creation time,文档[1]中已有阐述,如下所示:
/* version 5 filesystem (inode version 3) fields start here */
__le32 di_crc;
__be64 di_changecount;
__be64 di_lsn;
__be64 di_flags2;
__be32 di_cowextsize;
__u8 di_pad2[12];
xfs_timestamp_t di_crtime;
__be64 di_ino;
uuid_t di_uuid;
};
*di_crtime*::
Specifies the time when this inode was created.
但是上面这个差异现象,还是让我有点好奇,因为两个测试环境对应的xfs版本都是v5,如下所示。
KerryDB这台机器的xfs版本信息:
Oracle用户:
$ uname -r
3.10.0-1160.80.1.el7.x86_64
$ dmesg | grep -iE 'xfs.*\s+mounting' | head -1
[ 4.041026] XFS (dm-0): Mounting V5 Filesystem
root用户:
# xfs_db -r /dev/mapper/vg00-home
xfs_db> version
versionnum [0xb4b5+0x18a] = V5,NLINK,DIRV2,ATTR,ALIGN,LOGV2,EXTFLG,MOREBITS,ATTR2,LAZYSBCOUNT,PROJID32BIT,CRC,FTYPE
xfs_db>
mysqlu02这台机器的xfs版本信息:
mysql用户:
$ dmesg | grep -iE 'xfs.*\s+mounting' | head -1
[ 7.654324] XFS (dm-0): Mounting V5 Filesystem
root用户:
# xfs_db -r /dev/mapper/vg00-home
xfs_db> version
versionnum [0xb4b5+0x18a] = V5,NLINK,DIRV2,ATTR,ALIGN,LOGV2,EXTFLG,MOREBITS,ATTR2,LAZYSBCOUNT,PROJID32BIT,CRC,FTYPE,FINOBT,SPARSE_INODES,REFLINK
xfs_db>
那么到底是什么原因导致。Google搜索了相关资料,原来,如果stat命令查看xfs文件系统的文件时,如果要Birth字段不显示空置,必须满足几个条件,一个是xfs的版本为v5,另外,对操作系统内核版本也有要求(如下所示)
stat “now prints file creation time when supported by the file system, on GNU Linux systems with glibc >= 2.28 and kernel >= 4.11.”
KerryDB这台服务器内核信息如下所示
$ uname -r
3.10.0-1160.80.1.el7.x86_64
mysqlu02这台服务器的内核信息如下所示:
$ uname -r
4.18.0-425.3.1.el8.x86_64
如上所示,stat命令Birth字段为空置的操作系统内核版本为3.10.0,不满足条件kernerl >=4.11 所以stat命令显示空值。
参考资料
1: https://git.kernel.org/pub/scm/fs/xfs/xfs-documentation.git/tree/design/XFS_Filesystem_Structure/ondisk_inode.asciidoc
Linux xfs文件系统stat命令Birth字段为空的原因探究的更多相关文章
- Linux学习 - 文件系统常用命令
一.文件系统查看命令df df [选项] [挂载点] -a 查看所有文件系统信息,包括特殊文件系统 -h 使用习惯单位显示容量 -T 显示文件系统类型 -m 以MB为单位显示容量 -k 以KB为单位显 ...
- linux fack 文件系统修复命令
[简介] fsck命令被用于检查并且试图修复文件系统中的错误.当文件系统发生错误四化,可用fsck指令尝试加以修复. [选项]必要参数 -a 非互交模式,自动修复 -c 检查是否存在有损坏的区块. - ...
- linux xfs文件系统无法用readdir获取dirent文件类型d_type则用stat获取暨stat函数讲解
stat函数讲解 表头文件: #include <sys/stat.h> #include <unistd.h>定义函数: int stat ...
- Linux高级运维 第四章 文件的基本管理和XFS文件系统备份恢复
4.1 Linux系统目录结构和相对/绝对路径 4.1.1系统目录结构 在windows系统中,查看文件先进入相应的盘符,然后进入文件目录 在windows中,它是多根 c:\ d:\ e ...
- Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令
通过前面两篇博客,我们介绍了Linux系统的权限管理.Linux权限管理之ACL权限 介绍了通过设定 ACL 权限,我们为某个用户指定某个文件的特定权限,这在Linux只能对于一个文件只能有所有者权限 ...
- Linux学习之文件系统常用命令(七)
Linux文件系统常用命令 目录 df命令 du命令 fsck命令 dump2fs命令 df命令 df命令 统计文件系统的占有情况,分区用了多少空间,还剩多少空间 df [选项] [挂载点] 选项: ...
- linux文件系统相关命令(df/du/fsck/dumpe2fs)
一.文件系统查看命令df 格式 df [选项] [挂载点] 选项 名称 作用 -a 显示所有的文件系统信息,包括特殊文件系统,如/proc,/sysfs -h 使用习惯单位显示容量,如KB,MB或GB ...
- Linux 文件系统常用命令
文件系统查看命令df df:查看分区,单位默认是KB df -h 统计目录或文件大小du du /etc/:会列出/etc/目录下的所有子目录所占的空间,最后给出/etc/目录的大小,属于高负载命令, ...
- centos8平台使用xfs文件系统
一,xfs文件系统的特点 XFS是一种高性能的日志文件系统, 它是由SGI公司设计的,被称为业界最先进的.最具可升级性的文件系统技术. 最初是从unix(irix)移植到linux系统上的. 从cen ...
- linux根文件系统制作
在嵌入式中移植的内核下载到开发板上,是没有办法真正的启动Linux操作系统的,会出现无法加载文件系统的错误. 那么根文件系统在系统启动中到底是什么时候挂载的呢?先将/dev/ram0挂载,而后执行/l ...
随机推荐
- 几种C#实现播放声音的方法 DirectX、SoundPlayer等
第一种是利用DirectX 1.安装了DirectX SDK(有9个DLL文件).这里我们只用到MicroSoft.DirectX.dll 和 Microsoft.Directx.DirectSou ...
- [BUUCTF]HCTF 2018WarmUp1 write up
ctrl+U查看源代码, 如下: 访问提示中的source.php文件 发现显示了源码,且存在另一个PHP文件hint.php(提示.php),先查看文件内是否有信息 用file来传参,并且要绕过wh ...
- Pod概述
Pod的类型 Pod的类型有如下两个: 自主式Pod:自主式Pod的含义简白来说就是不是被控制器管理的Pod,另一种就是被控制管理的Pod,不被控制器管理的Pod你会发现,它一旦死亡的话,就没有人把它 ...
- 分布式 WEB应用中Session(会话管理)的变迁之路
一.Session 介绍 Session 一词直译为 "会话",意指有始有终的一系列动作/消息.Session 是 Web 应用蓬勃发展的产物之一.在 Web 应用中隐含有&quo ...
- C++ 猜数字
#include <iostream> #include <random> #include <limits> namespace random { std::ra ...
- 父组件传值给子组件时 ,watch props 监听不到解决方案
watch:{ data:{ immediate:true, handler:function(){ } } }
- 一连串div跟随鼠标移动
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 数据挖掘神经网络—R实现
神经网络 生物神经网络主要是指人脑的神经网络,它是人工神经网络的技术原型.人脑是人类思维的物质基础,思维的功能定位在大脑皮层,后者含有大约10^11个神经元,每个神经元又通过神经突触与大约103个其它 ...
- [PKM] 家庭数据中心
1 NAS(Network Attached Storage/网络附属存储) 1.1 NAS的定义 NAS(Network Attached Storage:网络附属存储):具备资料存储功能的装置.按 ...
- 解Bug之路-应用999线升高
前言 监控指标诚然是发现问题于微末之时的极佳手段,但指标往往有其表达的极限.在很多情况下,单独看一个黄金指标并不能表征系统的健康程度,反而有可能被其迷惑,进而忽略相关问题.(本文所提及的Linux K ...