磁盘故障的影响程度不一,从轻微的中断到整个的服务器故障。那么,当遇到故障时该怎么做呢?
第一步是检查磁盘资源的可访问性,从最高可用级别开始一直往下,在需要时使用 errpt
作为指导。如果服务器仍在正常运行,那么使用 df
或 mount
命令进行查看时文件系统是否仍然存在?如果没有,是否能用 lsvg
或 varyonvg
访问卷组,或是它已丢失了配额(quorum)?磁盘本身是否仍处在
Available 状态,或者使用 lsdev –Ccdisk
命令后,是否显示它们处于的是 Defined 状态?像执行 lspath
或 pcmpath
这样的 SAN 存储命令后,这些光纤通道设备显示的是离线还是丢失?当通过 Hardware Management Console 查看时,服务器仅是宕机并处于 Not Activated 状态?大型的 System p 机器或 SAN 子系统宕机了?不要只是因为某一类资源可用而贸然做这样的假设;所有类似资源都必须处于可用状态,所以务必全面检查。
query adapter
第二步是检查资源的完整性,从最低的可用性等级开始向上检查。服务器是否成功引导?系统启动时是否出现故障,如带有数字 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 的产品)来应对数据丢失和无法恢复的最坏情况。