为了决定如何最大限度地利用您的设备,您需要了解可用的技术及其影响。与往常一样,在速度、可靠性、功耗、灵活性、易用性和复杂性方面可能存在一些权衡。
下面描述的许多技术可以多种方式堆叠,以最大限度地提高性能和可靠性,尽管代价是增加了复杂性。
这是一种通过并行使用多个磁盘来提高可靠性、速度或两者兼而有之的方法,从而减少访问时间并提高传输速度。可以使用校验和或镜像系统来提高可靠性。大型服务器可以利用这种设置,但对于单用户系统来说可能有些过分,除非您已经有大量可用的磁盘。有关更多信息,请参阅其他文档和常见问题解答。
对于 Linux,可以使用软件(内核中的 md
模块)、Linux 兼容的控制器卡(PCI 到 SCSI)或 SCSI 到 SCSI 控制器来设置 RAID 系统。查看文档以了解可以使用哪些控制器。硬件解决方案通常更快,可能也更安全,但成本很高。
Linux 可用硬件 RAID 解决方案的摘要可在 Linux Consulting 获取。
SCSI-to-SCSI 控制器通常以完整的机柜形式实现,其中包含驱动器和一个控制器,该控制器通过第二条 SCSI 总线连接到计算机。这使得整个驱动器机柜看起来像一个单一的、快速的 SCSI 驱动器,并且不需要特殊的 RAID 驱动程序。缺点是连接机柜和计算机的 SCSI 总线成为瓶颈。
对于拥有大型磁盘阵列的人来说,一个明显的缺点是 /dev 目录中可以存在的 SCSI 条目数量有限。在这些情况下,使用 SCSI-to-SCSI 将节省条目。
通常,它们通过前面板或连接到其板载串行接口的终端进行配置。
此类系统的一些制造商是 CMD 和 Syred,他们的网页描述了多个系统。
PCI-to-SCSI 控制器顾名思义,连接到高速 PCI 总线,因此不会像 SCSI-to-SCSI 控制器那样受到相同的瓶颈限制。这些控制器需要特殊的驱动程序,但您还可以通过网络控制 RAID 配置,从而简化管理。
目前,Linux 仅支持少数 PCI-to-SCSI 主机适配器系列。
最古老和最成熟的是 DPT 的一系列控制器,包括 SmartCache I/III/IV 和 SmartRAID I/III/IV 控制器系列。这些控制器由标准内核中的 EATA-DMA 驱动程序支持。该公司还有一个内容丰富的 主页,其中除了产品相关信息外,还介绍了 RAID 和 SCSI 的各种一般方面。
有关 DPT 控制器驱动程序(EATA* 驱动程序)的作者的更多信息,请访问他在 SCSI 和 DPT 上的页面。
这些不是最快的,但具有良好的可靠性记录。
请注意,DPT 控制器的维护工具目前仅在 DOS/Win 下运行,因此您需要一个小的 DOS/Win 分区来安装某些软件。这也意味着您必须将系统启动到 Windows 才能维护您的 RAID 系统。
最近新增的是 ICP-Vortex 的一系列控制器,具有多达 5 个独立通道和基于 i960 芯片的非常快速的硬件。Linux 驱动程序由该公司自己编写,这表明他们支持 Linux。
由于 ICP-Vortex 提供 Linux 的维护软件,因此无需重启到其他操作系统即可设置和维护您的 RAID 系统。这也为您节省了额外的停机时间。
这是最新的产品之一,目前处于早期测试阶段。更多信息和驱动程序可在 Dandelion Digital's Linux DAC960 Page 获取。
另一个非常新的产品,目前处于 Beta 版本的是 Smart-2 驱动程序。
IBM 已将其 驱动程序 作为 GPL 发布。
许多操作系统都提供使用普通磁盘和控制器的软件 RAID。成本较低,原始磁盘 IO 的性能可能非常高。由于这可能非常占用 CPU,因此会显着增加负载,因此如果机器的性能受 CPU 限制而不是受 IO 限制,那么您最好使用硬件 PCI-to-RAID 控制器。
软件 RAID 与硬件 RAID 的实际成本、性能,尤其是可靠性是一个非常有争议的话题。到目前为止,Linux 系统的可靠性一直非常好。
Linux 上当前的软件 RAID 项目是 md
系统(多设备),它提供的功能远不止 RAID,因此稍后将更详细地描述。
RAID 有许多级别和类型,我将在此处简要概述一下。关于它已经有很多著作,建议有兴趣的读者阅读 Software RAID HOWTO 以了解更多信息。
还有基于 RAID 0 或 1 以及另一个级别的混合 RAID。许多组合是可能的,但我只见过少数被提及的。这些比上面提到的 RAID 级别更复杂。
RAID 0/1 结合了条带化和复制,这提供了非常高的传输速度以及快速寻道和冗余。缺点是磁盘消耗高以及上述复杂性。
RAID 1/5 结合了 RAID5 的速度和冗余优势以及 RAID1 的快速寻道。与 RAID 0/1 相比,冗余得到提高,但磁盘消耗仍然很大。实现这样的系统通常需要 6 个以上的驱动器,甚至可能需要多个控制器或 SCSI 通道。
卷管理是一种克服固定大小分区和磁盘限制的方法,同时仍然可以控制文件空间的各个部分驻留在何处。借助这样的系统,您可以向系统中添加新磁盘,并将此驱动器中的空间添加到文件空间中需要的部分,以及在灾难性故障发生之前将数据从发生故障的磁盘迁移到其他驱动器。
Veritas 开发的系统已成为逻辑卷管理的实际标准。
目前,卷管理是 Linux 缺乏的领域。
其中之一是虚拟分区系统项目 VPS,它将重新实现 IBM AIX 系统中发现的许多卷管理功能。不幸的是,该项目目前已暂停。
另一个项目是 逻辑卷管理器 项目,该项目类似于 HP 的项目。
md
内核补丁
Linux 多磁盘 (md) 在不同的开发阶段提供许多块级功能。
RAID 0(条带化)和连接非常稳定且具有生产质量,RAID 4 和 5 也相当成熟。
也可以堆叠一些级别,例如镜像 (RAID 1) 两对驱动器,每对驱动器设置为条带化磁盘 (RAID 0),这提供了 RAID 0 的速度和 RAID 1 的可靠性。
除了 RAID 之外,该系统还提供(在 alpha 阶段)块级卷管理,很快还将提供半透明文件空间。由于这是在块级别完成的,因此它可以与任何文件系统结合使用,甚至可以与使用 Wine 的 fat
文件系统结合使用。
仔细考虑您组合的驱动器,以便您可以并行操作所有驱动器,从而获得更好的性能并减少磨损。在 md
附带的文档中阅读有关此内容的更多信息。
不幸的是,Linux 软件 RAID 已分为两个分支,旧的稳定版本 0.35 和 0.42 记录在官方的 Software-RAID HOWTO 中,而较新的不太稳定的 0.90 系列记录在非官方的 Software RAID HOWTO 中,后者是一项正在进行的工作。
用于 ext2fs 在线增长的补丁 已在早期阶段提供,并且在 Sourceforge 的 ext2fs resize 项目 中正在进行相关工作。
提示:如果您无法使其正常工作,则说明您忘记设置 persistent-block
标志。您最好的文档目前是源代码。
磁盘压缩与文件压缩是一个备受争议的话题,尤其是在文件损坏的额外危险方面。尽管如此,对于喜欢冒险的管理员来说,还是有几种选择可用的。这些选项采用多种形式,从内核模块和补丁到额外的库,但请注意,大多数选项都存在各种形式的限制,例如只读。随着开发以惊人的速度进行,当您阅读本文时,规范无疑已经发生了变化。与往常一样:自己查看最新的更新。这里仅给出一些参考。
e2compr
是一个扩展 ext2fs
压缩功能的软件包。它仍在测试中,因此主要引起内核黑客的兴趣,但很快应该会获得更广泛使用的稳定性。查看 http://e2compr.memalpha.cx/e2compr/ name="e2compr homepage"> 以获取更多信息。我有关于速度和良好稳定性的报告,这就是为什么在这里提到它。
访问控制列表 (ACL) 提供对每个用户的用户文件访问的更精细控制,而不是目录列表 (drwxr-xr-x
) 中看到的传统所有者、组和其他人。Linux 目前尚不提供此功能,但预计在内核 2.3 中提供,因为 ext2fs
中已安装了钩子。
cachefs
这使用硬盘的一部分来缓存较慢的介质,例如 CD-ROM。它在 SunOS 下可用,但尚不适用于 Linux。
这是一个写入时复制系统,其中写入操作转到与原始源不同的系统,同时使其看起来像普通文件空间。因此,文件空间继承了原始数据,并且半透明写回缓冲区对于每个用户可以是私有的。
有许多应用
SunOS 提供了此功能,并且正在为 Linux 开发此功能。曾经有一个名为继承文件系统 (ifs
) 的旧项目,但该项目已停止。当前的一个项目是 md
系统的一部分,并提供块级半透明性,因此可以应用于任何文件系统。
Sun 有一个内容丰富的关于半透明文件系统的 页面。
应该注意的是,Clearcase(现在归 Rational 所有) 通过编写自己的 UNIX 文件系统,率先并普及了用于软件配置管理的半透明文件系统。
当驱动器速度慢且容量小时,这种技巧曾经非常重要,并且一些文件系统在放置文件时会考虑不同的特性。尽管更高的整体速度、板载驱动器和控制器缓存以及智能性降低了这种技巧的效果。
尽管如此,即使在今天,仍然可以获得一些好处。正如我们所知,“世界统治地位”即将实现,但要实现“快速”这一目标,我们需要使用我们可以使用的所有技巧 。
为了理解该策略,我们需要回顾一下这种近乎古老的知识以及各种磁道位置的属性。这是基于以下事实:传输速度通常会随着磁道远离主轴而增加,并且从中心磁道寻道或寻道到中心磁道比从内磁道或外磁道寻道或寻道到内磁道或外磁道更快。
大多数驱动器使用以恒定角速度运行的磁盘,但在所有磁道上使用(相当)恒定的数据密度。这意味着您在外磁道上获得的传输速率将比在内磁道上高得多;这种特性非常适合大型库的要求。
较新的磁盘使用逻辑几何映射,该映射与驱动器本身透明映射的实际物理映射不同。这使得估计“中间”磁道变得有点困难。
在大多数情况下,磁道 0 位于最外面的磁道,这是大多数人使用的一般假设。尽管如此,应该记住,不能保证情况就是如此。
磁道的传输速度通常较慢,并且位于寻道位置的一端,因此寻道也很慢。
这更适合低端目录,例如 DOS、root 和打印假脱机目录。
与内磁道相比,磁道的传输速度平均更快,并且位于中间位置,因此寻道速度平均也更快。
此特性非常适合要求最高的部分,例如 swap
、/tmp
和 /var/tmp
。
磁道平均具有更快的传输特性,但与内磁道一样,它们位于寻道的末端,因此从统计学上讲,寻道速度与内磁道一样慢。
库等大型文件将受益于放置在此处。
因此,可以通过将频繁访问的磁道定位在中间来缩短寻道时间,从而缩短平均寻道距离,从而缩短寻道时间。这可以通过使用 fdisk
或 cfdisk
在中间磁道上创建一个分区,或者首先创建一个等于整个磁盘一半大小的文件(使用 dd
),然后再创建频繁访问的文件,之后可以删除虚拟文件来完成。这两种情况都假设从空磁盘开始。
后一种技巧适用于新闻假脱机目录,其中空目录结构可以放置在中间,然后再放入数据文件。这也有助于稍微减少碎片。
这个小技巧可以用于普通驱动器以及 RAID 系统。在后一种情况下,如果可能,居中磁道的计算将有所不同。请查阅最新的 RAID 手册。
由此产生的速度差异取决于驱动器,但 50% 的改进是一个典型值。
相同的机械磁头磁盘组件 (HDA) 通常可用于多种接口(IDE、SCSI 等),因此机械参数通常具有可比性。如今,机械结构通常是限制因素,但开发正在稳步改进。有两个主要参数,通常以毫秒 (ms) 为单位引用
在用于磁头移动的音圈取代步进电机后,改进似乎已趋于平缓,现在更多精力(实际上)用于提高转速。这还具有提高传输速率的次要好处。
一些典型值
Drive type
Access time (ms) | Fast Typical Old
---------------------------------------------
Track-to-track <1 2 8
Average seek 10 15 30
End-to-end 10 30 70
这表明,高端驱动器提供的访问时间仅比普通驱动器略好,但基于步进电机的旧驱动器明显更差。
Rotational speed (RPM) | 3600 | 4500 | 4800 | 5400 | 7200 | 10000
-------------------------------------------------------------------
Latency (ms) | 17 | 13 | 12.5 | 11.1 | 8.3 | 6.0
由于延迟是到达给定扇区所需的平均时间,因此公式非常简单
latency (ms) = 60000 / speed (RPM)
显然,这也是为开发投入的努力获得回报递减的一个例子。然而,真正突飞猛进的是功耗、发热和噪音。
还有一个 Linux Yoke Driver 以 beta 版本提供,旨在对一个 Linux 块设备到另一个 Linux 块设备进行热插拔透明绑定。这意味着,如果您将两个块设备绑定在一起,例如 /dev/hda
和 /dev/loop0
,则写入一个设备也将意味着写入另一个设备,并且从任一设备读取都将产生相同的结果。
操作系统分层设计的优势之一是您可以灵活地以多种方式将各个部分组合在一起。例如,您可以使用 cachefs
缓存 CD-ROM,该 CD-ROM 是跨 2 个驱动器的条带化卷。反过来,可以使用从另一台机器 NFS 挂载的卷半透明地设置它。RAID 可以堆叠在多个层中,以提供非常快的寻道和传输,使其即使在 3 个驱动器发生故障的情况下也能工作。选择有很多,仅受想象力的限制,也许更重要的是,金钱的限制。
可用的组合几乎是无限的,但我的建议是从一个简单的设置开始,没有任何花哨的附加组件。感受一下需要什么,最大性能在哪里需要,是访问时间还是传输速度是瓶颈等等。然后依次逐步引入每个组件。由于您可以非常自由地堆叠,因此您应该能够随着时间的推移相对轻松地改装大多数组件。
RAID 通常是一个好主意,但请确保您彻底掌握了这项技术并拥有可靠的备份系统。