web-dev-qa-db-ja.com

作成時間の異常

ファイルの作成時間を知る必要があります。 stat filenameコマンドを実行しようとしました。しかし、私のfsはファイル作成時間をメタデータとして保存しません。

[root@s1 XYZ]# stat ./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp
  File: `./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp'
  Size: 16241           Blocks: 32         IO Block: 4096   regular file
Device: fd02h/64770d    Inode: 129108489   Links: 1
Access: (0644/-rw-r--r--)  Uid: (  509/ UNKNOWN)   Gid: (  509/ UNKNOWN)
Access: 2018-03-07 12:28:31.000000000 +0200
Modify: 2018-03-07 07:04:15.000000000 +0200
Change: 2018-03-07 12:28:31.468075157 +0200

しかし、私はこれを読んで site そしてdebugfsコマンドを使用しました。 crtime(作成時間)を表示します。ただし、表示されている作成時間は変更時間よりも長くなっています(新しい)。なにが問題ですか?

[root@s1 XYZ]# ls -i ./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp
129108489 ./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp
[root@s1 XYZ]# df -T ./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp
Filesystem                Type  1K-blocks       Used Available Use% Mounted on
/dev/mapper/datavg-datalv ext4 5986257120 5645927428  36483732 100% /data
[root@s1 fcs_backup]#  debugfs -R 'stat <129108489>' /dev/mapper/datavg-datalv
debugfs 1.41.12 (17-May-2010)
Inode: 129108489   Type: regular    Mode:  0644   Flags: 0x80000
Generation: 3953510053    Version: 0x00000000:00000001
User:   509   Group:   509   Size: 16241
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 32
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x5a9fbecf:6f990a54 -- Wed Mar  7 12:28:31 2018
 atime: 0x5a9fbecf:00000000 -- Wed Mar  7 12:28:31 2018
 mtime: 0x5a9f72cf:00000000 -- Wed Mar  7 07:04:15 2018
crtime: 0x5a9fbecf:6f990a54 -- Wed Mar  7 12:28:31 2018
Size of extra inode fields: 28
EXTENTS:
(0-3): 516503300-516503303

編集済みファイルが開かれていません。私も同じように走ります。

[root@s1 XYZ]# stat ./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp
      File: `./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp'
      Size: 16241           Blocks: 32         IO Block: 4096   regular file
    Device: fd02h/64770d    Inode: 129108489   Links: 1
    Access: (0644/-rw-r--r--)  Uid: (  509/ UNKNOWN)   Gid: (  509/ UNKNOWN)
    Access: 2018-03-07 12:28:31.000000000 +0200
    Modify: 2018-03-07 07:04:15.000000000 +0200
    Change: 2018-03-07 12:28:31.468075157 +0200
    [root@s1 XYZ]#  debugfs -R 'stat <129108489>' /dev/mapper/datavg-datalv
    debugfs 1.41.12 (17-May-2010)
    Inode: 129108489   Type: regular    Mode:  0644   Flags: 0x80000
    Generation: 3953510053    Version: 0x00000000:00000001
    User:   509   Group:   509   Size: 16241
    File ACL: 0    Directory ACL: 0
    Links: 1   Blockcount: 32
    Fragment:  Address: 0    Number: 0    Size: 0
     ctime: 0x5a9fbecf:6f990a54 -- Wed Mar  7 12:28:31 2018
     atime: 0x5a9fbecf:00000000 -- Wed Mar  7 12:28:31 2018
     mtime: 0x5a9f72cf:00000000 -- Wed Mar  7 07:04:15 2018
    crtime: 0x5a9fbecf:6f990a54 -- Wed Mar  7 12:28:31 2018
    Size of extra inode fields: 28
    EXTENTS:
    (0-3): 516503300-516503303
    [root@s1 XYZ]# lsof ./px/cd/78/cd78eholuefekgpz6c0snn5oaayypnloqxgfivszd5d.mxp
    [root@s1 XYZ]#
1
again

Ctimeとcrtimeは改ざんできません。atimeとmtimeは、ユーザープロセスがutime()またはutimes()(またはナノ秒の場合はutimensat())を使用して任意の値に設定できます。精度)アーカイブを抽出するときにtouchが通常行うまたはtarのようなシステムコール(ファイルの変更時間をアーカイブに保存されている時間に設定します(通常は過去) )。

あなたは同じことを達成することができます:

touch -t 201803070704.15 newfile

たとえば、crtimeとctimeは現在の時刻に設定されますが、mtimeとatimeは指定された時刻に設定されます。

4

使用しているFS)を明記する必要があります。

作成時間を取得しようとしています。しかし、あなたはそれを述べました

私のfsはファイル作成時間をメタデータとして保存しません

それが本当なら、あなたは何をしても作成時間を得ることはできません。ファイルシステムがそれを保存しない場合、他には何も保存されません!

タイムスタンプは非常に扱いにくい場合があり、必ずしもあなたが思っていることを意味するとは限りません。たとえば、tarまたはZipアーカイブを抽出する場合、mtimeフィールドは、アーカイブに含まれていたタイムスタンプ(過去のある時点)に設定されます。ただし、crtimeは、アーカイブを抽出した日時を反映します。

Crtimeは通常のプログラムでは変更されないため、mtimeが変更されても、crtimeは変更されません。

したがって、crtimeが正しい場合でも、mtimeは完全に異なるものに設定されることがよくあります。

0
Philip Couling