是否可以通过修改inode数据结构和超级块来连接同一个linux文件系统上的两个文件?

如果我想连接两个非常大的文件驻留在同一个文件系统,比如说ext3或者ext4,linux是否提供了一个api来通过读取和修改这两个文件的inode直接/间接指针来编程来完成,和超级块值? 如果是这样,是否有任何文件的API / headerfiles的呢?

注:我知道build立在Linux的二进制文件,如猫,三通等可以使用,但我的问题是关于编程实现这一点。

是的,取决于连接方式,以及代码的工作级别以及文件系统是什么。

  1. 低级别,不切实际,困难,特别是对于ext3ext4 。 假设我们希望做相当于cat foo bar | sponge foo cat foo bar | sponge foo ,但没有任何元数据被读取或覆盖。 在这种情况下, foo必须是一个精确的blocksize倍数,诀窍是获得这两个文件的inode和dir结构, rm bar ,卸载文件系统,然后调整相关的inode,不管你喜欢(比如dd和一些十六进制编辑器),以不破坏其他任何东西的方式。 取决于可能有​​困难的文件系统,并要求更新或修改其他受影响或阻碍的数据结构。

    如果foo不是一个确切的块大小,那么在连接文件的中间会有垃圾数据。

  2. 作弊。 使用带在线重复数据删除的文件系统。 Btrfs有一天应该有这个功能。