Linux xfs文件系统stat命令Birth字段为空的原因探究

这篇具有很好参考价值的文章主要介绍了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]

1: https://git.kernel.org/pub/scm/fs/xfs/xfs-documentation.git/tree/design/XFS_Filesystem_Structure/ondisk_inode.asciidoc文章来源地址https://www.toymoban.com/news/detail-438280.html

到了这里,关于Linux xfs文件系统stat命令Birth字段为空的原因探究的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux磁盘挂载及格式化文件系统格式为xfs

    注释:重新空白挂载磁盘及重新格式化磁盘文件系统格式第一步需解除磁盘挂载,否则从下面第一步开始做 1、查看未挂载的磁盘: 2、磁盘新建分区     3、新建目录,准备将分区挂载到该目录 4、格式化分区文件系统格式为xfs  5、挂载磁盘到/data目录下 6、重新挂载所有分

    2024年02月15日
    浏览(45)
  • linux 文件管理命令:lsattr \ od \ paste \ stat \ tee

    作用:查看由 chattr 设置的文件属性。 用法:lsattr [选项] [文件或者目录] 主要选项如下: 命令 描述 -R 递归地列出目录及其下内容的属性。 -V 显示程序版本。 -a 列出目录中的所有文件,包括以“.”开头的文件的属性。 -d 以列出其他文件的方式列出目录的属性,而不列出其

    2024年02月13日
    浏览(29)
  • 前端response为空的排查思路

    前端response为空的排查思路 首先发现登录的时候,点击了登录没有反应 然后发现post 发出的消息的response为空 观察后端控制台,发现有相应的错误日志,证明请求是打到了后端的。 因此考虑后端的链路出现了问题 首先去看posturl对应的controller的return 发现return中存在对应,那

    2024年02月16日
    浏览(22)
  • Linux命令:stat命令

    stat命令:显示文件或文件系统的状态 使用:stat [OPTION]… FILE 常用选项: -L, --dereference:如果一个文件是一个链接文件,显示链接指向的文件的信息。不加-L时,默认显示的是链接文件本身 -f, --file-system:显示文件系统的状态而不是文件本身的状态 -c --format=FORMAT:按照FORMAT输

    2024年02月20日
    浏览(29)
  • 浅谈Java判断变量是否为空的问题

      Java的StringUtil.isEmpty(str)和\\\"\\\".equals(str)都是用来判断字符串是否为空的方法,但它们有一些不同的使用场景。 📌 StringUtil.isEmpty()   StringUtil.isEmpty(str)通常用于判断字符串是否为null或者长度为0,如果字符串为null或者长度为0,则返回true,否则返回false。这种方式适用于需

    2023年04月11日
    浏览(89)
  • 蚁剑返回数据为空的几种原因

    中国蚁剑返回数据为空, 1,可能是post没有大小写, 2,看防火墙有没有关, 3,代理是不是手动。 一句话木马?php @eval($_POST[\\\"password\\\"]);? 今天连接蚁剑死活连不上到头来发现post没有大写 然后就连接成功了 4.格式要换成base64,上下格式都要换成base64

    2024年02月11日
    浏览(31)
  • Java 判断字符串为空的方法

    一.判断方法 if(s == null || s.equals(\\\"\\\")); if(s == null || s.length() == 0); if(s == null || s.isEmpty()); if (s == null || s == \\\"\\\"); 二.哪些情况会抛出空指针异常 s == null 是有必要存在的 String 类型为null, 而去进行 equals(String) 或 length() 等操作会抛出java.lang.NullPointerException. s==null 的顺序必须出现在前面

    2024年02月16日
    浏览(48)
  • loadrunner录制脚本为空Action为空的解决办法(loadrunner12+win10)

    前言:网上搜索过很多解决loadrunner录制脚本为空的解决办法,包括设置默认浏览器为IE、设置Recording Options -Network-Mapping and Filtering中的Capture leve为Socket level and WinlNet level data、下载fiddler、更改端口映射捕捉级别、关闭杀毒软件等等、尝试各种浏览器等等方法都不奏效,Actio

    2024年02月11日
    浏览(34)
  • 解决Pycharm的available packages为空的问题

    看了很多方法,添加镜像源什么的都不行,最后终于在外网一个论坛找到了解决方法: (1)退出pycharm; (2)删除project里的.idea文件夹; (3)重新打开pycharm; 问题解决: 不知道什么原因,反正问题是解决了。

    2024年02月16日
    浏览(34)
  • Java中判断对象是否为空的方法详解

    在Java编程中,经常会遇到判断对象是否为空的情况。空指针异常是常见的程序错误之一,因此在编码过程中,判断对象是否为空是一个重要的防御措施。本篇博客将深入探讨Java中判断对象是否为空的不同方法,包括使用条件判断、使用Java 8的Optional类、使用Apache Commons Lang库

    2024年02月13日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包