Filesystems 修改EXT2文件系统

Filesystems 修改EXT2文件系统,filesystems,linux-kernel,ext2,Filesystems,Linux Kernel,Ext2,对于我正在进行的项目,我需要能够修改EXT2文件系统。我做了大量的研究,但由于这不是一项普遍需要的任务,所以网上似乎没有什么有用的信息。不幸的是,由于保密的原因,我无法详细说明我正在从事的工作,但我可以将情况分解为几个关键问题,我将非常感谢您的帮助。我应该注意到,我对Linux内核/操作系统开发的经验很少 我意识到这不是一个容易解决的问题,这肯定是一个巨大的挑战,因为这只是项目的一小部分。非常感谢您对这些问题的任何帮助(或任何其他警告/建议) 如果事实证明这是不可能的,那么整个项目将不得不重新思

对于我正在进行的项目,我需要能够修改EXT2文件系统。我做了大量的研究,但由于这不是一项普遍需要的任务,所以网上似乎没有什么有用的信息。不幸的是,由于保密的原因,我无法详细说明我正在从事的工作,但我可以将情况分解为几个关键问题,我将非常感谢您的帮助。我应该注意到,我对Linux内核/操作系统开发的经验很少

我意识到这不是一个容易解决的问题,这肯定是一个巨大的挑战,因为这只是项目的一小部分。非常感谢您对这些问题的任何帮助(或任何其他警告/建议)

如果事实证明这是不可能的,那么整个项目将不得不重新思考,因此我从这一点开始

问题1:从源代码到实现

这并不是第一个问题,但我需要先回答它,以确保我在正确的轨道上!请记住,我是一个新手,所以这可能是一个愚蠢的问题

据我所知,所有EXT2源代码都包含在linux/fs/EXT2/的内核源代码中。如果我要修改这个源代码以进行所需的更改,然后成功地重建内核,那么要使驱动器或分区使用这个新修改的文件系统需要什么?我是否能够使用新内核将驱动器重新格式化为EXT2,并且由于修改了源代码,修改后的文件系统将应用于它?还是我过于简单化了

问题2:扩展元数据

项目的一个重要部分要求我扩展驱动器上每个文件包含的元数据。在本例中,元数据指的是所有者、创建的时间戳、修改的时间戳等细节。我希望能够添加并能够更新额外的元数据字段。我认为最好的方法是修改inode,但是在查看了很长时间的源代码之后,我看不到任何明显的开始

问题3:后果?

假设我成功地在修改过的文件系统上添加并使用了这个字段。如果一个文件被移动到另一个带有未修改的EXT2文件系统的驱动器,这个额外的元数据字段中包含的数据会丢失吗?显然,文件一直在不同的文件系统之间移动,没有问题,但我不确定它们是如何处理的。我应该注意到,在任何其他系统上都不要求能够访问此元数据,我只要求数据不会丢失

奖金问题

到目前为止,我一直在使用CentOS作为我的原型。如果有任何关于这是否好/坏/无关紧要的建议,我将不胜感激

编辑/更新以澄清问题

正如我之前所说的,保密性使我无法确切讨论游戏的结局。这是一个非常基本的问题,希望能解释更多我需要做的事情

传统的文件系统跟踪三个主要的时间戳:创建、上次访问、上次修改。假设我想添加一种新类型的元数据,称为“修改历史”,它存储每次修改的时间戳列表。我能想到的唯一方法是添加另一个属性,该属性将指向一个数据块,每次对该文件/inode进行写入时都会向该数据块追加时间戳


同样,实际问题要复杂得多,但希望这能更好地了解我需要做的事情。

如果你所做的只是保留一段额外的元数据,ext2支持“扩展属性”:
setfattr-n user.mydata-v'some value'my_file.txt
。您可能需要先
yum安装attr
。另见:和@Jander,很高兴知道,我会留意的。不过,我认为它不会那么简单,因为文件系统本身必须能够根据要构建到读/写中的环境主动更新此字段。我不会完全重新编译内核,而是将修改后的ext2文件系统构建为一个新的文件系统。编译模块后不必重新启动,只需重新加载即可。这是典型的X-Y问题。但是,由于您无法真正分享详细信息,因此我们无法帮助您解决这一问题。在我看来,如果您所做的一切都是存储元数据,那么“扩展属性”是您最好的选择。您不想修改实际的文件系统。如果这样做,则还需要重新编写所有诊断和维修工具。如果您可以在现有的文件系统限制中“使其工作”(同样不知道是哪一个真正绊倒了您),那么您就不必重写像fsck这样的工具。请记住,如果分区ID为ext2,系统工具将不会知道。@BenjaminB。这听起来是一个更好的方法!我一定去看看。