简介
如果您曾经做过一段时间的 IBM ® AIX® 系统管理员或 SAN 管理,那么您就会对磁盘错误、文件系统问题和 Logical Volume Manager (LVM) 故障非常熟悉。如果其中某种情况发生了,您将如何应对呢?但是更好的是,如何提前预防这类情况的发生呢?
本文关注的是这类情况,即当好磁盘开始转坏。本文首先概述了磁盘错误及其分类。其后,介绍了硬件概念以及搭建设计良好的冗余环境的方式。进而讨论了危机情况下的应对方案。
磁盘错误分类
我使用两个主要的度量值来分类 AIX 系统上的磁盘错误:影响和持续时间。影响 所量度的是磁盘错误的影响力及其对服务器的冲击。换言之,就是 “这会造成何程度的伤害?”。持续时间 所量度的是磁盘错误持续的时长和恢复时间,即 “这伤害将持续多久?”。
影响可分为四个主要级别:
- 可用性丧失:当存储资源离线或断开与其管理服务器的连接时就会发生可用性丧失。虽然磁盘上的数据没有损失,但是无法访问该磁盘。例如:文件系统遭卸装或光纤通道适配器被断开连接。
- 数据丢失:由于逻辑或物理问题,数据无法写入磁盘或无法从磁盘读取。例如:LVM 写入错误。
- 跨多个磁盘的数据丢失:在这种情况下,不仅一个磁盘而是多个磁盘均遭遇了数据丢失。当逻辑卷跨磁盘条带化且其中一个磁盘故障时,常常会发生这种情况。
- 跨多个服务器的数据丢失:随着 SAN 技术的广泛应用,一个磁盘硬件可能受损到这样的程度:多个服务器均受到了数据丢失的影响。
同样地,持续时间也可用分为四个主要级别:
- 暂时:这类磁盘错误不常见且只发生一次,不会带来真正的威胁。它只在服务器的 errpt 内出现一次,然后即消失。例如:一次糟糕的块重分配。
- 间歇:间歇错误的出现很不规律,可以由初期问题推断,比如若硬盘记录了一系列写入错误时,往往表明此驱动器可能会出现故障。
- 经常:就像是由一个 cron 作业定期安排的那样,以周、天、小时或分钟为间隔发生问题,这会对服务器形成严重威胁并具有广泛的有害影响。
- 永久:不太容易或者根本不可能从这类错误中恢复。缺乏可替换硬件,将不能从这种情况中恢复。
通过交叉参考表中的这两个度量指标,您就能够更好地了解磁盘错误的危急程度以及它们对服务器的影响。图 1 提供了这样的一个示例表。
图 1. 磁盘错误的影响和持续时间指标的交叉参考
图 1 显示了一个四乘四的表。其中的列代表的是问题的持续时间,从左到右升序排列。行代表的是问题的影响,严重程度从下至上升序排列。表中的单元格按色谱进行了颜色编码,从左下角表示问题不怎么严重(比如可用性的临时丧失)的蓝绿色开始,一直到右上角表明问题比较严重(比如跨多个服务器的数据永久丢失)的橙红色。
就我的经验而言,超过绿色区域均会产生严重的问题,并有可能会导致生产效率或业务上的损失。服务器进入黄色区域并带来灾难性后果的实例,我也只是见到过几次。
预防性措施
磁盘是否 会出现故障从来都不是考虑问题,要考虑的问题是故障会在何时 发生。没有任何磁盘能够保证永远正常工作。所有好的系统管理员的目标是避免成为硬件平均故障间隔时间的受害者,并找到一种方式来减轻磁盘故障的风险。
所有 AIX 或 SAN 管理员的三个主要目标是最大化可用性、性能和冗余。您希望存储环境是可用的,即为了能确保按需访问数据也能有足够的磁盘空间来保存所有数据。磁盘也必须具有良好的性能以便应用程序不会被任何 I/O 等待所延误。此外,磁盘还需要具有冗余以便资源的故障不会妨碍服务器继续发挥作用。
通常,每一种最大化都会要在至少一个其他方面做出权衡。一个在可用性和性能上做到最大化的存储环境通常就不会考虑实现大量的冗余,因为针对速度做过优化的磁盘资源常常都会用尽最后一个可用比特。一个侧重于可用性和冗余的存储环境则很有可能读写速度较低,因为长期的稳定性是其追求的目标。而一个侧重于性能和冗余的解决方案则常常因为要获得高速 I/O 以及双倍的读写而占用更多的空间,这在可用的空间方面,的确降低了可用性。
AIX 提供了更多的实用方式可用来准备预防性措施。每个管理员都应该知道下列的几个常用概念:
- 避免单点故障。永远不要构建这样一个环境,即其中单个资源的丧失会损害整个环境。这样的一种架构通常只包含单个硬盘、单个光纤通道适配器或单个电源供所有设备共用。在这种情况下,资源必然会在最不恰当的时候瘫痪。
- RAID 技术是最大化资源的一个很好的方式。多年前,工程师们开发了一种通过 RAID 技术将便宜的存储设备集中到一个较大的组群中的方式。AIX 已经融合了很多级别的 RAID 技术,且无任何其他的成本;这些技术可在软件级别上使用,比如条带化 (RAID 0) 和镜像 (RAID 1)。根据所使用的磁盘子系统的类型,还有其他的几个选项可用,比如具有分布式奇偶校验的条带化 (RAID 5)、条带化镜像 (RAID 0 + 1) 或已镜像条带化 (RAID 1 + 0/RAID 10)。
- 使用有效的 LVM 策略来隔离数据。管理员可能犯的最严重错误就是把服务器的所有资源如操作系统、第三方应用程序、页面空间以及应用程序数据等均置于单个卷组中。这么做会产生各种各样不好的后果,包括性能差、系统备份过多、可管理性受损以及故障发生几率增加。应该对服务器的各个方面进行评估和隔离,并将其资源放入各自卷组和存储类型。例如,可以将一个大型的数据库服务器设计成:拥有一个已经部署成镜像模式的 rootvg 磁盘,用于存储应用程序的 SAN 存储和分页空间,一些用于归档日志和高-I/O 交互的固态磁盘。
接下来,我们将研究 AIX 服务器上所使用的各种存储类型的策略。
内部硬盘驱动器
作为 AIX 中最常用的存储格式,内部硬驱常被用于根卷组磁盘以及占用空间较小的服务器。在使用内部硬驱时,第一步均要为每个卷组配置至少两个磁盘,并使用 mirrorvg 命令镜像这些硬盘驱动器。如果服务器是一个大型的 IBM System p® 机,那么就需要跨多个抽屉 (drawer) 选择磁盘来最大化冗余,以防某个硬件如背板发生故障。同时,为了优化性能,最好使用 lspv –l 和 lspv –p 检查磁盘上逻辑卷布局来保持磁盘外沿上较高的-I/O 区域与逻辑卷相邻。
小型 SAN 存储
对于需要更多内部磁盘空间来存储大量数据的环境来说,较小的存储子系统,如直接附加的 IBM FAStT 磁盘抽屉或较早的小型 SAN 技术,均是非常实惠的解决方案。对于这类情况,重要的是要密切管理环境的配置,因为过程中很有可能会出现一些单点故障。该存储必须通过适当的 RAID 配置进行优化,比如一个附带热备份磁盘的 RAID 5 设置。还要有两个能够访问这个抽屉的适配器以保证服务器端的可用性和冗余。为了让这些磁盘能够清楚地呈现给服务器,还应该安装并随时更新适当的软件驱动器,比如多路径 I/O 或一个子系统设备驱动器路径控制模块。
大型 SAN 存储
在大型的 SAN 存储环境中,多个服务器通过交换机访问多个存储设备,比如 IBM System Storage® DS8300 设备,通常也会有专门的 SAN 管理员来管理磁盘资源。但是从 AIX 角度看,系统管理员也可以帮忙做这些事,比如选择多个双端口光纤通道卡来与不同的光纤进行通信和改进吞吐量。如果使用了虚拟基础架构优化 (VIO) 技术,那么 N_Port ID 虚拟化 (NPIV) 可充许具有较低 I/O 需求的多个服务器通过同一个适配器进行相互通信,从而减少分配给 LPAR 的插槽数量。SAN 引导技术为 LPAR 提供了极快速的构建和引导时间,特别是在用 Network Installation Manager (NIM) 完成时,尤其如此。
恢复步骤
磁盘故障的影响程度不一,从轻微的中断到整个的服务器故障。那么,当遇到故障时该怎么做呢?
第一步是检查磁盘资源的可访问性,从最高可用级别开始一直往下,在需要时使用 errpt 作为指导。如果服务器仍在正常运行,那么使用 df 或 mount 命令进行查看时文件系统是否仍然存在?如果没有,是否能用 lsvg 或 varyonvg 访问卷组,或是它已丢失了配额(quorum)?磁盘本身是否仍处在 Available 状态,或者使用 lsdev –Ccdisk 命令后,是否显示它们处于的是 Defined 状态?像执行 lspath 或 pcmpath query adapter 这样的 SAN 存储命令后,这些光纤通道设备显示的是离线还是丢失?当通过 Hardware Management Console 查看时,服务器仅是宕机并处于 Not Activated 状态?大型的 System p 机器或 SAN 子系统宕机了?不要只是因为某一类资源可用而贸然做这样的假设;所有类似资源都必须处于可用状态,所以务必全面检查。
第二步是检查资源的完整性,从最低的可用性等级开始向上检查。服务器是否成功引导?系统启动时是否出现故障,如带有数字 552、554、 或 556 的 LED 消息(毁坏的文件系统、JFS 或 Object Data Manager [ODM])?如果系统仍在正常运行,那么执行cfgmgr 命令后,磁盘资源是否会重新联机并回到 Available 状态?卷组是否可由 varyonvg 命令激活?文件系统是否完全载入?想要查看的数据是否能出现在文件系统内,还是丢失了?
第三步是按具体情况具体分析的方式解决资源问题。以下是我在多年的修复问题过程中常常使用的一些技巧:
- 文件系统。以我的经验,这是最常见的一种磁盘错误。无需多费劲就可以让超块变脏、造成存储碎片、搞乱存储节点或引起errpt 反复出现 JFS 错误。即便是一个完整的文件系统也可能会把事情搞砸。修复文件系统问题最好的策略也是最简单的:利用文件系统检查命令 (fsck)。在这些情况下,我会卸载文件系统并针对它们运行 fsck –y ,直至不再出现错误,然后再重新载入它们。有时,我会格外彻底地卸载一个卷组内所有的文件系统,并使用外壳脚本中的循环脚本来完成此项任务以防出现潜在问题。
- 卷组。问题若超出了文件系统的范畴时,通常会转向卷组级别。有时,问题是 ODM 级的,可以通过 syncvg 或 synclvodm 进行纠正。在紧要关头,我曾用 varyoffvg 关闭卷组,用 exportvg 导出它们,然后用 importvg 重新导入它们以使其能被正确识别。但我总是会提前备份好 /etc/filesystems 文件并记录下磁盘端口 VLAN ID (PVID) 以保存载入的顺序。
- 物理卷。谈到 PVID,我看到过磁盘丢失,然后再以不同的 PVID 重新回到服务器。一个有帮助的做法是定期在别处记录下磁盘信息作为比照以防这类事情发生。如果真的发生了,我通常会用 rmdev –dl 从服务器删除这些磁盘,再用 cfgmgr 重新检测它们,然后再导出并重新导入卷组。
- SAN 连接。有时全局名称 (WWN) 并不跨 SAN 网络进行端对端的传播,比如 VIO 服务器上的 NPIV。我有时会通过运行pcmpath set adapter offline 禁用光纤通道适配器并手动定义或检查 WWN,然后再重新开启适配器。我也做过最极端的事,就是探查电缆并检查另一端是否有灯亮以确保没有物理问题存在。
- 引导问题。如果想要判断一个服务器为何在磁盘故障后不能引导,我通常会做的第一件事情是从服务器(根卷组除外),断开所有磁盘的映射和连接。如果为了找到一两个 rootvg 磁盘而探查数百个磁盘,那么将花去 Software Management System (SMS) 大量的时间。因此,我会在维护模式从一个 NIM 服务器引导系统来运行诊断并修复文件系统,用 bosboot 命令重新创建引导逻辑卷或访问此根卷组来修复诸如 /etc/filesystems 的配置文件。而且,在服务器启动后,有问题的文件系统通常都是那些本身处于关闭状态而它们旁边其他的文件系统则载入正常的文件系统。
- 恢复。最后,如果有东西损坏并确实需要修复,就要确保新更换的部件尽量接近于原始设备。这样一来,就可以最大限制地减少处理像文件系统大小或软件驱动器这类占用修复时间的操作。我一直建议要为做好系统备份(mksysb 映像和使用诸如 IBM Tivoli® Storage Manager 的产品)来应对数据丢失和无法恢复的最坏情况。
结束语
避免好的磁盘转坏所带来的影响和问题持续时间太长的最佳做法是不要在问题出现后才去解决问题,而是要设法最大限度地利用 AIX 环境的可用性、性能和冗余来提前防止这些错误的发生。但是如果错误确实发生了(因为故障在所难免),则应该验证它们的可访问性和完整性,并设计出增量计划 (incremental plan) 来修复它们,使您的服务器重新正常运行。
关于作者
Christian Pruett 是一个 IBM 全球服务团队的 p 系列主机工程师。他毕业于科罗拉多州立大学的历史系,拥有学士学位。他拥有 IBM 认证管理员认证,职业经历主要是围绕 RS/6000 主机,p 系列主机硬件和系统的支持工作。他目前是 IBM IGS 的一名团队负责人。
http://www.ibm.com/developerworks/cn/aix/library/au-gooddisksgobad/index.html