此操作用来创建卷。创建卷时,如果指定的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,
"sectorSize": sectorSize,
"cachePool": poolName,
"pool": poolName,
"highAvailability": highAvailability,
"writePolicy": writePolicy
}
}
上云卷
单机版
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": {
"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,
"sectorSize": sectorSize,
"cachePool": poolName,
"pool": poolName,
"highAvailability": highAvailability,
"writePolicy": writePolicy
},
"cloud": {
"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。
类型:字符串
取值:长度范围是1~16,可以由小写字母、数字、句点(.)和短横线(-)组成,且仅支持以字母或数字开头。
是 capacity 卷容量。
类型:整型
取值:[1,1048576],单位是GiB。
是 storageMode 卷的存储类型。
类型:枚举
取值:
Local:本地模式,数据全部保留在本地。
Cache:缓存模式,本地保留部分热数据,全部数据异步存储到天翼云对象存储(经典版)I型中。
Storage:存储模式,本地保留全部数据,并异步存储到天翼云对象存储(经典版)I型中。
存储类型默认为Local。
否 config.localStorageClass 卷冗余模式(仅集群版支持)。
类型:枚举
取值:
single-copy:单副本。
2-copy:两副本。
3-copy:三副本。
EC N+M:纠删码模式。其中N、M为正整数,N>M,且N+M≤128。表示将数据分割成N个片段,并生成M个校验数据。
默认值为EC 2+1。
说明(以下场景均为集群可用的前提下):
创建EC N+M的卷时:
服务器级别故障域:集群中可用节点台数不足N+M时,卷可以创建成功,但是卷数据将处于降级状态,允许故障的服务器台数不足M,建议尽快添加服务器或修复故障服务器。可用故障域不足N时,可以创建卷,但无法写入数据,且系统会产生告警。
数据目录级别故障域:集群中可用数据目录数量不足N+M时,卷可以创建成功,但是卷数据将处于降级状态,允许故障的数据目录个数不足M,建议尽快添加数据目录或修复故障数据目录。可用故障域不足N时,可以创建卷,但无法写入数据,且系统会产生告警。
创建副本模式的卷时:可用故障域数量大于等于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.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:启用主备,该卷关联对应Target下的所有IQN。
Disabled:不启用主备,该卷关联对应Target下的1个IQN。
默认值为ActiveStandby。
否 config.writePolicy 卷的写策略。
类型:枚举
取值:
WriteBack:回写,指数据写入到内存后即返回客户端成功,之后再异步写入磁盘。适用于对性能要求较高,稳定性要求不高的场景。
WriteThrough:透写,指数据同时写入内存和磁盘,并在都写成功后再返回客户端成功。适用于稳定性要求较高,写性能要求不高,且最近写入的数据会较快被读取的场景。
WriteAround:绕写,指数据直接写到磁盘,不写入内存。适用于稳定性要求较高,性能要求不高,且写多读少的场景。
默认值为WriteBack。
否 config.path 创建卷时,指定存储卷数据的数据目录(仅单机版支持)。
如果创建卷时不指定数据目录,使用服务器设置的默认数据目录。
否 cloud.bucketName 已存在的OOS存储桶的名称。
注意:请勿开启Bucket的生命周期设定和合规保留。
类型:字符串
上云卷必填 cloud.prefix 设置OOS的前缀名称,设置前缀名称后,卷数据会存在存储桶以前缀命名的类文件夹中。如果未指定前缀,则直接存储在以卷名称命名的类文件夹中。
类型:字符串
取值:长度范围是1~256。
否 cloud.accessKey OOS的AccessKeyID。
类型:字符串
上云卷必填 cloud.secretKey OOS的SecretAccessKey。
类型:字符串
上云卷必填 cloud.endpoint 设置OOS的Endpoint。具体Endpoint详见OOS Endpoint和区域。
类型:字符串
上云卷必填 cloud.signVersion 指定上云签名认证的类型。
类型:枚举
取值:
v2:V2签名认证。
v4:V4签名认证。
默认值为v2。
否 cloud.region 表示Endpoint资源池所在区域。具体region详见OOS Endpoint和区域。
V4签名时,此项必填。
类型:字符串
否 cloud.objectSize 数据存储在OOS中的大小。
类型:枚举
取值:128、256、512、1024、2048、4096、8192,单位是KiB。默认值为1024。
否 cloud.storageClass 设置OOS的存储类型。
类型:枚举
取值:
STANDARD:标准存储。
STANDARD_IA:低频访问存储。
默认为STANDARD。
否 cloud.compression 是否压缩数据上传至OOS。
类型:枚举
取值:
Enabled:压缩数据上传至OOS。
Disabled:不压缩数据上传至OOS。
默认值为Enabled。
否
响应结果
名称 描述 iSCSITargets iSCSI Target属性集合。包含:iqn、status、ips。
类型:数组
iqn iSCSI Target IQN。 status 卷对应的Target的状态:
Active:主Target。
Standby:热备Target。
Unavailable:冷备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
集群版本地卷:创建卷lun8。
POST /rest/v1/block/lun HTTP/1.1
Date: Thu, 22 Feb 2024 07: 42: 54 GMT
Content-Type: application/json; charset=utf-8
Authorization: HBlock userName:signature
Content-Length: 316
Host: 192.168.0.192: 1443
{
"lunName": "lun8",
"targetName": "target8",
"capacity": 500,
"config": {
"localStorageClass": "EC 2+1",
"minReplica": 3,
"ECfragmentSize": 1024,
"sectorSize": 512,
"highAvailability": "ActiveStandby",
"writePolicy": "WriteThrough"
}
}
响应示例2
HTTP/1.1 200 OK
x-hblock-request-id: 3d4faf99cb9447bfaa337fd2a63187eb
Connection: keep-alive
Content-Length: 296
Date: Thu, 22 Feb 2024 07: 42: 54 GMT
Content-Type: application/json;charset=utf-8
Server: HBlock
{
"data": {
"iSCSITargets": [
{
"iqn": "iqn.2012-08.cn.ctyunapi.oos:target8.38",
"status": "Active",
"ips": [
{
"ip": "192.168.0.102",
"port": 3260
}
],
"serverId": "hblock_3"
},
{
"iqn": "iqn.2012-08.cn.ctyunapi.oos:target8.39",
"status": "Unavailable",
"ips": [
{
"ip": "192.168.0.192",
"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"
}
]
}
}