BSD、Solaris、Unix 的文件系统: UFS/UFS2、ZFS 及其他存储技术

发布于:2025-04-18 ⋅ 阅读:(29) ⋅ 点赞:(0)

文件系统构成了任何操作系统不可或缺的一部分。大多数操作系统倾向于使用自己的原生文件系统格式,这些格式在其他环境中可能受到限制或不可用。Unix 系列操作系统及其变体,如 BSD 和 Solaris,传统上依赖于 UFS,后来升级到 UFS2。随后,出现了源自 Solaris 的 ZFS 下一代文件系统。

UFS/UFS2 系列

UFS(UNIX 文件系统)源于 Berkeley Fast File System (FFS)。UFS 最终成为运行 BSD 和其他 Unix 衍生产品的机器的主要格式。目前,尽管在功能方面相当过时,但鉴于其高度稳定的性能,UFS 仍然是首选的文件系统。

UFS 中的存储空间分为 Cylinder 组。他们的位置和其他重要的服务信息可以在 Superblock 中找到。UFS 中的文件由称为 inode 的单个描述符以及构成其内容的数据块表示。每个 Cylinder 组都使用专用位图跟踪其空闲块和 inode。

inode 具有文件的所有属性,但其名称除外。它还存储其前 12 个数据块的直接地址。如果有更多块,则后续地址指向存储直接块地址的间接块。另一方面,目录由将 inode 编号与驻留在给定目录中的文件的名称相关联的条目组成。

尽管 UFS 为每个文件创建一个 inode,但它允许将同一文件存储在多个目录中,并以不同的名称存储。此类文件共享相同的 inode,称为硬链接。在这种情况下,inode 将指示对它的精确引用数。

多年来,UFS 经历了许多变化。后来,UFS2 作为原始 UFS 的替代品推出,并逐渐在数 TB 存储设备上普及。此外,许多 Unix 供应商创建了他们自己的 UFS 变体。例如,Sun Microsystems 在 Solaris 7 中为其 UFS 版本添加了日志功能。此文件系统在将所有元数据更新应用于任何实际结构之前将其记录在日志中,从而确保其防止在此过程中可能发生的崩溃。

因此,不同的 UFS 版本之间可能存在相当大的差异。虽然整个文件系统系列都统称为 UFS,但它的许多实例可能适用于特定用途或具有与对应的 Unix 变体不兼容的专有扩展。

ZFS

ZFS(Zettabyte 文件系统)从根本上改变了文件系统的概念。它提供本机卷管理功能,类似于基于 RAID 的技术提供的功能,以及许多其他独特的功能。

ZFS 可以合并多个存储介质,组合成一个单一的共享存储池。它可能包含一个或多个称为 vdev 的虚拟设备。每个 vdev 都由一个单独的标签描述,该标签也包含其 Uberblock。后者的功能类似于其他文件系统中的 Superblock。

存储分配以可变大小的块执行。这些块被组织为不同类型的对象,如文件对象和目录对象。一种称为 dnode 的特殊结构记录对象类型、大小并指向存储其数据内容的块。一个 dnode 中最多可以有三个块指针。这样的指针可以引用存储实际数据的叶块,也可以引用反过来指向另一个块的间接块。

类似的对象组合在一起,形成对象集。此类集合中的每个对象都可以通过其编号来标识。描述它们的 dnode 集合也存储为由称为 metadnode 的特殊 dnode 指向的对象。称为 Meta Object Set 的专用对象集保留描述整个存储池的元数据。

ZFS 还采用写入时复制 (Copy-on-Write, CoW) 机制。它总是创建要修改的块的副本,而不是直接替换它。作完成后,块指针将更新以指示新写入块的地址,而原始版本保持不变。

目前,ZFS 在企业和精通技术的个人电脑中广泛部署。

Unix OS 系列的其他存储技术

UFS/UFS2 是一种传统的文件系统,更适合相当简单的用例。虽然在基本的文件系统功能方面是独立的,但它不包括任何高级存储管理功能,并且必须依赖内核级框架或外部实用程序来处理更复杂的任务,例如 RAID 或加密。相比之下,ZFS 是下一代格式,它将文件系统和各种卷管理机制组合到一个包中,无需外部工具。

以下是一些可以补充这些文件系统的常见存储技术:

  • GEOM 框架 – 一个模块化的存储框架,可以与 FreeBSD 操作系统中的 UFS/UFS2 结合使用,允许对该文件系统所在的存储设备进行高级配置。GEOM 将它们抽象为可供文件系统使用的虚拟 “providers”。此类提供程序可以由单个驱动器、组织为 RAID 0(条带化)或 RAID 1(镜像)的多个驱动器或加密卷表示。
  • zPool – ZFS 中的一种核心存储结构,它利用此文件系统的本机池功能,将多个设备聚合到单个逻辑存储单元中。在这样的池中,数据可以无冗余地分布在驱动器之间(类似于 RAID 0),镜像到两个或多个驱动器之间(类似于 RAID 1)或组织为 RAID-Z,这是一种更高级的设置,如下所述。
  • RAID-Z — ZFS 文件系统中内置的类似 RAID 的功能,用于提高存储效率并提供容错能力。池中的数据被划分为跨多个磁盘写入的块,并为这些块中的数据计算一个或多个奇偶校验块。根据所选的配置,阵列可以使用单个奇偶校验块来防止一个驱动器 (RAID-Z1) 发生故障,使用两个奇偶校验块来承受两个驱动器的故障 (RAID-Z2),或三个奇偶校验块来允许三个驱动器发生故障 (RAID-Z3)。
  • ZFS 加密 — 集成到 ZFS 文件系统中的加密功能。这样可以独立加密 ZFS 池中的每个数据集,从而确保存储数据的特定部分的安全性。

网站公告

今日签到

点亮在社区的每一天
去签到