Por que o debugfs não mostra o crtime em nanossegundos?

3

Estou usando:

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

para obter o tempo de criação do arquivo ( 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

Por que não estou recebendo crtime em nanosegundos, embora ext4 suporte resolução de nanossegundos?

    
por Ron 24.08.2015 / 17:04

2 respostas

3

Ele mostra o timestamp (com precisão de nanossegundos), mas em hexadecimal ; é o campo depois de crtime: , por ex. na sua saída 0x55b65ebc:970fe7cc . A parte depois dos dois pontos é o nanossegundo.
Este artigo fornece mais detalhes e explica como calcular o timestamp / nanossegundos. Então, por exemplo para converter os valores hexadecimais em timestamp a la stat você pode executar:

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

Parece que o debugfs ainda não suporta a impressão da parte sub-segundo (os 30 bits superiores de i_ x time_extra) dos timestamps em seu formato asctime -based. De link :

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));
    
por 24.08.2015 / 18:58