在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]

1: https://git.kernel.org/pub/scm/fs/xfs/xfs-documentation.git/tree/design/XFS_Filesystem_Structure/ondisk_inode.asciidoc

Linux xfs文件系统stat命令Birth字段为空的原因探究的更多相关文章

  1. Linux学习 - 文件系统常用命令

    一.文件系统查看命令df df [选项] [挂载点] -a 查看所有文件系统信息,包括特殊文件系统 -h 使用习惯单位显示容量 -T 显示文件系统类型 -m 以MB为单位显示容量 -k 以KB为单位显 ...

  2. linux fack 文件系统修复命令

    [简介] fsck命令被用于检查并且试图修复文件系统中的错误.当文件系统发生错误四化,可用fsck指令尝试加以修复. [选项]必要参数 -a 非互交模式,自动修复 -c 检查是否存在有损坏的区块. - ...

  3. linux xfs文件系统无法用readdir获取dirent文件类型d_type则用stat获取暨stat函数讲解

    stat函数讲解 表头文件:    #include <sys/stat.h>             #include <unistd.h>定义函数:    int stat ...

  4. Linux高级运维 第四章 文件的基本管理和XFS文件系统备份恢复

    4.1 Linux系统目录结构和相对/绝对路径 4.1.1系统目录结构 在windows系统中,查看文件先进入相应的盘符,然后进入文件目录 在windows中,它是多根  c:\    d:\   e ...

  5. Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令

    通过前面两篇博客,我们介绍了Linux系统的权限管理.Linux权限管理之ACL权限 介绍了通过设定 ACL 权限,我们为某个用户指定某个文件的特定权限,这在Linux只能对于一个文件只能有所有者权限 ...

  6. Linux学习之文件系统常用命令(七)

    Linux文件系统常用命令 目录 df命令 du命令 fsck命令 dump2fs命令 df命令 df命令 统计文件系统的占有情况,分区用了多少空间,还剩多少空间 df [选项] [挂载点] 选项: ...

  7. linux文件系统相关命令(df/du/fsck/dumpe2fs)

    一.文件系统查看命令df 格式 df [选项] [挂载点] 选项 名称 作用 -a 显示所有的文件系统信息,包括特殊文件系统,如/proc,/sysfs -h 使用习惯单位显示容量,如KB,MB或GB ...

  8. Linux 文件系统常用命令

    文件系统查看命令df df:查看分区,单位默认是KB df -h 统计目录或文件大小du du /etc/:会列出/etc/目录下的所有子目录所占的空间,最后给出/etc/目录的大小,属于高负载命令, ...

  9. centos8平台使用xfs文件系统

    一,xfs文件系统的特点 XFS是一种高性能的日志文件系统, 它是由SGI公司设计的,被称为业界最先进的.最具可升级性的文件系统技术. 最初是从unix(irix)移植到linux系统上的. 从cen ...

  10. linux根文件系统制作

    在嵌入式中移植的内核下载到开发板上,是没有办法真正的启动Linux操作系统的,会出现无法加载文件系统的错误. 那么根文件系统在系统启动中到底是什么时候挂载的呢?先将/dev/ram0挂载,而后执行/l ...

随机推荐

  1. tensorflow2.0+TF-lite 各种报错

    generic_type: type "InterpreterWrapper" is already registered! 原因:tensorflow2.5.0rc0版本太高,降 ...

  2. 记一个jdbc创建数据库、用户操作时,创建新用户提示CREATE USER权限问题

    手写存储表数据库信息,访问链接动态数据源操作: mysql: 1.root登录服务器 进入数据库 mysql -u root -p2.创建数据库 create database shop; shop ...

  3. 摘记:找到程式中 不會被執行到的 code

    定义 https://en.wikipedia.org/wiki/Unreachable_codeRemove unreachable code refactoringhttps://docs.mic ...

  4. tomcat非配置项的策略问题

    引用自:http://yaoyan.me/2017/04/Tomcat-config1/ tomcat非配置项的策略问题,参考官方文档:Non-Tomcat setting 大意如下: Tomcat配 ...

  5. JAVA重试机制多种方式深入浅出

    重试机制在分布式系统中,或者调用外部接口中,都是十分重要的. 重试机制可以保护系统减少因网络波动.依赖服务短暂性不可用带来的影响,让系统能更稳定的运行的一种保护机制. 为了方便说明,先假设我们想要进行 ...

  6. 一起听、一起看、一起唱掀起Z世代青年社交浪潮

    6月5日,声网Agora 联合人人都是产品经理在成都举办了主题为"社交泛娱乐APP运营增长力和新玩法解析"的沙龙.现场围绕社交泛娱乐新玩法解析以及出海的新机遇.支付痛点.增长.运营 ...

  7. Teamcenter_SOA开发:使用SOA登录Teamcenter

    本文Teamcenter SOA使用C++参考SOA的例子进行编写,以下代码为登录Teamcenter,代码工程在Teamcenter四层环境下运行. SOA的库文件.样例文件.帮助文件在Teamce ...

  8. 势如破竹的雷霆两招,微服务进阶Serverless

    ​在应用开发中,服务器的开发一直是最重要的部分之一.在服务器开发不断演进过程中,我们可以将它简单分为5个阶段: 物理机阶段->虚拟机阶段->云计算阶段->容器阶段->当前的Se ...

  9. Django之时区修改

    修改时区方法 环境:windows10 修改settings.py文件,修改TIME_ZONE和USE_TZ参数 TIME_ZONE = 'Asia/Shanghai' USE_TZ = False

  10. 搭建DHCP服务,实现自动分配地址

    DHCP实现原理 DHCP定义 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作.它是一种流行的Clien ...