debugfs set_inode_field ctime с наносекундами

Я использую 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 точно в наносекундах?


person cnbhl    schedule 12.02.2021    source источник


Ответы (1)


После небольшого копания мне удалось решить эту проблему. Решение: прочитайте инструкцию.

debugfs поддерживает установку байтов ctime/atime/mtime/crtime time_extra с

set_inode_field foo/bar ctime_extra 0

Поле ctime_extra представляет собой целое число без знака, поэтому значение 0 соответствует ожидаемому параметру.

dtime не был расширен и поэтому не поддерживает dtime_extra

person cnbhl    schedule 14.02.2021