Я использую debugfs
для изменения ctime файла (программа rotine, прикрепленная к ctime этого конкретного файла) в файловой системе ext4.
Для этого используемая команда:
debugfs -w -R 'set_inode_field foo/bar ctime 20130503145204' /dev/vdb1
но это приводит к тому, что ctime als следует:
myserver:~ # stat foo/bar
File: „foo/bar“
Size: 1234 Blocks: 24 IO Block: 4096 reguläre Datei
Device: 1234h/1234d Inode: 1234567 Links: 1
Access: (0660/-rw-rw----) Uid: ( 123/ whatever) Gid: ( 1234/ whatever)
Access: 2021-02-12 21:17:51.146954174 +0100
Modify: 2021-02-12 14:51:32.152323937 +0100
Change: 2013-05-03 16:52:04.991865222 +0200
не так, как ожидалось: 2013-05-03 16:52:04.000000000 +0200
Причина, по которой это работало должным образом, заключается в том, что старая файловая система ext3 хранила ctime только в секундном разрешении. inode structur size
в ext2/ext3 было 128 байт. В ext4 этот размер увеличивается до 156 байт (i_extra_isize = 28, см.: https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Inode_Size), что приводит к наносекундному разрешению.
Как отформатировать команду debugfs, чтобы установить ctime точно в наносекундах?