存储领域主力:Linux存储生态系统

Linux 意味着许多事情,它的力量在于它能够灵活地支持截然不同的使用模式。但是 Linux 最重要的优势之一是作为存储领域的主力。关于 Linux 和存储通常让人想到直接附加存储或最新的文件系统,但是关于存储和 Linux 还有比所看到的多得多的东西。Linux 中的元素不仅稳定而且高端。

本文探讨了使 Linux 处于存储领域中心的各种存储技术。让我们从底部开始 – 即存储架构 -,然后逐步将堆栈发展为功能、文件系统和待执行计划(请参考图 1)。

图1. 本文中探索的存储堆栈

存储架构

存储如何附加到平台是整体存储架构的关键。三个常见的架构涵盖了绝大多数模型:

– 直接附加存储(Direct-attached storage,DAS)

– 存储区域网络(Storage area networks,SAN)

– 网络附加存储(Network-attached storage,NAS)

当然,Linux 支持所有三种模型并通过与这些模型一起发生的变更而发展。

图2说明了这些模型,侧重于文件系统和存储的位置。DAS模型包含到平台的直接存储附件,代表了绝大多数的存储使用。SAN将存储从平台中分离出来并使其可通过块存储协议中的一个进行访问。最后,NAS提供与SAN类似的架构,但是在文件级上进行操作。

图2. 主要存储架构

直接附加的存储

Linux支持种类繁多的DAS界面,包括像并行高级技术附件(Advanced Technology Attachment,ATA)的旧标准 – 电子集成驱动器 [IDE](Integrated Drive Electronics [IDE])/ATA – 并行SCSI和光纤通道(Fibre Channel)以及新的存储界面,例如串行连接的SCSI(Serial Attached SCSI,SAS)、串行 ATA(Serial ATA,SATA和外部 SATA(external SATA,eSATA)。您还将发现高级存储技术,例如USB3(可扩展的主机控制器界面,Extensible Host Controller Interface [xHCI])和 Firewire(Institute of Electrical and Electronics Engineers 1394)。

存储区域网络

SAN提供块级存储合并,以便在一些服务器中共享它。存储对服务器显示为是本地的,其中端点存储设备可以为客户端设备实现附加服务(例如备份和复制)。

SAN的协议和界面是广泛和多样的。您可以在Linux中发现典型的SAN 协议,例如光纤通道以及其通过IP 的扩展(iFCP)。还存在更新的协议,例如SAS、以太网光纤通道(Fibre Channel over Ethernet,FCoE)以及Internet SCSI (iSCSI),更多域特定协议,例如适用于远程直接内存访问(RDMA-iSER)和SCSI RDMA协议SCSI RDMA Protocol,SRP),其通过Infiniband 的RDMA扩展SCSI.

作为存储协议出现的以太网已经在 Linux 中完全实现,其说明了这些方法的力量和灵活性。此外,Linux中完全支持 10 千兆位以太网(10-gigabit Ethernet,10GbE),并允许构造高性能 SAN.您还可以发现类似 ATA over Ethernet (ATAoE) 的协议,其通过无所不在的以太网协议扩展 ATA 协议。

网络附加存储

最后但同样重要的是 NAS.NAS 是通过网络的存储合并,以便不同类型客户端在文件级别进行访问。Linux 中完全支持的两种最流行协议是网络文件系统(Network File System,NFS)和服务器消息块/通用互联网文件系统(Server Message Block/Common Internet File System,SMB/CIFS)。

虽然原始的 SMB 实现是专有的,但是它被逆向设计以便在 Linux 中受到支持。后来的 SMB 修订版被公开记录以便允许在 Linux 中进行更简单的开发。

Linux 继续发展针对 NFS 的各种增强和扩展。NFS 现在是一个状态协议并包括对数据和元数据分离的优化以及数据访问并行。通过参考资料 中的链接可以阅读有关 NFS 发展的更多信息。正如基于以太网的 SAN,Linux 中对 10GbE 的支持允许高性能的 NAS 库。

其他存储架构

不是所有的存储架构都非常适合 DAS、SAN 和 NAS 存储器。因为 Linux 是开放的,所以更容易在其内部开发新的技术,这就是为什么您可以在 Linux 中发现最新尖端技术的原因。

一个值得一提的存储架构是对象存储架构,尽管不是新功能,但是它很有趣。对象存储架构将文件从其元数据中分离出来并独立存储它们(在其各自的数据和元数据服务器上)。此分离提供了一些优势,例如最大程度降低了元数据的瓶颈(因为与此服务器交互只需要定位并打开文件)。还可以通过在多个数据服务器上分段数据进行并行访问来增强性能。对象存储在 Linux 内以各种方式来实现,包括对对象存储设备(Object Storage Device,OSD)规范的支持,以及在 Linux clUSTER (Lustre) 和扩展对象文件系统(Extended Object File System,exofs)内以不同方式实现。

存在名为内容寻址存储(content-addressable storage,CAS)的类似技术,其使用数据散列值以便标识其名称和地址。此技术还称为固定内容存储(fixed-content storage,FCS),是非常有用的,因为其容易识别重复数据:该散列之(如果足够强)将是相同的且允许简单的重复数据删除。Venti 架构支持这种方法并存在于 Linux 内(除了贝尔实验室的 Plan 9 版本之外)。

存储服务:逻辑卷管理 

虽然存储虚拟化曾经是高端存储系统的独特功能,但是现在它是 Linux 的标准功能。Linux 中可用的一个最重要的服务是逻辑卷管理器(Logical Volume Manager,LVM)。LVM 是一个薄层,其位于基础存储架构中可用的物理存储之上(附带用户空间工具),并将该存储提取到一个或多个管理更简单的逻辑卷中。例如,在物理磁盘不能调整大小时,可以调整逻辑卷大小以便从其中添加或删除空间。

通过将物理设备提取到逻辑设备的能力,LVM 创建了一些其他存储功能,例如卷的只读和读写快照、跨卷的数据分段以便提高性能(独立磁盘的冗余阵列 [RAID]-0)、跨卷 (RAID-1) 的数据镜像以及在物理设备之间的卷迁移(甚至联机时)。

对于镜像之外的数据保护来说,Linux 包括 md(其代表多个磁盘)并提供一系列丰富的 RAID 功能。此元素实现了软件 RAID 功能,支持 RAID-4(通过校验块分段数据)、RAID-5(通过分布式校验块分段数据)、RAID-6(通过分布式和双冗余校验块分段数据)以及 RAID-10(分段并镜像数据)。

LVM 依赖于另一个名为设备映射器 的存储组件,其提供(在其他功能中)多路径功能。例如,在 SAN 环境中,通常有多个到 SAN 构造的存储界面。多路径是一种提供保护以避免给定路径故障的功能,确保只要存在路径来与端点通信,就仍然可以使用存储。

存储功能

在过去几年中,项存储堆栈添加了两个相对简单的功能,说明了存储生态系统的发展:

– 数据完整性

– 支持固态磁盘(solid-state disks,SSDs)

数据完整性

第一个变更处理在企业存储设置中使用商用驱动器。虽然企业级驱动器(如 SAS 驱动器)是可靠的,但是 SATA 驱动器是以不同要求以及成本作为主要因素而创建的。由于这个原因,SATA 驱动器可能遭遇称为无提示数据损坏 的问题,即在从磁盘读取数据时可能引入错误且无法检测到这些错误。要在企业设置中解决此问题并支持 SATA 驱动器,需将数据完整性代码添加到磁盘上的块中(其中磁盘使用 520 字节扇区,而不是传统的 512 字节块)。此外,驱动器自身可以验证正在写入的数据,以便其完整性代码与数据匹配。用这种方式,可以在错误被写入磁盘时捕获这些错误,而不是以后在无法对这些错误进行任何操作时检测到它们。

这种机制被称为数据完整性字段(Data Integrity Field,DIF),如图 3 所示,其代表一个在数据块上包括循环冗余校验(Cyclic Redundancy Check,CRC)的 8 字节尾部、一个参考标记(通常是逻辑块地址(Logical Block Addressing [LBA])的一部分)以及一个应用程序定义的应用程序标记。参考标记对于捕获对不正确块的错误写入非常有用,其中应用程序标记可用于捕获软件堆栈中的其他错误。例如,如果写入 PDF 文档,那么应用程序标记可设置为用来指示特殊 PDF 标记的值。在读取 PDF 时,可以检查到每一个块的应用程序标记,以便确保所有标记都指定该 PDF 标记。自从内核版本 2.6.27 以来,Linux 内支持 DIF。

图 3. 适用于 512 字节扇区的 DIF 结构

对SSD的增加支持

SSD 的引入正在以一些方式改变着存储的生态系统。这些磁盘删除了在旋转磁盘中的一些比较大的延时,因此其提供了一种维护与 CPU 之间的数据流的方式。但是 SSD 不同于硬盘驱动器(Hard Disk Drive,HDD),因为它们是可以消耗掉的。SSD 内存储的编写次数是有限的(取决于技术);因此,在编写数据时要尽可能的有效是非常重要的。更糟的是,SSD 必须内部切换数据以便尽可能减低在称为垃圾收集 或耗损均衡 的进程中引入错误的可能。此进程会导致写入到可消耗的存储,因此应尽量减少。

使用 SSD 和传统存储的另一个问题是 HDD 不关心磁盘上的数据是否有效。如果文件系统使数据无效,则该数据可保留在磁盘上且没有任何不利之处。此限制不能与 SSD 同时存在因为耗损均衡的要求。由于这个原因,Linux 现在支持文件系统将丢弃块传递到 SSD 的功能(自内核版本 2.6.29 开始)。此功能允许 SSD 从耗损均衡进程删除这些块,并有助于增加驱动器的耐力。

文件系统

将 Linux 真正与其他操作系统分隔开的是其庞大的文件系统库。在 Linux 中,您可以发现像第三扩展文件系统(third extended file system,ext3)和第四扩展文件系统(fourth extended file system,ext4)那样的传统客户端文件系统,但是您还将发现先进的分布式文件系统、集群文件系统以及并行文件系统。您可以发现新的、高端的基于新理念的文件系统,以及在存储域中处理新问题。

今天,在尖端文件系统方面,Linux 支持 ZFS 和 Butter FS (BTRFS)。这两个文件系统互相竞争并共享即写即拷语义的区别(这些块从来没有编写到位)。此外,这两个文件系统都支持数据重复删除、内部数据保护(类 RAID 保护)、数据和元数据校验和以及其他存储功能(如快照)。

Linux 也是分布式文件系统的产地。一个示例就是 Lustre,其是支持成千上万节点并扩展到千兆兆存储容量的大规模并行分布式文件系统。Ceph 提供类似的功能并在去年被引入到 Linux 内核。Linux 中的其他的示例包括 GlusterFS 和通用并行文件系统(General Parallel File System,GPFS)。

您还可以在 Linux 中发现特定的文件系统,包括像新实现日志结构文件系统(New Implementation Log Structure File System,NiLFS(2))那样的日志结构文件系统和像 exofs 那样基于对象的文件系统。因为在许多使用模式中 Linux 可发现其自身,所以您还将发现资源约束使用(如嵌入式系统)以及低延时应用程序(如高性能计算(high-performance computing,HPC))的文件系统。嵌入式领域中的文件系统包括 Yet Another Flash File System 第 2 版 (YAFFS2)、Journaling Flash File System 第 2 版 (JFFS2) 以及未分类块图像文件系统(Unsorted Block Image File System,UBIFS)。HPC 空间中的文件系统包括并行 NFS(Parallel NFS,pNFS)、Lustre 以及 GPFS.

Linux 存储的未来

因为其开放性和大量的开发人员,Linux 是且将继续是文件系统和通用存储研究的目标。

存储的最新改变之一是使用远程服务以便经济有效地存储归档数据。今天众所周知的云存储,许多供应商都提供高效和透明的远程访问,具有不同服务等级协议(涵盖像保护和宽带那样的功能)的集中存储。两个示例包括 Ubuntu One 和 Dropbo.另一个服务被称为 SpiderOak,可用于将您的本地用户目录备份到云中,而只需很少的费用。

还有什么功能可能会出现在 Linux 中?也许是对大扇区大小的支持(超过 512 字节扇区)、精简配置以便避免保留但不使用的容量(其中已公布的存储超过了物理容量)、存储重复删除(以便最大化存储可用性)以及更有效的存储堆栈以便利用驱动器(例如 SSD)的新速度和效率?无论存储生态系统如何发展,Linux 永远是首当其冲的。

关于作者

M. Tim Jones 是一位嵌入式固件架构师,他是 Artificial Intelligence: A Systems Approach、GNU/Linux Application Programming(现在是第二版)、AI Application Programming(第二版)以及 BSD Sockets Programming from a Multilanguage Perspe等书的作者。他的工程背景非常广泛,从同步宇宙飞船的内核开发到嵌入式架构设计,再到网络协议的开发。Tim 在位于科罗拉多州 Longmont 的 Intel 工作。