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日

相关文章

  • CentOS7下从零开始安装ethereum/以太坊

    下面我将为您提供“CentOS7下从零开始安装ethereum/以太坊”的完整攻略。请您耐心阅读下面的文章。 硬件与软件需求 在安装 Ethereum 前,您需要具备以下硬件配置: CPU:Intel 4 核心或更高; 内存:8GB RAM 或更高; 存储:至少 100GB 可用存储空间。 同时,您的操作系统需要是 CentOS 7.x 的最新版本,并已经安…

    Linux 2023年5月14日
    00
  • CentOS 7.2.1511 编译安装Nginx1.10.1+MySQL5.7.14+PHP7.0.11

    CentOS7.2.1511编译安装Nginx1.10.1+MySQL5.7.14+PHP7.0.11攻略 本文介绍在CentOS7.2.1511下编译安装Nginx1.10.1+MySQL5.7.14+PHP7.0.11的完整过程。 系统要求 CentOS7.2.1511系统 安装gcc、gcc-c++、make、openssl-devel、zlib-de…

    Linux 2023年5月14日
    00
  • Linux环境下安装Nginx及其使用

    下面我就为你详细讲解在Linux环境下安装Nginx及其使用的完整攻略。 安装Nginx 1. 更新软件库列表 在终端输入以下命令,更新软件库列表: sudo apt-get update 2. 安装Nginx 在终端输入以下命令,安装Nginx: sudo apt-get install nginx 安装完成后,运行以下命令启动Nginx: sudo sy…

    Linux 2023年5月14日
    00
  • Linux用户权限指令, 定时任务等指令

    网络配置文件: /etc/sysconfig/network 网络接口配置文件: /etc/sysconfig/network-scripts/ifcfg-INTERFACE_NAME # 这个INTERFACE_NAME 就是 ens33 如下图 DEVICE=: 关联的设备名称,要与文件名的后半部“INTERFACE_NAME”保持一致; BOOTPRO…

    Linux 2023年4月11日
    00
  • Docker安装阿里云服务器和在虚拟机安装遇到的坑(问题小结)

    Docker安装阿里云服务器 1. 安装Docker 首先,您需要在阿里云服务器中安装Docker。您可以按照如下步骤完成操作: 更新系统 在终端中输入以下命令进行系统更新: sudo yum update 安装Docker 在终端中输入以下命令进行Docker安装: sudo yum install docker 启动Docker 在终端中输入以下命令启动…

    Linux 2023年5月24日
    00
  • linux ps top 命令 VSZ,RSS,TTY,STAT, VIRT,RES,SHR,DATA的含义

    VIRT:virtual memory usage 虚拟内存1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量 RES:resident memory usage 常驻内存1、进程当前使用的内存大小,但不包括swap out2、包含其他进程的共享3、如果…

    Linux 2023年4月11日
    00
  • Linux(Ubuntu) MySQL数据库安装与卸载

    安装 修改远程访问 卸载 首先检查系统中是否已经安装了MySQL sudo netstat -tap | grep mysql 没有显示已安装结果,则没有安装 如若已安装,可以选择删除。(删除方法放在下面) 如果没有安装,则安装MySQL. 在终端输入 sudo apt-get install mysql-server mysql-client 在此安装过程…

    Linux 2023年4月16日
    00
  • linux中mysql密码修改

    这个方式是你可以在知道密码的情况下进行密码修改,也可以在不知道密码的情况下进行密码修改 重置密码第一步: #vim /etc/my.cnf(注:windows下面修改的是my.ini) 在文档内搜索mysqld定位到【mysqld】文本段 在【mysqld】后面的任意一行添加“skip-grant-tables”用来跳过密码验证的过程。 第二部:重启mysq…

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