此操作用来创建卷。创建卷时,如果指定的Target名称不存在,则同时创建Target。
说明
- HBlock上Target IQN的数量最多32766个。一个Target最多可以关联256个卷,但是一个卷只能被一个Target关联。
- 卷创建成功后,仅下列参数可以修改:容量、写策略、最小副本数(仅集群版支持)、Endpoint、上云签名认证版本、区域、AK/SK、是否压缩数据。
请求语法
本地卷
单机版
POST /rest/v1/block/lun HTTP/1.1
Date:date
Content-Type: application/json; charset=utf-8
Content-Length: length
Host: ip:port
Authorization: authorization
{
"lunName": lunName,
"targetName": targetName,
"capacity": capacity,
"storageMode": storageMode,
"config": {
"sectorSize": sectorSize,
"writePolicy": writePolicy,
"path": path
}
}
集群版
POST /rest/v1/block/lun HTTP/1.1
Date:date
Content-Type: application/json; charset=utf-8
Content-Length: length
Host: ip:port
Authorization: authorization
{
"lunName": lunName,
"targetName": targetName,
"capacity": capacity,
"storageMode": storageMode,
"config": {
"localStorageClass": localStorageClass,
"minReplica": minReplica,
"ECfragmentSize": ECfragmentSize,
"redundancyOverlap": redundancyOverlap,
"sectorSize": sectorSize,
"cachePool": poolName,
"pool": poolName,
"highAvailability": highAvailability,
"writePolicy": writePolicy,
"serverAffinity": {
"autoFailback": autoFailback,
"priority": [
SeverID,ServerID…
]
}
}
}
上云卷
单机版
POST /rest/v1/block/lun HTTP/1.1
Date:date
Content-Type: application/json; charset=utf-8
Content-Length: length
Host: ip:port
Authorization: authorization
{
"lunName": lunName,
"targetName": targetName,
"capacity": capacity,
"storageMode": storageMode,
"config": {
"sectorSize": sectorSize,
"writePolicy": writePolicy,
"path": path
},
"cloud": {
"provider": provider,
"bucketName": bucketName,
"prefix": prefix,
"accessKey": accessKey,
"secretKey": secretKey,
"endpoint": endpoint,
"signVersion": signVersion,
"region": region,
"objectSize": objectSize,
"storageClass": storageClass,
"compression": compression
}
}
集群版
POST /rest/v1/block/lun HTTP/1.1
Date:date
Content-Type: application/json; charset=utf-8
Content-Length: length
Host: ip:port
Authorization: authorization
{
"lunName": lunName,
"targetName": targetName,
"capacity": capacity,
"storageMode": storageMode,
"config": {
"localStorageClass": localStorageClass,
"minReplica": minReplica,
"ECfragmentSize": ECfragmentSize,
"redundancyOverlap": redundancyOverlap,
"sectorSize": sectorSize,
"cachePool": poolName,
"pool": poolName,
"highAvailability": highAvailability,
"writePolicy": writePolicy,
"serverAffinity": {
"autoFailback": autoFailback,
"priority": [
SeverID,ServerID…
]
}
},
"cloud": {
"provider": provider,
"bucketName": bucketName,
"prefix": prefix,
"accessKey": accessKey,
"secretKey": secretKey,
"endpoint": endpoint,
"signVersion": signVersion,
"region": region,
"objectSize": objectSize,
"storageClass": storageClass,
"compression": compression
}
}
请求参数
参数 | 描述 | 是否必须 |
---|---|---|
lunName | 卷名称。 类型:字符串 取值:长度范围是1~16,只能由字母、数字和短横线(-)组成,字母区分大小写,且仅支持以字母或数字开头。 | 是 |
targetName | Target名称。 说明 创建卷时,如果指定的Target名称不存在,那么同时创建iSCSI Target,新创建iSCSI Target的回收策略默认为Delete。 类型:字符串 取值:长度范围是1~16,可以由小写字母、数字、句点(.)和短横线(-)组成,且仅支持以字母或数字开头。 | 是 |
capacity | 卷容量。 类型:整型 取值:[1,1048576],单位是GiB。 | 是 |
storageMode | 卷的存储类型。 类型:枚举 取值:
存储类型默认为Local。 | 否 |
config.localStorageClass | 卷冗余模式(仅集群版支持)。 类型:枚举 取值:
默认值为EC 2+1。 说明 以下场景均为集群可用的前提下:
| 否 |
config.minReplica | 最小副本数(仅集群版支持)。 对于副本模式的卷,假设卷副本数为X,最小副本数为Y(Y必须≤X),该卷每次写入时,至少Y份数据写入成功,才视为本次写入成功。对于EC N+M模式的卷,假设该卷最小副本数设置为Y(必须满足N≤Y≤N+M),必须满足总和至少为Y的数据块和校验块写入成功,才视为本次写入成功。 类型:整型 取值:对于副本卷,取值范围是[1, N],N为副本模式卷的副本数,默认值为1。对于EC卷,取值范围是[N, N+M],默认值为N。 | 否 |
config.ECfragmentSize | 纠删码模式分片大小(仅集群版支持)。 config.localStorageClass为EC模式时,此设置才生效,否则忽略。 类型:枚举 取值:1、2、4、8、16、32、64、128、256、512、1024、2048、4096,单位是KiB。默认值为16。 | 否 |
config.redundancyOverlap | 指定卷的折叠副本数(仅集群版支持)。在数据冗余模式下,同一份数据的不同副本/分片默认分布在不同的故障域,当故障域损坏时,允许根据卷的冗余折叠原则,将多份数据副本放在同一个故障域中,但是分布在不同的path上。 注意 如果存储池故障域级别为path,此参数不生效。 类型:整型 取值:对副本模式,取值范围是[1,副本数],默认值为1;对于EC模式,取值范围是[1,M+N],默认值为1。 | 否 |
config.sectorSize | 扇区大小。 类型:枚举 取值:512、4096,单位为字节。默认值为4096。 说明 扇区大小的选取:根据自身业务场景,一般情况下,单次I/O操作的数据大小大于或接近4KiB,则推荐选择4096;单次I/O操作的数据大小接近512Bytes,则推荐选择512。如果对接VMware等虚拟化平台,则推荐选择512。 | 否 |
config.cachePool | 指定缓存存储池(仅集群版支持)。如果指定了缓存存储池,卷数据首先写入缓存存储池,然后再存入存储池。 注意 存储池与缓存存储池不能是同一个存储池。 类型:字符串 取值:长度范围是1~16,只能由字母、数字和短横线(-)、下划线(_)组成,字母区分大小写,且仅支持以字母和数字开头。 | 否 |
config.pool | 指定存储池(仅集群版支持),表示最终存储池,卷数据最终落在该存储池内。默认使用集群的基础存储池。 类型:字符串 取值:长度范围是1~16,只能由字母、数字和短横线(-)、下划线(_)组成,字母区分大小写,且仅支持以字母和数字开头。默认使用基础存储池。 | 否 |
config.highAvailability | 是否开启高可用模式(仅集群版支持)。 类型:枚举 取值:
默认值为ActiveStandby。 | 否 |
config.writePolicy | 卷的写策略。 类型:枚举 取值:
默认值为WriteBack。 | 否 |
config.serverAffinity.autoFailback | 是否根据指定的卷主备分布优先级自动进行主备切换(仅集群版支持),即针对卷主备状态,当高优先级的服务器恢复正常后,是否自动进行主备状态切换。 取值:
默认值为Enabeld。 | 否 |
config.serverAffinity.priority | 指定卷主备分布优先级的服务器ID(仅集群版支持),根据系统指定的服务器ID顺序来选择卷的主备IQN。可以指定一个或者多个服务器ID,以英文逗号分开。 前置条件:iSCSI Target名称已经存在,且指定的服务器必须是iSCSI Target所在的服务器。 类型:数组 取值:服务器ID。 | 否 |
config.path | 创建卷时,指定存储卷数据的数据目录(仅单机版支持)。 如果创建卷时不指定数据目录,使用服务器设置的默认数据目录。 | 否 |
cloud.provider | 对象存储服务名称:
默认值为OOS。 | 否 |
cloud.bucketName | 已存在的存储桶的名称。 注意:请勿开启Bucket的生命周期设定和合规保留。 类型:字符串 | 上云卷必填 |
cloud.prefix | 设置对象存储的前缀名称,设置前缀名称后,卷数据会存在存储桶以前缀命名的类文件夹中。如果未指定前缀,则直接存储在以卷名称命名的类文件夹中。 类型:字符串 取值:长度范围是1~256。 | 否 |
cloud.accessKey | 对象存储服务的AccessKeyID。 类型:字符串 | 上云卷必填 |
cloud.secretKey | 对象存储服务的SecretAccessKey。 类型:字符串 | 上云卷必填 |
cloud.endpoint | 设置对象存储服务的Endpoint。 OOS Endpoint详见OOS Endpoint和区域。 类型:字符串 | 上云卷必填 |
cloud.signVersion | 指定上云签名认证的类型。 类型:枚举 取值:
默认值为v2。 | 否 |
cloud.region | 表示对象存储服务的Endpoint资源池所在区域。 OOS region详见OOS Endpoint和区域。 V4签名时,此项必填。 类型:字符串 | 否 |
cloud.objectSize | 数据存储在对象存储中的大小。 类型:枚举 取值:128、256、512、1024、2048、4096、8192,单位是KiB。默认值为1024。 | 否 |
cloud.storageClass | 设置对象存储的存储类型。 类型:枚举 取值:
默认为STANDARD。 | 否 |
cloud.compression | 是否压缩数据上传至对象存储。 类型:枚举 取值:
默认值为Enabled。 | 否 |
响应结果
名称 | 描述 |
---|---|
iSCSITargets | iSCSI Target属性集合。包含:iqn、status、ips。 类型:数组 |
iqn | iSCSI Target IQN。 |
status | 卷对应的Target的状态:
|
ips | iSCSI Target的IP属性集合,包含: ip、port。 类型:数组 |
ip | iSCSI Target的IP。 |
port | iSCSI Target的端口号。 |
serverId | 服务器ID。 |
message | 如果storageMode设置为Local,但是请求体包含了上云参数,会返回此信息:"message": "Ignore cloud property when LUN storage mode is local."。 |
请求示例1
单机版本地卷:创建卷lun8。
POST /rest/v1/block/lun HTTP/1.1
Date: Wed, 18 Oct 2023 02: 56: 09 GMT
Content-Type: application/json; charset=utf-8
Authorization: HBlock userName:signature
Content-Length: 210
Host: 192.168.0.69: 1443
{
"lunName": "lun8",
"targetName": "target8",
"capacity": 500,
"config": {
"sectorSize": 512,
"writePolicy": "WriteThrough",
"path": "/mnt/storage01"
}
}
响应示例1
HTTP/1.1 200 OK
x-hblock-request-id: c79736f32fe249cc8c40af6d90d3fd68
Connection: keep-alive
Content-Length: 158
Date: Wed, 18 Oct 2023 02: 56: 09 GMT
Content-Type: application/json;charset=utf-8
Server: HBlock
{
"data": {
"iSCSITargets": [
{
"iqn": "iqn.2012-08.cn.ctyunapi.oos:target8.2",
"status": "Active",
"ips": [
{
"ip": "192.168.0.202",
"port": 3260
}
],
"serverId": "hblock_1"
}
]
}
}
请求示例2
集群版本地卷:创建卷lun08a。
POST /rest/v1/block/lun HTTP/1.1
Date: Thu, 5 Dec 2024 09:11:40 GMT
Content-Type: application/json; charset=utf-8
Authorization: HBlock userName:signature
Content-Length: 529
Host:192.168.0.192:1443
{
"lunName": "lun08a",
"targetName": "target08",
"capacity": 500,
"config": {
"localStorageClass": "EC 2+1",
"minReplica": 3,
"ECfragmentSize": 1024,
"sectorSize": 512,
"cachePool": "default",
"pool": "pool2",
"highAvailability": "ActiveStandby",
"writePolicy": "WriteThrough",
"serverAffinity": {
"autoFailback": "Enabled",
"priority": [
"hblock_1"
]
}
}
}
响应示例2
HTTP/1.1 200 OK
x-hblock-request-id: 9430c50b4152442c8401d3fc8f4ced1b
Connection: keep-alive
Content-Length: 303
Date: Thu, 5 Dec 2024 09:11:40 GMT
Content-Type: application/json;charset=utf-8
Server: HBlock
{
"data": {
"iSCSITargets": [
{
"iqn": "iqn.2012-08.cn.ctyunapi.oos:target08.11",
"status": "Unavailable",
"ips": [
{
"ip": "192.168.0.192",
"port": 3260
}
],
"serverId": "hblock_1"
},
{
"iqn": "iqn.2012-08.cn.ctyunapi.oos:target08.12",
"status": "Unavailable",
"ips": [
{
"ip": "192.168.0.117",
"port": 3260
}
],
"serverId": "hblock_2"
}
]
}
}
请求示例3
单机版上云卷:创建卷luna9。
POST /rest/v1/block/lun HTTP/1.1
Date: Mon, 13 May 2024 09: 50: 20 GMT
Content-Type: application/json; charset=utf-8
Authorization: HBlock userName:signature
Content-Length: 617
Host: 192.168.0.32: 1443
{
"lunName": "luna9",
"targetName": "targeta",
"storageMode": "Storage",
"capacity": 500,
"config": {
"sectorSize": 512,
"writePolicy": "WriteThrough"
},
"cloud": {
"bucketName": "hblocktest3",
"prefix": "hblock1",
"accessKey": "cb22b08b1f9229f85874",
"secretKey": "****************************",
"endpoint": "oos-cn.ctyunapi.cn",
"signVersion": "v4",
"region": "cn",
"objectSize": 1024,
"storageClass": "STANDARD",
"compression": "Enabled"
}
}
响应示例3
HTTP/1.1 200 OK
x-hblock-request-id: 2019e40fcec64256b68983a9b03e844e
Connection: keep-alive
Content-Length: 157
Date: Mon, 13 May 2024 09: 50: 20 GMT
Content-Type: application/json;charset=utf-8
Server: HBlock
{
"data": {
"iSCSITargets": [
{
"iqn": "iqn.2012-08.cn.ctyunapi.oos:targeta.2",
"status": "Active",
"ips": [
{
"ip": "192.168.0.32",
"port": 3260
}
],
"serverId": "hblock_1"
}
]
}
}
请求示例4
集群版上云卷:创建卷lun03a。
POST /rest/v1/block/lun HTTP/1.1
Date: Thu, 9 May 2024 07: 15: 36 GMT
Content-Type: application/json; charset=utf-8
Authorization: HBlock userName:signature
Content-Length: 749
Host: 192.168.0.192: 1443
{
"lunName": "lun03a",
"targetName": "target03",
"capacity": 300,
"storageMode": "Cache",
"config": {
"localStorageClass": "EC 2+1",
"minReplica": 3,
"ECfragmentSize": 1024,
"sectorSize": 512,
"highAvailability": "ActiveStandby",
"writePolicy": "WriteThrough"
},
"cloud": {
"bucketName": "hblocktest2",
"prefix": "hblock",
"accessKey": "d0434d3e9e8dd462d6e0",
"secretKey": "***************************",
"endpoint": "oos-cn.ctyunapi.cn",
"signVersion": "v4",
"region": "cn",
"objectSize": 1024,
"storageClass": "STANDARD",
"compression": "Enabled"
}
}
响应示例4
HTTP/1.1 200 OK
x-hblock-request-id: 3d4faf99cb9447bfaa337fd2a63187eb
Connection: keep-alive
Content-Length: 296
Date: Thu, 9 May 2024 07: 15: 36 GMT
Content-Type: application/json;charset=utf-8
Server: HBlock
{
"data": {
"iSCSITargets": [
{
"iqn": "iqn.2012-08.cn.ctyunapi.oos:target03.7",
"status": "Active",
"ips": [
{
"ip": "192.168.0.192",
"port": 3260
}
],
"serverId": "hblock_2"
},
{
"iqn": "iqn.2012-08.cn.ctyunapi.oos:target03.8",
"status": "Unavailable",
"ips": [
{
"ip": "192.168.0.102",
"port": 3260
}
],
"serverId": "hblock_3"
}
]
}
}