【问题标题】:linux - Do the filesystem allow to make blackholes?linux - 文件系统是否允许制造黑洞?
【发布时间】:2014-09-18 15:47:46
【问题描述】:

上下文

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

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

问题:

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

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

非常感谢

更新:

理论上是否可以通过破坏/破解内核来实现该目标?

【问题讨论】:

  • 除非文件系统损坏,否则一般不可能。关于Ext2 的维基页面有一张漂亮的图片
  • 你的意思是块级重复数据删除吗?
  • @5gon12eder:hmm 是的,可能,会调查 :)
  • @Basile :相应地更新了问题

标签: c linux file text filesystems


【解决方案1】:

一些文件系统会这样做,最值得注意的是 btrfs,它是一个 COW 文件系统,因此制作一个文件的副本并覆盖它的一小部分最终会得到两个共享大部分数据的文件。

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

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

【讨论】:

    【解决方案2】:

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

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

    您也可以使用FUSE,例如作为文件系统接口一些更复杂的数据(例如一些数据库)。另见VFS

    顺便说一句,在内核中做如此复杂的事情是没有意义的。磁盘 I/O 很慢,进入用户态的开销可以忽略不计。

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

    【讨论】:

    猜你喜欢
    • 2022-06-17
    • 2019-02-22
    • 1970-01-01
    • 2015-02-20
    • 2013-04-22
    • 2011-10-30
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    相关资源
    最近更新 更多