CentOS でファイルの ctime を変更する方法

  debugfs の modify_inode を利用して、通常では変更できない ctime を変更する
  ことが出来ました。
  
  まず、変更したいファイルがあるファイルシステムをアンマウントします。
  アンマウントできない場合は、最後に再起動が必要ですが、とりあえずそのまま
  続行できました。

$ sudo debugfs -w /dev/mapper/VolGroup00-LogVol00
debugfs 1.35 (28-Feb-2004)
debugfs:  cd /mnt/a/tmp
debugfs:  stat test.txt
Inode: 4788224   Type: regular    Mode:  0000   Flags: 0x0   Generation: 3112533598
User:    48   Group:    48   Size: 7382
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 16
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x49643779 -- Wed Jan  7 14:02:49 2009 <- この ctime を変えてみる
atime: 0x49618ea8 -- Mon Jan  5 13:38:00 2009
mtime: 0x49618ea8 -- Mon Jan  5 13:38:00 2009
BLOCKS:
(0):9592998, (1):9593000
TOTAL: 2

debugfs:  modify_inode test.txt
                          Mode    [0100000]
                       User ID    [48]
                      Group ID    [48]
                          Size    [7382]
                 Creation time    [1231304569] 1231130280 <- 変更するには値を入力
             Modification time    [1231130280]
                   Access time    [1231130280]
                 Deletion time    [0]
                    Link count    [1]
                   Block count    [16]
                    File flags    [0x0]
                    Generation    [0xb9857e5e]
                      File acl    [0]
           High 32bits of size    [0]
              Fragment address    [0]
               Fragment number    [0]
                 Fragment size    [0]
               Direct Block #0    [9592998]
               Direct Block #1    [9593000]
               Direct Block #2    [0]
               Direct Block #3    [0]
               Direct Block #4    [0]
               Direct Block #5    [0]
               Direct Block #6    [0]
               Direct Block #7    [0]
               Direct Block #8    [0]
               Direct Block #9    [0]
              Direct Block #10    [0]
              Direct Block #11    [0]
                Indirect Block    [0]
         Double Indirect Block    [0]
         Triple Indirect Block    [0]
debugfs:  stat test.txt
Inode: 4788224   Type: regular    Mode:  0000   Flags: 0x0   Generation: 3112533598
User:    48   Group:    48   Size: 7382
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 16
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x49618ea8 -- Mon Jan  5 13:38:00 2009 <- この ctime が変わった
atime: 0x49618ea8 -- Mon Jan  5 13:38:00 2009
mtime: 0x49618ea8 -- Mon Jan  5 13:38:00 2009
BLOCKS:
(0):9592998, (1):9593000
TOTAL: 2

debugfs:  quit

  ここで、再度マウントすれば OK。
  ただし、アンマウントできなかった場合は、ここでサーバを再起動すれば OK でした。

$ ls -lac
drwxrwxrwx  6 sunaoka sunaoka 4.0K Jan  7 14:34 .
drwxrwsr-x  3 sunaoka sunaoka 4.0K Jan  7 13:35 ..
-rw-r--r--  1 sunaoka sunaoka 7.3K Jan  5 13:38 test.txt