以纳秒为单位的 debugfs set_inode_field ctime
Posted
技术标签:
【中文标题】以纳秒为单位的 debugfs set_inode_field ctime【英文标题】:debugfs set_inode_field ctime with nanoseconds 【发布时间】:2021-05-16 15:53:34 【问题描述】:我正在使用debugfs
更改 ext4 文件系统上的文件的 ctime(程序 rotine 附加到此特定文件的 ctime)。
为此使用的命令是:
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 FS 仅以第二分辨率存储 ctime。 ext2/ext3 中的 inode structur size
为 128 字节。使用 ext4,此大小增加到 156 字节(i_extra_isize = 28,请参阅:https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Inode_Size),从而实现纳秒级分辨率。
如何格式化 debugfs 命令以将 ctime 设置为精确的纳秒?
【问题讨论】:
【参考方案1】:经过一番挖掘,我设法解决了这个问题。解决方法:阅读手册。
https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Inode_Table
https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Inode_Timestamps
debugfs 支持设置 ctime/atime/mtime/crtime time_extra bytes with
set_inode_field foo/bar ctime_extra 0
ctime_extra 字段是一个无符号整数,因此值 0 给出了预期的设置。
dtime 没有加宽,因此不支持 dtime_extra
【讨论】:
以上是关于以纳秒为单位的 debugfs set_inode_field ctime的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 3 中以纳秒为单位获取时间戳? [复制]