从 VMFS 数据存储删除或移除文件将释放文件系统内的空间。此可用空间会映射到某个存储设备,直到文件系统释放或取消映射该空间为止。ESXi 支持可用空间回收,也称为取消映射操作。

此操作有助于存储阵列回收未使用的可用空间。然后,取消映射的空间可以用于其他存储分配请求和需求。

自动回收 VMFS6 数据存储上的可用空间

在 VMFS6 数据存储上,ESXi 支持自动式异步回收可用空间。VMFS6 可以在后台运行取消映射命令,以释放支持取消映射操作的精简置备存储阵列上的可用存储空间。

自动取消映射操作有多项优势:
  • 取消映射请求以恒定速率发送,有助于避免备份阵列上出现任何即时加载。
  • 释放的区域按批量一起取消映射。
  • 其他工作负载的 I/O 性能不受取消映射命令的影响。

对于 VMFS6 数据存储,可以配置以下空间回收参数。

空间回收粒度
粒度定义底层存储可以回收的已释放空间扇区的最小大小。存储无法回收大小低于指定粒度的扇区。
对于 VMFS6,回收粒度等于块大小。如果指定块大小为 1 MB,则粒度也是 1 MB。不会回收大小小于 1 MB 的存储扇区。
注: 某些存储阵列会建议最佳取消映射粒度。 ESXi 对具有 1 MB 或更高(例如 16 MB)推荐取消映射粒度的阵列支持自动取消映射处理。在最佳粒度为 1 MB 及更低的阵列上,如果粒度为 1 MB 的因数,则支持取消映射操作。例如,1 MB 可以被 512 字节、4 KB、64 KB 等整除。
空间回收方法
可以采用优先级回收方法,也采用固定回收方法。使用优先级回收方法时,需要配置优先级别。对于固定方法,必须以 MB/秒为单位指定回收速率。
创建 VMFS6 数据存储时,可以使用 vSphere Client 设置优先级方法。要启用固定方法,稍后可以修改现有数据存储的空间回收设置。
或者,也可以使用 esxcli storage vmfs reclaim config set 命令设置空间回收参数。
空间回收优先级速率
此参数定义使用优先级回收方法时执行空间回收操作的速率。通常,VMFS6 可以突然发送大量取消映射命令,也可以零星发送,具体取决于工作负载和配置。对于 VMFS6,可以指定以下选项之一。
空间回收优先级 描述 配置
停用数据存储的取消映射操作。 vSphere Client

esxcli 命令

低(默认设置) 以低速率(25-50 MB/秒)发送取消映射命令。 vSphere Client

esxcli 命令

中等 以比低速率快两倍的速率(50-100 MB/秒)发送命令。 esxcli 命令
以比低速率快三倍的速率(100 MB/秒以上)发送命令。 esxcli 命令
空间回收主机
此参数定义可向 VMFS6 数据存储发出取消映射命令以进行自动空间回收的 ESXi 主机数。使用此参数可限制向目标支持 VMFS6 数据存储发出的空间回收负载的累计量。

启用空间回收后,VMFS6 数据存储只能在它至少具有一个打开的文件时才能开始释放未使用的空间块。例如,打开数据存储上其中一个虚拟机的电源时,可以满足这种条件。

创建 VMFS6 数据存储时配置优先级回收

空间回收设置控制如何回收支持数据存储的设备中已删除或未映射的块。在 vSphere Client 中创建 VMFS6 数据存储时,只能指定优先级这一空间回收方法。此外,还可以在创建数据存储时停用空间回收。

过程

  1. vSphere Client 对象导航器中,浏览到主机、集群或数据中心。
  2. 从右键单击菜单中,选择存储 > 新建数据存储
  3. 遵循创建 VMFS6 数据存储所需的步骤。
  4. 分区配置页面上,指定空间回收参数。
    这些参数定义执行空间回收操作时采用的粒度和优先级比率。您还可以使用此页面为数据存储停用空间回收。
    选项 描述
    块大小 VMFS 数据存储中的块大小定义最大文件大小和文件占用的空间量。VMFS6 支持的块大小为 1 MB。
    空间回收粒度 为取消映射操作指定粒度。取消映射粒度等于块大小,即 1 MB。

    不会回收大小小于 1 MB 的存储扇区。

    空间回收优先级 选择下列任一选项。
    • 低(默认值)。使用固定优先级方法进行空间回收。取消映射操作以低优先级速率执行。
    • 无。如果您不希望为数据存储使用空间回收操作,请选择此选项。
    注:vSphere Client 中,空间回收优先级的唯一可用设置是“低”和“无”。要将设置更改为“中”或“高”,请使用 esxcli 命令。
  5. 完成数据存储创建过程。

结果

激活空间回收后,VMFS6 数据存储只能在它至少具有一个打开的文件时才能开始释放未使用的空间块。例如,打开数据存储上其中一个虚拟机的电源时,可以满足这种条件。

为现有 VMFS6 数据存储配置固定回收

要激活固定回收方法,请修改数据存储的空间回收设置。

过程

  1. vSphere Client 中,导航到数据存储。
  2. 从右键单击菜单中,选择编辑空间回收
  3. 指定空间回收设置。
    选项 描述
    以固定速率启用自动空间回收 使用固定方法进行空间回收。以 MB/秒为单位指定回收速率。最小可用值为 10 MB/秒。
    禁用自动空间回收 不回收已删除或未映射的块。

    如果您希望为数据存储停用空间回收操作,请选择此选项。

  4. 单击确定以保存新设置。
  5. 卸载并重新挂载数据存储以使更改生效。
    1. 卸载数据存储.
    2. 挂载数据存储.
  6. 对访问数据存储的所有 ESXi 主机重复此过程。

结果

修改的空间回收优先级值显示在数据存储的常规页面上。

使用 ESXCLI 命令更改 VMFS6 上的空间回收

可以更改默认空间回收优先级、粒度及其他参数。

过程

  1. ESXi 主机上,使用以下命令设置空间回收参数。
    esxcli storage vmfs reclaim config set

    该命令采用以下选项:

    选项 描述
    -b|--reclaim-bandwidth 空间回收固定带宽,以 MB/秒为单位。
    -g|--reclaim-granularity 自动空间回收的最小粒度,以字节为单位。
    -m|--reclaim-method 自动空间回收的方法。支持的选项包括:
    • 优先
    • 固定
    -n|--reclaim-maxhosts 可向 VMFS6 数据存储发出取消映射命令以进行自动空间回收的最大 ESXi 主机数。
    -p|--reclaim-priority 自动空间回收的优先级。支持的选项包括:
    -l|--volume-label 目标 VMFS 卷的标签。
    -u|--volume-uuid 目标 VMFS 卷的 uuid。
    您可以使用以下示例。
    • 将回收方法设置为固定,将速率设置为每秒 100 MB。
      esxcli storage vmfs reclaim config set --volume-label datastore_name --reclaim-method fixed -b 100
    • 停用 VMFS 自动空间回收。
      esxcli storage vmfs reclaim config set --volume-label datastore_name --reclaim-priority none
    注: 如果仅设置 -n|--reclaim-maxhosts 参数而不设置任何其他参数,则可以跳过步骤 2。更新的 reclaim-maxhosts 参数值大约需要 30 分钟才能在挂载 VMFS6 数据存储的所有 ESXi 主机上生效。
  2. 从挂载 VMFS6 数据存储的所有其他 ESXi 主机上卸载该数据存储,然后重新挂载该数据存储。
    1. 卸载数据存储.
    2. 挂载数据存储.
    此步骤可确保挂载 VMFS6 数据存储的所有 ESXi 主机都更新该数据存储的回收设置。

验证 VMFS6 上的自动空间回收设置

为 VMFS6 数据存储配置或编辑空间回收参数后,可以查看您的设置。

过程

  1. vSphere Client 中,导航到数据存储。
  2. 单击配置选项卡。
  3. 单击常规
  4. 空间回收下面,查看空间回收优先级设置。
    如果通过 esxcli 命令配置了任何值,例如为空间回收优先级配置了 Medium 或 High,这些值还会显示在 vSphere Client 中。

结果

屏幕截图显示的是空间回收设置。

示例: 获取 VMFS6 空间回收的参数

可以使用 esxcli storage vmfs reclaim config get -l=VMFS_label|-u=VMFS_uuid 命令获取空间回收配置的信息。
# esxcli storage vmfs reclaim config get -l my_datastore 
Reclaim Granularity: 1048576 Bytes 
Reclaim Priority: low
Reclaim Method: priority
Reclaim Bandwidth: 26 MB/s
Reclaim Maximum Hosts: 128

手动回收 VMFS5 上累积的存储空间

在不支持自动空间回收的 VMFS 数据存储(例如 VMFS5)上,可以使用 esxcli 命令手动回收未使用的存储空间。

使用此命令时请务必注意,它可能会一次性发送大量取消映射请求。在执行此操作期间可能会锁定某些资源。使用此命令时请务必注意,它可能会一次性发送大量取消映射请求。在执行此操作期间可能会锁定某些资源。

前提条件

安装 ESXCLI。请参见《ESXCLI 入门》。要进行故障排除,请在 ESXi Shell中运行 esxcli 命令。

过程

  1. 要回收精简置备设备上未使用的存储块,请运行以下命令:
    esxcli storage vmfs unmap

    该命令采用以下选项:

    选项 描述
    -l|--volume-label=volume_label 要取消映射的 VMFS 卷的标签。必需的参数。如果指定了此参数,则请勿使用 -u|--volume-uuid=volume_uuid
    -u|--volume-uuid=volume_uuid 要取消映射的 VMFS 卷的 UUID。必需的参数。如果指定了此参数,则请勿使用 -l|--volume-label=volume_label
    -n|--reclaim-unit=number 每次迭代时要取消映射的 VMFS 块的数量。可选参数。如果未指定此参数,此命令将使用默认值 200。
  2. 要验证是否已完成取消映射过程,请在 vmkernel.log 文件中搜索取消映射。