MSFT_StoragePool 类的 CreateVirtualDisk 方法

使用存储池的资源创建虚拟磁盘。

语法

UInt32 CreateVirtualDisk(
  [in]  String              FriendlyName,
  [in]  UInt64              Size,
  [in]  Boolean             UseMaximumSize,
  [in]  UInt16              ProvisioningType,
  [in]  String              ResiliencySettingName,
  [in]  UInt16              Usage,
  [in]  String              OtherUsageDescription,
  [in]  UInt16              NumberOfDataCopies,
  [in]  UInt16              PhysicalDiskRedundancy,
  [in]  UInt16              NumberOfColumns,
  [in]  Boolean             AutoNumberOfColumns,
  [in]  UInt64              Interleave,
  [in]  Boolean             IsEnclosureAware,
  [in]  String              PhysicalDisksToUse[],
  [in]  String              StorageTiers[],
  [in]  UInt64              StorageTierSizes[],
  [in]  UInt64              WriteCacheSize,
  [in]  Boolean             AutoWriteCacheSize,
  [in]  Boolean             RunAsJob,
  [out] String              CreatedVirtualDisk,
  [out] MSFT_StorageJob REF CreatedStorageJob,
  [out] String              ExtendedStatus
);

参数

FriendlyName [in]

虚拟磁盘的友好名称。

友好名称应具有描述性,但它们不一定是唯一的。 请注意,某些存储池不允许在创建虚拟磁盘期间设置友好名称。 如果存储池不支持此操作,虚拟磁盘创建仍应成功,但虚拟磁盘可能分配了不同的名称。

此参数是必需的,不能为 NULL

大小 [in]

指示虚拟磁盘的所需大小(以字节为单位)。 请注意,某些存储子系统会将大小向上舍入或向下舍入到其分配单元大小的倍数。 在输出时,此参数指示已创建的虚拟磁盘的实际大小。 如果将 UseMaximumSize 设置为 TRUE,则不能使用此参数。

UseMaximumSize [in]

如果 为 TRUE,则此参数指示存储阵列在给定此存储池的可用资源的情况下创建可能最大的虚拟磁盘。 如果设置了 Size 参数,则不能使用此参数。

ProvisioningType [in]

指定虚拟磁盘的预配类型。

含义
未知 0 预配类型未知。 这可能意味着此信息不可用,或者存储子系统使用专有的分配方法。
1 虚拟磁盘的存储是按需分配的。
已修复 2 虚拟磁盘的存储是在创建磁盘时分配的。

ResiliencySettingName [in]

用作此虚拟磁盘模板的所需复原设置。 此参数的值应对应于特定 MSFT_ResiliencySetting 对象的 Name 属性。 只能使用与此存储池关联的复原设置。

用法 [in]

指定虚拟磁盘的预期用法。

可以指定预定义说明或自定义说明。 若要指定预定义的说明,请使用“ 其他”以外的值。

若要指定自定义说明,请使用 Other 并为 OtherUsageDescription 属性指定非 NULL 值。

其他 (1)

无限制 (2)

保留给 ComputerSystem (块服务器) (3)

由复制服务保留 (4)

由迁移服务保留 (5)

本地副本源 (6)

远程副本源 (7)

本地副本目标 (8)

远程副本目标 (9)

本地副本源或目标 (10)

远程副本源或目标 (11)

增量副本目标 (12)

元素组件 (13)

保留为池参与者 (14)

复合卷成员 (15)

复合 VirtualDisk 成员 (16)

保留用于保留 (17)

OtherUsageDescription [in]

新虚拟磁盘的供应商特定使用情况。 仅当 Usage 属性设置为 Other 时,才能指定此参数。

NumberOfDataCopies [in]

指定要为虚拟磁盘维护的完整数据副本数。

如果指定,此值将替代 NumberOfDataCopiesDefault ,后者将从 ResiliencySettingName 指定的复原设置继承。

PhysicalDiskRedundancy [in]

指定在数据丢失发生之前虚拟磁盘应能够承受多少个物理磁盘故障。 如果指定,此值将替代 PhysicalDiskRedundancyDefault ,后者将继承自 ResiliencySettingName 指定的复原设置。

NumberOfColumns [in]

指定应对其数据进行条带化的基础物理磁盘的数目。 如果指定,此值将覆盖 NumberOfColumnsDefault ,该数字将从 ResiliencySettingName 指定的复原设置继承。

AutoNumberOfColumns [in]

如果 为 TRUE,则此字段指示存储提供程序 (或子系统) 自动选择它确定为虚拟磁盘的最佳列数。 如果此字段为 TRUE,则 NumberOfColumns 参数必须为 NULL

Interleave [in]

指定在基于条带化的常见复原设置中,条带应包含的字节数。 条带定义为位于一个物理磁盘上的条带部分的大小。 因此 ,Interleave * NumberOfColumns 将产生用户数据条带的大小。

如果指定此参数,则此值将替代 InterleaveDefault ,后者将继承自 ResiliencySettingName 指定的复原设置。

IsEnclosureAware [in]

确定此虚拟磁盘的分配行为。 机箱感知虚拟磁盘将智能地选取用于冗余的物理磁盘。 如果 为 TRUE,虚拟磁盘将尝试使用不同机箱中的物理磁盘来平衡两个或多个物理机箱之间的容错能力。

PhysicalDisksToUse [in]

如果此参数包含物理磁盘列表,则此虚拟磁盘的存储分配仅限于列表中的物理磁盘。 这些物理磁盘必须已添加到此存储池。

StorageTiers [in]

此虚拟磁盘上的存储层。 数组的每个元素都是 一个MSFT_StorageTier 对象。

StorageTierSizes [in]

存储层的大小。

WriteCacheSize [in]

虚拟磁盘上写入缓存的大小。

AutoWriteCacheSize [in]

如果提供程序应选取自动写入缓存大小,则为 TRUE;否则为 FALSE

RunAsJob [in]

如果 为 TRUE,则当请求需要很长时间才能提供服务时,此方法使用 CreatedStorageJob 参数。 如果已创建存储作业来跟踪操作,此方法将返回 方法参数 Checked - 作业启动

注意

即使 RunAsJobTRUE,此方法仍可返回结果(如果已完成足够时间)。

如果 为 FALSENULL,此方法将遵循客户端的调用方法确定的默认 WMI 异步行为。 换句话说,除非另有请求,否则它是同步的。

CreatedVirtualDisk [out]

如果此方法在 RunAsJob 设置为 FALSE) 且成功创建虚拟磁盘的情况下正常 (运行,则接收 MSFT_VirtualDisk 对象。

CreatedStorageJob [out]

如果 RunAsJob 设置为 TRUE 并且此方法执行时间较长,则此参数将接收对用于跟踪长时间运行的操作的存储作业对象的引用。

ExtendedStatus [out]

包含嵌入 MSFT_StorageExtendedStatus 对象的字符串。

此参数允许存储提供程序返回特定于实现的扩展 () 错误信息。

返回值

成功 (0)

不支持 (1)

未指定的错误 (2)

超时 (3)

失败 (4)

参数 (5) 无效

方法参数已选中 - 作业已启动 (4096)

不支持的大小 (4097)

40000) (可用空间不足

拒绝访问 (40001)

没有足够的资源来完成操作。 (40002)

必须使用 Size 或 UseMaximumSize 参数指定大小。 一次只能指定其中一个参数。 (40005)

无法连接到存储提供程序。 (46000)

存储提供程序无法连接到存储子系统。 (46001)

无法为此存储对象启用故障转移聚类分析。 (46008)

此子系统不支持创建具有指定预配类型的虚拟磁盘。 (47001)

原始存储池不支持此操作。 (48000)

存储池仅用于特殊用途。 (48001)

此存储池不支持指定的复原设置。 (48002)

存储池中没有足够的物理磁盘来创建指定的虚拟磁盘配置。 (48004)

存储池无法完成操作,因为它的运行状况或运行状态不允许它。 (48006)

存储池无法完成操作,因为其配置是只读的。 (48007)

必须 (Size 或 UseMaximumSize 参数) 指定大小信息,或者指定 storageTiers 和 StorageTierSizes 参数 () 的层信息,但不能同时指定大小信息和层信息。 (48010)

在存储池中找不到自动分配驱动器。 (48011)

不存在具有该名称的复原设置。 (49000)

不支持 NoSinglePointOfFailure 的值。 (49001)

PhysicalDiskRedundancy 的值超出了支持的值范围。 (49002)

NumberOfDataCopies 的值超出了支持的值范围。 (49003)

ParityLayout 的值超出了支持的值范围。 (49004)

Interleave 的值超出了支持的值范围。 (49005)

NumberOfColumns 的值超出了支持的值范围。 (49006)

WriteCacheSize 的值超出了支持的值范围。 (50005)

此操作不支持指定的某个物理磁盘。 (51000)

指定的物理磁盘不足,无法成功完成操作。 (51001)

注解

仅当存储子系统上的 SupportsVirtualDiskCreation 属性设置为 TRUE 时,此方法才可用。 如果设置为 FALSE,此方法将失败并 MI_RESULT_NOT_SUPPORTED

原始池不支持此方法。

此方法只需要指定 FriendlyNameSize 。 可以通过 Size 参数显式指定大小,或使用 UseMaximumSize 参数告知使用存储池中的最大可用空间。 FriendlyNameSize 都被视为目标,而不是硬性要求。 例如,并非所有基于 SMI-S 的数组都支持自定义友好名称,但虚拟磁盘创建仍会成功。 如果未达到指定的大小,则会在 out 参数结构中返回用于虚拟磁盘的实际大小。

可以使用 Usage 和 OtherUsageDescription 参数设置此虚拟磁盘的使用情况。 如果为 OtherUsageDescription 提供值, 则 Usage 必须设置为 1 - “Other”,否则将返回错误。

默认情况下,应用于此虚拟磁盘的复原设置将是存储池的 ResiliencySettingNameDefault 属性中指定的任何设置。 这可以使用 ResiliencySettingName 参数重写。 请注意,此处提供的名称必须对应于与此存储池关联的复原设置。 任何其他值都将导致错误。

可以使用 NumberOfDataCopiesPhysicalDiskRedundancyNumberOfColumnsInterleave 参数重写复原设置的各个设置。 如果未使用这些参数,则将使用复原设置中的默认值。 这些替代不会保留回特定的复原设置实例;但是,某些存储提供程序可能会选择创建新的复原设置实例来捕获此新配置。 如果替代参数中指定的任何目标不在范围,或者存储池不支持,将返回错误。

虚拟磁盘的预配策略采用与复原设置类似的方式确定。 如果未在 ProvisioningType 参数中指定首选项,则策略由存储池的 ProvisioningTypeDefault 属性确定。 如果指定 了 ProvisioningType 参数,则忽略默认值,并将改用指定的值。

分配可由 PhysicalDisksToUse 参数进一步控制。 在某些情况下,存储管理员可能希望手动选择应备份虚拟磁盘的物理磁盘。 指定此参数后,虚拟磁盘的数据将仅存储在此数组中的物理磁盘上,而不能存储在任何其他磁盘上。

要求

要求
最低受支持的客户端 Windows 8.1 [仅限桌面应用]
最低受支持的服务器 Windows Server 2012 R2 [仅限桌面应用]
命名空间 Root\Microsoft\Windows\Storage
标头 Vdssys.h
MOF Storagewmi.mof

另请参阅

MSFT_StoragePool