可以使用 vSphere On-disk Metadata Analyzer (VOMA) 检查元数据一致性,以及发现和修复 VMFS 数据存储或支持 VMFS 数据存储的逻辑卷上的元数据损坏事件。

问题

在遇到与 VMFS 数据存储或虚拟闪存资源有关的问题时,您可以检查元数据一致性。例如,发生下列任一情况时,请执行元数据检查:

  • 出现存储故障。
  • 重新构建 RAID 或执行磁盘更换后。
  • 您在 vmkernel.log 文件中看到了如下所示的元数据错误:
    cpu11:268057)WARNING: HBX: 599: Volume 50fd60a3-3aae1ae2-3347-0017a4770402 ("<Datastore_name>") may be damaged on disk. Corrupt heartbeat detected at offset 3305472: [HB state 0 offset 6052837899185946624 gen 15439450 stampUS 5 $
  • 无法在 VMFS 上访问文件。
  • 您在 vCenter Server 的事件选项卡中看到正在报告数据存储的损坏问题。

解决方案

要检查元数据一致性,请从 ESXi 主机上的 CLI 中运行 VOMA。VOMA 可用于检查并修复 VMFS 数据存储或支持 VMFS 数据存储的逻辑卷的轻微不一致问题。
VOMA 可检查并修复以下各项。
表 1. VOMA 功能

VOMA 功能

描述

元数据检查和修复

元数据检查和修复的示例包括但不限于以下内容:

  • 验证 VMFS 卷标头以实现基本元数据一致性。

  • 检查 VMFS 资源文件(系统文件)的一致性。

  • 检查所有文件的路径名和连接。

关联性元数据检查和修复

要为 VMFS6 启用关联性检查,请使用 -a|--affinityChk 选项。

关联性元数据检查和修复示例如下所示:

  • 资源类型和 FS3_ResFileMetadata 中的关联性标记。

  • 验证 SFB RC 元中的关联性标记 (FS3_ResourceClusterMDVMFS6)。

  • 验证 RC rcMeta 的 affinityInfo 条目中的所有条目,包括溢出键,以确保不存在无效项。检查缺少的条目。

目录验证

VOMA 可以检测并更正以下错误:

  • 目录哈希块损坏。

  • 分配映射损坏。

  • 链接块损坏。

  • 目录项块损坏。

VOMA 会根据损坏的性质只修复损坏的条目或完全重新构建哈希块、分配映射块和链接块。

丢失和找到的文件

在文件系统检查过程中,VOMA 可以查找文件系统的任意位置均未引用的文件。这些孤立的文件是有效、完整的,但在系统上没有名称或目录项。

如果 VOMA 在扫描过程中遇到孤立的文件,它将在卷的根目录中创建一个名为 lost+found 的目录,用于存储孤立的文件。文件的名称使用 Filesequence-number 格式。

VOMA 工具附带的命令选项包括以下各项。

表 2. VOMA 命令选项

命令选项

描述

-m|--module

要运行的模块,包括:

vmfs

如果您未指定模块名称,则默认情况下使用此选项。

您可以检查 VMFS 文件系统,以及为虚拟闪存资源提供支持的文件系统。如果指定了此模块,也会对 LVM 执行最少量的检查。

lvm

检查为 VMFS 数据存储提供支持的逻辑卷。

ptbl

检查并验证 VMFS 分区,例如 MBR 或 GPT。如果不存在分区,请确定是否应存在分区。

-f|--func

要执行的功能,包括:

query

列出模块所支持的功能。

check

检查错误。

fix

检查并修复错误。

dump

收集元数据转储。

-a|--affinityChk

为 VMFS6 包括关联性相关的检查和修复。

-d|--device

表示要检查的设备或磁盘。请务必提供为 VMFS 数据存储提供后备支持的设备分区的绝对路径。如果数据存储跨多个设备,请提供主数据区的 UUID。

例如,voma -m vmfs -f check -d /vmfs/devices/disks/naa.xxxx:x

如果使用 -x|--extractDump 命令,请输入多个设备路径,带分区限定符,以逗号分隔。输入的设备路径数等于跨区设备的数量。

-b|--blockSize

表示磁盘块大小。

-s|--logfile

指定日志文件的路径以输出结果。

-x|--extractDump

使用 VOMA 提取收集的转储。

-D|--dumpfile

指出转储文件以保存收集的元数据转储。

-v|--version

显示 VOMA 的版本。

-h|--help

显示 VOMA 命令的帮助消息。

-Y

指示在运行 VOMA 时没有使用 PE 表进行地址解析。

-Z| --file

指示对已提取的设备文件运行 VOMA。

示例

从跨区卷收集元数据转储:

voma -m vmfs -f dump -d head_extent -D dump_filename

将收集的转储提取回跨区卷的设备:

voma -x dump_filename -d head_extent,extent_2,extent_3...extent_n

使用 VOMA 检查元数据一致性

该任务演示了如何使用 VOMA 检查 VMFS 元数据一致性。VOMA 可用于检查并修复 VMFS 数据存储或虚拟闪存资源的微小不一致问题。从 ESXi 主机上的 CLI 中运行 VOMA。

前提条件

关闭所有正在运行的虚拟机的电源,或者将这些虚拟机迁移至另一数据存储。

过程

  1. 获取为想要检查的 VMFS 数据存储提供后备支持的设备的名称和分区编号。
    #esxcli storage vmfs extent list
    输出中的“Device Name”列和“Partition”列用于标识该设备。例如:
    Volume Name  .....  Device Name                             Partition  
    1TB_VMFS6    .....  naa.xxxx                                   3
  2. 检查 VMFS 错误。

    提供为 VMFS 数据存储提供后备支持的设备分区的绝对路径,并为分区编号提供设备名称。例如:

    # voma -m vmfs -f check -d /vmfs/devices/disks/naa.xxxx:x

    输出将列出可能的错误。例如,以下输出表示检测信号地址无效。

    XXXXXXXXXXXXXXXXXXXXXXX
    Phase 2: Checking VMFS heartbeat region
     ON-DISK ERROR: Invalid HB address
    Phase 3: Checking all file descriptors.
    Phase 4: Checking pathname and connectivity.
    Phase 5: Checking resource reference counts.
    
    Total Errors Found:           1