linux - 文件系统允许制作黑洞吗?

时间:2014-09-18 15:47:46

标签: c linux file text filesystems

上下文

我刚才在这里问了一个问题:my former question 这引出了另一个问题。

这些时候我读了这么多内核代码,它让我头疼。

问题:

是否有可能像硬链接一样指向文件系统的另一部分,而不占用更多空间? 让我解释一下:磁盘上的地址是否可以指向另一个地址,但不占用指针的空间。这是硬链接的原则。但它会应用于文件的一部分,例如。

整体情况是创建一个由多个其他文件组成的文件。我知道命名管道,但似乎它没有实现目标:它是阻塞的,你必须永久阅读它。

非常感谢

更新

理论上是否有可能破坏/破解内核以实现这一目标?

2 个答案:

答案 0 :(得分:1)

有些文件系统,特别是btrfs,它是一个COW文件系统,因此制作文件的副本,并覆盖其中的一小部分应该最终得到两个共享大多数数据的文件。

在事实之后重复数据删除需要一些额外的支持,例如:比较磁盘块的哈希值(写入磁盘或离线时,重复删除现有文件块)。

请注意,这是在块级别完成的,因此要创建一个由其他文件“组成”的文件(实际上,指向与其他文件相同的块),相同的部分应该是块大小的多个-sized和block-size-aligned。

答案 1 :(得分:0)

简而言之,你不能这样做(除非你修补了很多内核以添加新的系统调用),因为你的东西不适合现有的Posix文件定义和API。

我想你也不应该这样做,而是将一些用户级库用于索引文件(如gdbm),或使用Sqlite,甚至一些databaserelational代表PostGreSQLMariaDBNoSQL代表mongodb等......)

你也可以玩FUSE,例如将一些更复杂的数据(例如某些数据库)作为文件系统接口。另请参阅VFS

顺便说一句,在内核中做这么复杂的事情毫无意义。磁盘I / O速度很慢,进入用户空间的开销可以忽略不计。

extended file attributes也是一种向文件添加更多[meta-]数据的方法。