首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修改ext文件系统的wtime?

如何修改ext文件系统的wtime?
EN

Server Fault用户
提问于 2014-09-18 13:07:41
回答 3查看 183关注 0票数 3

如何修改ext文件系统的超级块,以便设置字段wtime (最后一次写入时间)?

我尝试过使用调试器:

代码语言:javascript
复制
debugfs 1.42.9 (4-Feb-2014)
debugfs:  open /dev/sdd2 -w
debugfs:  ssv wtime "@0x64000000"
debugfs:  show_super_stats -h
debugfs:  close

当我关闭文件系统时,wtime被设置为当前的系统时间。

显然,我不想更改系统时间,以便在文件系统关闭时设置wtime,然后恢复我的系统时间。

我的第二个想法是,我可以用十六进制编辑器来修改它,但我几乎可以肯定,超级块有一个校验和,该校验和是在超级块上计算并验证的。

EN

回答 3

Server Fault用户

回答已采纳

发布于 2014-09-19 07:39:40

在我读过彼得·霍瓦斯的答案之后。我查看了源代码,正如他所指出的,这里 ext2fs_flush2编写了这个字段,实际代码如下所示:

代码语言:javascript
复制
fs->super->s_wtime = fs->now ? fs->now : time(NULL);

我搜索了这个fs->now的源代码,发现它是由do_set_current_time设置的。我以为我上次试过了,但我又试了一次。实际上,下面的代码完成了这个任务。

代码语言:javascript
复制
debugfs:  open /dev/sdb2 -w
debugfs:  ssv mtime "@0x64000000"
debugfs:  set_current_time "@0x64000000"
Setting current time to Thu Mar  2 01:46:40 2023

debugfs:  close

编辑:如果你想要更新wtime,你应该触摸超级块。也不能将0设置为current_time。

票数 2
EN

Server Fault用户

发布于 2014-09-18 14:06:48

挖掘我们软件的源代码不是来自魔鬼。我对他们进行了一些研究,发现了以下结果:

  1. Debugfs在包e2fsprogs中。
  2. E2fsprogs还包含libext2库,它也是处理所有ext2操作操作的公共库。
  3. 当我们看到e2fsprogs的源代码时,用一些grep可以很容易地找到关_文件命令的要点。
  4. 我们可以看到,这个调用总是调用ext2_close_free(),这已经在libext2fs源代码这里中了。
  5. 在命名函数中,我们可以看到wtime的更新ext2fs_close_free() calls ext2fs_close2(),它调用ext2fs_close(),后者调用ext2fs_flush2(),后者调用ext2fs_flush()
  6. 正如我们在这个函数中所看到的,wtime字段将始终被更新。也不例外。

但是:您可以很容易地在源代码中禁用该功能。如果你再来这里,我会解释给你听。

附注:是的,在ext2超级块中有一个校验和,它是由crc32c生成的,这是一个复杂的算法。

票数 2
EN

Server Fault用户

发布于 2014-09-18 13:16:10

嗯,可能是用户空间是解决方案,您可以尝试fuse-ext2 2。

主页:http://view-os.sourceforge.net

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/629526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档