具有写入支持和动态大小的基于文件的循环设备

具有写入支持和动态大小的基于文件的循环设备

通常循环设备(v 节点磁盘)基于预先分配大小的文件(例如软盘驱动器或 ISO 磁盘的映像)。然后,该设备将被视为块设备,并可以使用操作系统支持的任何文件系统进行格式化,例如 ext3。

另一方面,FUSE 允许挂载具有写入支持的档案,即存档挂载。可以将文件写入已安装的驱动器,底层存档将增长以容纳写入其中的所有文件。因此,在某种程度上,它的行为类似于块设备,但没有特定的文件系统 - 文件系统由存档类型决定,例如 zip、tar。

我正在寻找一个文件支持设备的实现,该设备可以动态增长以容纳任意数量的文件(行为类似于使用 FUSE 安装的存档),但可以有效实现读/写/查找操作(就像块设备中的文件系统的情况一样)。

我所说的高效是指比线性搜索文件更有效率,因此可能采用文件中包含的某种分布式文件索引。

为了说明我的意思,让我们考虑一个使用 archivemount 安装的未压缩 tar 档案。它支持读/写,但寻道操作效率不高,因为 tar 档案不支持 TOC - 它们应该与磁带档案一起使用。

对于使用 archivemount 安装的 zip 档案,读取和查找非常有效,因为 zip 支持 TOC,但是写入效率不高,因为它通常涉及重新压缩整个档案。

另一个例子是通过循环设备挂载的稀疏文件 - 它很稀疏,因此它可以动态增长但最多可达指定的固定最大大小,这不能满足我的要求。

另一个例子是CouchDB数据库或文件格式。在这两种情况下,数据总是附加到文件中(例如,它不是删除文件,而是将其标记为已删除并附加新版本)。为了不时回收已删除文件使用的空间,需要压缩文件。对于这样的文件,所有操作都很快,包括查找,因为它总是读取文件的最新版本。但是,我不知道有任何这样的实现来存储任意文件。

那么,是否存在这样的文件支持设备的实现?

相关内容