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
Linux xfs文件系统stat命令Birth字段为空的原因探究

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 ~]$
Linux xfs文件系统stat命令Birth字段为空的原因探究

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


原文链接:https://www.cnblogs.com/kerrycode/p/17389560.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux xfs文件系统stat命令Birth字段为空的原因探究 - Python技术站

(0)
上一篇 2023年5月11日
下一篇 2023年5月11日

相关文章

  • Linux jar包部署启停脚本

    一、对jar包统一管理     一、重启脚本 app_dir为jar包存放路径,根据自己的情况进行填写,这里我放在了/mycloud目录下apps 中填写jar包的名称,多个jar包中间以空格分开(注:jar包名称可以不完全填写,这里只写了前半部分,不和其他的应用重名即可) #!/bin/bash app_dir=/mycloud apps=(mycloud…

    Linux 2023年4月12日
    00
  • Linux lpq命令

    下面是关于Linux lpq命令的详细讲解。 一、命令简介 lpq命令是一个用于显示打印队列状态的Linux命令,可以查看当前系统中打印机的队列,并显示队列中等待打印的作业信息。 二、命令格式 lpq命令的基本语法: lpq [-] [user@]host[:destination] [queue(s)] 三、命令参数 lpq命令支持的参数如下: 参数 说明…

    Linux 2023年3月28日
    00
  • linux gtest从零开始

    0)gtest是什么gtest是一个跨平台的C++测试框架,google作品。它支持自动发现测试,断言集,用户定义的断言,death测试,致命与非致命的失败,类型参数化测试,各类运行测试的选项和XML的测试报告。 (1)下载gtest地址:http://code.google.com/p/googletest/downloads/list笔者下载的版本是1.…

    Linux 2023年4月11日
    00
  • Linux服务器下Nginx与Apache共存的实现方法分析

    以下是“Linux服务器下Nginx与Apache共存的实现方法分析”的完整使用攻略,包含两个示例说明。 安装Nginx和Apache 打开终端。在Linux系统中,您可以通过下“Ctrl + T”组合键来打开终端。 更新软件包列表。在终端中输入以下命令: sudo apt-get update 安装Ngin服务器。在终端中输入以下命令: sudo apt-…

    Linux 2023年5月13日
    00
  • 阿里云服务器CentOS服务器初始化设置步骤

    接下来我将详细讲解“阿里云服务器CentOS服务器初始化设置步骤”的完整攻略。 初始设置 当你获得新的阿里云服务器时,需要执行一些初始的设置。这些设置包括: 1. 修改密码 初始密码是一组随机生成的密码,你需要修改为自己的密码,具体步骤如下: 使用SSH连接服务器 登录获取的初始密码 输入命令passwd,然后按照提示输入当前密码和新密码即可。 2. 创建新…

    Linux 2023年5月14日
    00
  • 示例:iptables限制ssh链接服务器

    linux服务器默认通过22端口用ssh协议登录,这种不安全。今天想做限制,即允许部分来源ip连接服务器。 案例目标:通过iptables规则限制对linux服务器的登录。 处理方法:编写为sh脚本,以便多次执行。iptables.sh : iptables -I INPUT -p tcp –dport 22 -j DROP -m comment –co…

    Linux 2023年4月8日
    00
  • 在Linux上查看活跃线程数与连接数

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明。 简介 现如今,有两种常见的软件资源几乎成了Java后端程序的标配,即线程池与连接池,但这些池化资源非常的重要,一旦不够用了,就会导致程序阻塞、性能低下,所以有时我们需要看看它们的使用情况,以判断这里是否是瓶颈。 查看活跃线程数 在Linux上,通过top -H -p 1命…

    Linux 2023年4月10日
    00
  • Linux开机、重启、和用户登录注销

    一、 关机&重启命令   基本介绍:     shutdown       shutdown –h now    :   表示立即关机       shutdown -h          : 表示1分钟后关机        shutdown  -r  now   : 表示立即重启       halt       就是直接使用,效果等价于关机   …

    Linux 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部