Extended Object File System(exofs)
Extended Object File System(exofs)是构建在对象存储系统上的一种传统的 Linux 文件系统。exofs 最初由 IBM 的 Avnishay Traeger 开发,当时被称作 OSD 文件系统,或称作 osdfs。然后,Panasas(一家构建对象存储系统的公司)接管该项目,并将它重新命名为 exofs(因为它的祖先来自 ext2 文件系统)。
从概念上讲,对象存储系统可以视作对象的平面名称空间和它们的关联元数据。而在基于块的传统存储系统,元数据要占用一些块,以提供语义黏合剂。图 3 显示 exofs 的架构图。Virtual File System Switch(VFS)为 exofs 提供一条途径,在其中,exofs 通过一个本地 OSD 启动器与对象存储系统通信。OSD 启动器实现 OSD T-10 标准 SCSI 命令集。
exofs 背后的思想是在 OSD 后备存储上提供一个传统文件系统。这样一来,就更容易迁移到对象级存储,因为提供的文件系统本身是传统的文件系统。
OSD 中的每个对象由平面名称空间中一个 64 位的标识符表示。为了将标准 POSIX 接口叠加到对象存储系统上,需要一个映射。exofs 提供一个简单的映射,这种映射还是可伸缩、可扩展的。
文件系统中的文件由 inode 唯一地表示。exofs 将 inode 映射到对象系统中的对象标识符(OID)。在对象系统中,使用对象表示文件系统的所有元素。文件被直接映射到对象,目录也是文件,只不过是引用目录中所含文件的文件(采用文件名和 inode-OID 对的形式)。图 4 简明地阐释了这一点。另外还有一些其他的对象,用于支持 inode 位图(用于 inode 分配)等。
用于表示对象空间中的对象的 OID 长度为 64 位,因此支持非常多的对象。
对象存储是一个有趣的思想,可大幅提高系统的可伸缩性。它将文件系统的一些部分从主机转移到存储子系统中。为此需付出一定的代价,但是通过将文件系统的一些部分分布到多个端点,可以分散工作负载,使基于对象的方法更易于伸缩到更大的存储系统。主机操作系统不再需要考虑块到文件的映射,存储设备本身会提供这种映射,因此主机可以在文件级进行操作。
对象存储系统还提供查询可用元数据的能力。这可以带来更多的好处,因为搜索能力可以分布到端点对象系统。
最近,对象存储在云存储领域回归。云存储提供商(将存储作为服务出售)以对象的形式提供他们的存储,而不是以传统的块 API 的形式提供存储。这些提供商实现用于对象传输、管理和元数据管理的 API。