在 IBM Bluemix 云平台上开发并部署您的下一个应用。
开始您的试用
Linux 意味着许多事情,它的力量在于它能够灵活地支持截然不同的使用模式。但是 Linux 最重要的优势之一是作为存储领域的主力。关于 Linux 和存储通常让人想到直接附加存储或最新的文件系统,但是关于存储和 Linux 还有比所看到的多得多的东西。Linux 中的元素不仅稳定而且高端。
本文探讨了使 Linux 处于存储领域中心的各种存储技术。让我们从底部开始 — 即存储架构 —,然后逐步将堆栈发展为功能、文件系统和待执行计划(请参考图 1)。
图 1. 本文中探索的存储堆栈
存储架构
存储如何附加到平台是整体存储架构的关键。三个常见的架构涵盖了绝大多数模型:
- 直接附加存储(Direct-attached storage,DAS)
- 存储区域网络(Storage area networks,SAN)
- 网络附加存储(Network-attached storage,NAS)
当然,Linux 支持所有三种模型并通过与这些模型一起发生的变更而发展。
其他存储介质
虽然本文主要侧重于磁盘存储,但是很难忽略 Linux 中支持的其他设备。从快速消失的软盘驱动器、CD-ROM 和 DVD 读取器和编写器甚至企业磁带系统,在谈到大量存储设备支持时,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 永远是首当其冲的。
参考资料
学习
- 在 IBM 存储网络的 揭秘存储网络:DAS、SAN、NAS、NAS Gateway、Fibre Channel 和 iSCSI 中了解有关存储架构中差异的更多信息。
- NFS 随着 Linux 不断发展且现在支持名为 pNFS 的 NFS 并行形式,以便获得更好的扩展和性能。您可以在 Tim 的 文章 网络文件系统与 Linux(developerWorks,2010 年 11 月)中了解有关 Linux 中 NFS 发展的更多信息。
- 本文引用了 LVM 作为在平台中虚拟化存储的一种手段。您可以在 LVM2 资源页面 中了解有关 LVM2(LVM 的第二版)的更多信息。LVM2 使用设备映射器,您可以在 驱动器映射资源页面 中找到该映射器。此页面还向您介绍了多路径操作的用户空间工具。
- T10 DIF 在存储系统内提供端对端保护。您可以在原始的 T10 建议(T10/03-224r0)内了解有关 DIF 尾部和其理由的更多信息。
- 在 Tim 的其他文章中您可以了解有关本文所提到的一些文件系统的更多信息:
- 在 Linux 上运行 ZFS(developerWorks,2011 年 1 月)
- 下一代 Linux 文件系统:NiLFS(2) 和 exofs(developerWorks,2009 年 10 月)
- Ceph:一个 Linux PB 级分布式文件系统(developerWorks,2010 年 5 月)
- 剖析 ext4(developerWorks,2009 年 2 月)
- Linux 内核的发展(developerWorks,2009 年 3 月)
- Linux 虚拟系统文件交换器剖析(developerWorks,2009 年 8 月)
- Linux flash 文件系统剖析(developerWorks,2008 年 5 月)
- 分布式复制块设备(Distributed Replicated Block Device,DRBD)提供一种简单的方式来跨一对服务器保护卷。其处理单个物理卷并跨传统 TCP/IP 网络将该卷复制到对等主机。您可以在 Distributed Replicated Block Device 的高可用性(developerWorks,2010 年 8 月)中了解有关 DRBD 的更多信息。
- 由于重复删除的简单,CAS 系统提供了一种存储数据的有效方式。一个 CAS 的有趣应用程序位于虚拟化环境的上下文中,在那里重复数据很常见。在 体验内容可寻址存储和虚拟磁盘(Anthony Liguori 和 Eric Van Hensbergen)中阅读更多内容。
- Linux 支持增强主机控制器界面(Enhanced Host Controller Interface,EHCI)以及较新的xHCI(适用于高速 USB 3.0 设备)。
- Linux 支持种类繁多的磁盘附件标准,如 SCSI、IDE/Enhanced IDE (EIDE)/ATA、SAS、SATA、Fibre Channel 以及其他。
- 本文提到了一些文件系统,包括 GPFS(其是高性能集群文件系统)和 Lustre(其是大规模并行分布式文件系统)。在提及文件系统时,Linux 是首选的操作系统。
- SSD 用诸如 NAND 闪存等的固态内存替代 HDD 的机械内部。SSD 比传统旋转磁盘提供低能耗的优越性能。今天,您将在企业和消费设备中发现 SSD。
- 观看 developerWorks 演示中心,包括面向初学者的产品安装和设置演示,以及为经验丰富的开发人员提供的高级功能。
- 在 developerWorks Linux 专区 寻找为 Linux 开发人员(包括 Linux 新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程。
- 在 developerWorks 上查阅所有 Linux 技巧 和 Linux 教程。
- 随时关注 developerWorks 技术活动和网络广播。
获得产品和技术
- 以最适合您的方式 IBM 产品评估试用版软件:下载产品试用版,在线试用产品,在云环境下试用产品,或者在 IBM SOA Sandbox for People 中花费几个小时来学习如何高效实现面向服务架构。
讨论
- 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。