如何修改ext文件系统的超级块,以便我可以设置字段wtime(最后写入时间) ?
我试过用debugfs:
debugfs 1.42.9 (4-Feb-2014) debugfs: open /dev/sdd2 -w debugfs: ssv wtime "@0x64000000" debugfs: show_super_stats -h debugfs: close
当我closures文件系统时,将wtime设置为当前系统时间。
显然,我不想改变系统时间,以便在文件系统closures时设置wtime ,然后恢复我的系统时间。
我的第二个想法是,我可以改变它与hexeditor,但我几乎可以肯定,超级块有一个校验和计算超级块和validation。
挖掘我们软件的源代码不是魔鬼。 我研究了一下,发现了以下结果:
ext2_close_free() ,它已经在libext2fs源代码中了 。 ext2fs_close_free()的更新调用ext2fs_close2() , ext2fs_close()调用ext2fs_close() ,调用ext2fs_flush2() ,调用ext2fs_flush() 。 wtime字段会一直更新。 没有例外。 但是:您可以在源代码中轻松禁用该function。 如果你再来这里,我会解释你,怎么样。
Ps是的,ext2超级块中有一个校验和,它是由一个复杂的algorithmcrc32c生成的。
我读完了Peter Horvath的回答之后。 我查看了源代码,正如他在这里指出的, ext2fs_flush2写这个字段,实际的代码是这样的:
fs->super->s_wtime = fs->now ? fs->now : time(NULL);
我search了这个fs->now的源代码,发现它正在被do_set_current_time设置。 我以为我上次试过这个,但是我又试了一次。 而实际上下面的代码完成了这项工作。
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
编辑:如果你想要更新,你应该触摸超级块。 而且你不能设置0作为你的current_time 。
那么, 可能的用户空间是解决scheme,你可以尝试fuse-ext2
主页: http : //view-os.sourceforge.net