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

时间:2016-08-05 15:27:39

标签: c linux filesystems inode filesystem-access

如果我想连接驻留在同一文件系统上的两个非常大的文件,例如ext3或ext4,linux是否通过读取和修改两个文件的inode直接/间接指针,以编程方式提供api,以及修改文件大小和超级块值?如果是的话,是否有关于api / headerfiles的文档?

注意:我知道可以使用内置的linux二进制文件,如cat,tee等,但我的问题是以编程方式实现这一点。

1 个答案:

答案 0 :(得分:3)

是的,取决于连接的含义,以及执行工作的代码的级别低,以及文件系统是什么。

  1. 低级别,不切实际,困难,尤其是 ext3 & EXT4 。假设我们希望相当于cat foo bar | sponge foo,但除了元数据被读取或覆盖之外没有任何东西。在这种情况下, foo 必须是精确的块大小,并且诀窍是获取两个文件的inode和dir结构rm bar,卸载文件系统,并调整相关的inode但是请你,(说dd和一些十六进制编辑器),以免破坏其他任何东西。 取决于可能困难的文件系统,并且需要更新或修改一些其他受影响或阻碍的数据结构。

    如果 foo 不是精确的块大小,那么在连接文件的中间就会出现垃圾数据。

  2. 作弊。使用in-line deduplication的文件系统。 Btrfs应具有该功能someday.