Alex Rivera | Logout

Setting creation or change timestamps

Asked 2010-12-27T07:45:31.087
34

Using utimes, futimes, futimens, etc., it is possible to set the access and modification timestamps on a file.

Modification time is the last time the file data changed. Similarly, "ctime" or change time, is the last time attributes on the file, such as permissions, were changed. (Linux/POSIX maintains three timestamps: mtime and ctime, already discussed, and 'atime', or access time.)

Is there a function to set change timestamps? (Where "change" is the attribute modification or 'ctime', not modification time 'mtime'.) (I understand the cyclic nature of wanting to change the change timestamp, but think archiving software - it would be nice to restore a file exactly as it was.)

Are there any functions at all for creation timestamps? (I realize that ext2 does not support this, but I was wondering if Linux did, for those filesystems that do support it.)

If it's not possible, what is the reasoning behind it not being so?

Edit
Report

2 Answers

33

For ext2/3 and possibly for ext4 you can do this with debugfs tool, assuming you want to change the ctime of file /tmp/foo which resides in disk /dev/sda1 we want to set ctime to 201001010101 which means 01 January 2010, time 01:01:

Warning: Disk must be unmounted before this operation

# Update ctime
debugfs -w -R 'set_inode_field /tmp/foo ctime 201001010101' /dev/sda1

# Drop vm cache so ctime update is reflected
echo 2 > /proc/sys/vm/drop_caches

Information taken from Command Line Kung Fu blog.

answered 2010-12-27T09:05:18.787
10

I had a similar issue, and wrote my answer here.

https://stackoverflow.com/a/17066309/391040

There are essentially two options:

  1. Slight change in kernel (code included in link)
  2. Change the system clock to the desired ctime, touch the file, then restore current time. (shell script for that included in link).
answered 2013-06-12T13:09:17.747

Your Answer