我刚才在这里问了一个问题:my former question 这引出了另一个问题。
是否有可能像硬链接一样指向文件系统的另一部分,而不占用更多空间? 让我解释一下:磁盘上的地址是否可以指向另一个地址,但不占用指针的空间。这是硬链接的原则。但它会应用于文件的一部分,例如。
整体情况是创建一个由多个其他文件组成的文件。我知道命名管道,但似乎它没有实现目标:它是阻塞的,你必须永久阅读它。
非常感谢
理论上是否有可能破坏/破解内核以实现这一目标?
答案 0 :(得分:1)
有些文件系统,特别是btrfs,它是一个COW文件系统,因此制作文件的副本,并覆盖其中的一小部分应该最终得到两个共享大多数数据的文件。
在事实之后重复数据删除需要一些额外的支持,例如:比较磁盘块的哈希值(写入磁盘或离线时,重复删除现有文件块)。
请注意,这是在块级别完成的,因此要创建一个由其他文件“组成”的文件(实际上,指向与其他文件相同的块),相同的部分应该是块大小的多个-sized和block-size-aligned。
答案 1 :(得分:0)
简而言之,你不能这样做(除非你修补了很多内核以添加新的系统调用),因为你的东西不适合现有的Posix文件定义和API。
我想你也不应该这样做,而是将一些用户级库用于索引文件(如gdbm),或使用Sqlite,甚至一些database(relational代表PostGreSQL或MariaDB,NoSQL代表mongodb等......)
你也可以玩FUSE,例如将一些更复杂的数据(例如某些数据库)作为文件系统接口。另请参阅VFS
顺便说一句,在内核中做这么复杂的事情毫无意义。磁盘I / O速度很慢,进入用户空间的开销可以忽略不计。extended file attributes也是一种向文件添加更多[meta-]数据的方法。