Linux 通过debugfs查看文件的真正创建时间,不是stat里面的access,modify和change时间,而是crtime

stat命令可以查看到访问时间,修改时间以及属性变动的改动时间,但看不到创建时间。 本文介绍用过debugfs来获取文件真是的创建时间。

stat的输出

[root@rh6-1 ~]# stat /opt/gnode/userdata/gbase/gctmpdb/metadata
  File: `/opt/gnode/userdata/gbase/gctmpdb/metadata'
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: 802h/2050d      Inode: 1465051     Links: 2
Access: (0700/drwx------)  Uid: (  500/   gbase)   Gid: (  500/   gbase)
Access: 2020-12-22 09:15:11.470000001 +0800
Modify: 2020-12-22 09:56:36.025000002 +0800
Change: 2020-12-22 09:56:36.025000002 +0800

debugfs命令

原理是根据文件的inode,获得其创建时间,除非文件或目录被重建且inode发生了变化,否则inode的时间就是对应的创建时间。

输出内容中的 crtime 就是创建时间。

另外, ctime是最后属性改变时间,等同于Change time。

获得inode的方法

ls 用 -i参数

[root@rh6-1 ~]# ls -id /opt/gnode/userdata/gbase/gctmpdb/metadata
1465051 /opt/gnode/userdata/gbase/gctmpdb/metadata

debugfs获得inode信息

命令样式如下

debugfs -R 'stat XXXXX' /dev/sdX

其中后面的/dev/sda2是文件对应的设备编号,可以从df输出里看到。

[root@rh6-1 ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             28898428   5742124  21688352  21% /
tmpfs                  4095964     44208   4051756   2% /dev/shm

方法1, 用inode号

用stat <inode> 作为参数

[root@rh6-1 ~]# debugfs -R 'stat <1465051>' /dev/sda2
debugfs 1.41.12 (17-May-2010)
Inode: 1465051   Type: directory    Mode:  0700   Flags: 0x80000
Generation: 1377903021    Version: 0x00000000:0002eb62
User:   500   Group:   500   Size: 4096
File ACL: 0    Directory ACL: 0
Links: 2   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x5fe15254:05f5e108 -- Tue Dec 22 09:56:36 2020
 atime: 0x5fe1663b:c7516b34 -- Tue Dec 22 11:21:31 2020
 mtime: 0x5fe15254:05f5e108 -- Tue Dec 22 09:56:36 2020
crtime: 0x5f976f18:3bd7d2d4 -- Tue Oct 27 08:51:36 2020
Size of extra inode fields: 28
EXTENTS:
(0): 5777189

方法2,直接用路径

用目录作为stat的参数

[root@rh6-1 ~]# debugfs -R 'stat /opt/gnode/userdata/gbase/gctmpdb/metadata' /dev/sda2
debugfs 1.41.12 (17-May-2010)
Inode: 1465051   Type: directory    Mode:  0700   Flags: 0x80000
Generation: 1377903021    Version: 0x00000000:0002eb62
User:   500   Group:   500   Size: 4096
File ACL: 0    Directory ACL: 0
Links: 2   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x5fe15254:05f5e108 -- Tue Dec 22 09:56:36 2020
 atime: 0x5fe1489f:700e8604 -- Tue Dec 22 09:15:11 2020
 mtime: 0x5fe15254:05f5e108 -- Tue Dec 22 09:56:36 2020
crtime: 0x5f976f18:3bd7d2d4 -- Tue Oct 27 08:51:36 2020
Size of extra inode fields: 28
EXTENTS:
(0): 5777189

加上grep过滤crtime

[root@rh6-1 ~]# debugfs -R 'stat /opt/gnode/userdata/gbase/gctmpdb/metadata' /dev/sda2 | grep crtime
debugfs 1.41.12 (17-May-2010)
crtime: 0x5f976f18:3bd7d2d4 -- Tue Oct 27 08:51:36 2020
[root@rh6-1 ~]# debugfs -R 'stat /opt/gnode/userdata/gbase/gctmpdb/sys_tablespace' /dev/sda2 | grep crtime
debugfs 1.41.12 (17-May-2010)
crtime: 0x5f976f18:3bd7d2d4 -- Tue Oct 27 08:51:36 2020
[root@rh6-1 ~]#

总结

要是inode的create时间是我们安装时间,那就不是应用的使用问题,而是文件系统故障。 如果是最近的其它时间,可以查看对应那个时间点到底出了啥事情,比如重建了。