web-dev-qa-db-ja.com

debugfsがcrtimeをナノ秒単位で表示しないのはなぜですか?

私は使っている:

debugfs -R 'stat <7473635>' /dev/sda7

ファイル作成時間(crtime)を取得します。

Inode: 7473635   Type: regular    Mode:  0664   Flags: 0x80000
Generation: 1874934325    Version: 0x00000000:00000001
User:  1000   Group:  1000   Size: 34
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x55b65ebc:98040bc4 -- Mon Jul 27 22:09:24 2015
 atime: 0x55da0168:60b33f74 -- Sun Aug 23 22:52:48 2015
 mtime: 0x55b65ebc:98040bc4 -- Mon Jul 27 22:09:24 2015
crtime: 0x55b65ebc:970fe7cc -- Mon Jul 27 22:09:24 2015
Size of extra inode fields: 28
EXTENTS:
(0):29919781

ext4supports ナノ秒の解像度にもかかわらず、なぜcrtimeがナノ秒で取得されないのですか?

3
Ron

タイムスタンプ(ナノ秒の精度)は表示されますが、は16進数で表示されます。 crtime:の後のフィールドです。例:出力0x55b65ebc:970fe7ccで。コロンの後の部分はナノ秒です。
この記事 詳細を示し、タイムスタンプ/ナノ秒の計算方法を説明します。だから、例えば16進値をタイムスタンプに変換するにはa lastat実行できます:

date -d @ $(printf%d 0x55b65ebc)。$(($(printf%d 0x970fe7cc)/ 4))+ '%F%T。%N%z'
2015-07-27 19:39:24.633600499 +0300
3
don_crissti

Debugfsは、タイムスタンプのサブ秒部分(i _xtime_extraの上位30ビット)をasctimeベースのフォーマット。から http://git.kernel.org/cgit/fs/ext2/e2fsprogs.git/tree/debugfs/debugfs.c

if (is_large_inode && large_inode->i_extra_isize >= 24) {
        fprintf(out, "%s ctime: 0x%08x:%08x -- %s", prefix,
            inode->i_ctime, large_inode->i_ctime_extra,
            time_to_string(inode->i_ctime));
        fprintf(out, "%s atime: 0x%08x:%08x -- %s", prefix,
            inode->i_atime, large_inode->i_atime_extra,
            time_to_string(inode->i_atime));
        fprintf(out, "%s mtime: 0x%08x:%08x -- %s", prefix,
            inode->i_mtime, large_inode->i_mtime_extra,
            time_to_string(inode->i_mtime));
        fprintf(out, "%scrtime: 0x%08x:%08x -- %s", prefix,
            large_inode->i_crtime, large_inode->i_crtime_extra,
            time_to_string(large_inode->i_crtime));
3
Mark Plotnick