此操作用来还原HBlock上云卷。
以下场景适合还原卷功能:
原HBlock中存在上云卷,并且将数据上传到了云端。如果此时HBlock发生故障无法启动,可以通过还原卷的功能,在另一个HBlock中将该卷重新生成,并且从云端进行数据恢复。
原上云卷被删除,但云上数据保留,可以通过还原卷功能恢复卷数据。
注意
在执行还原操作的时候,请确保原HBlock和云上的连接已经断开,不再向该卷写入新的数据。
还原的卷名称在当前HBlock中不存在。
还原的卷必须在指定的Bucket/prefix中找到,且数据完整。
还原操作异步执行,请通过查询卷的功能查看还原进度。
请求语法
单机版
POST /rest/v1/block/lun/recover HTTP/1.1
Date:date
Content-Type: application/json; charset=utf-8
Content-Length: length
Host: ip:port
Authorization: authorization
{
"lunName": lunName,
"uuid": lunuuid,
"targetName": targetName,
"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,
"storageClass": storageClass,
"compression": compression
}
}
集群版
POST /rest/v1/block/lun/recover HTTP/1.1
Date:date
Content-Type: application/json; charset=utf-8
Content-Length: length
Host: ip:port
Authorization: authorization
{
"lunName": lunName,
"uuid": lunuuid,
"targetName": targetName,
"storageMode": storageMode,
"config": {
"localStorageClass": localStorageClass,
"minReplica": minReplica,
"redundancyOverlap": redundancyOverlap,
"ECfragmentSize": ECfragmentSize,
"cachePool": poolName,
"pool": poolName,
"highAvailability": highAvailability,
"writePolicy": writePolicy
},
"cloud": {
"provider": provider,
"bucketName": bucketName,
"prefix": prefix,
"accessKey": accessKey,
"secretKey": secretKey,
"endpoint": endpoint,
"signVersion": signVersion,
"region": region,
"storageClass": storageClass,
"compression": compression
}
}
请求参数
参数 | 描述 | 是否必须 |
---|---|---|
lunName | 源卷的卷名称。 类型:字符串 | 是 |
uuid | 源卷的唯一标识码。 类型:字符串 | 是 |
targetName | 指定还原卷的Target名称。 说明 还原卷时,如果指定的Target名称不存在,那么同时创建iSCSI Target。 类型:字符串 取值:长度范围是1~16,可以由小写字母、数字、句点(.)和短横线(-)组成,且仅支持以字母或数字开头。 | 是 |
storageMode | 指定还原卷的存储类型。 类型:枚举 取值:
存储类型默认为源卷的存储类型。 | 否 |
config.localStorageClass | 指定还原卷冗余模式(仅集群版支持)。 类型:枚举 取值:
默认值为源卷的冗余模式。 说明 以下场景均为集群可用的前提下:
| 否 |
config.minReplica | 指定还原卷的最小副本数(仅集群版支持)。 对于副本模式的卷,假设卷副本数为X,最小副本数为Y(Y必须≤X),该卷每次写入时,至少Y份数据写入成功,才视为本次写入成功。对于EC N+M模式的卷,假设该卷最小副本数设置为Y(必须满足N≤Y≤N+M),必须满足总和至少为Y的数据块和校验块写入成功,才视为本次写入成功。 注意 如果指定了还原卷的最小副本数,必须指定还原卷的冗余模式。 类型:整型 取值:对于副本卷,取值范围是[1, N],N为副本模式卷的副本数,默认值为源卷的最小副本数。对于EC卷,取值范围是[N, N+M],默认值为源卷的最小副本数。 | 否 |
config.redundancyOverlap | 指定还原卷的折叠副本数(仅集群版支持)。在数据冗余模式下,同一份数据的不同副本/分片默认分布在不同的故障域,当故障域损坏时,允许根据卷的冗余折叠原则,将多份数据副本放在同一个故障域中,但是分布在不同的path上。 注意 如果存储池故障域级别为path,此参数不生效。如果指定了还原卷的折叠副本数,必须指定还原卷的冗余模式。 类型:整型 取值:对副本模式,取值范围是[1,副本数];对于EC模式,取值范围是[1,M+N]。如果未设置还原卷的折叠副本数,默认值为源卷的折叠副本数。 | 否 |
config.ECfragmentSize | 设置还原卷的纠删码模式分片大小(仅集群版支持)。 config.localStorageClass为EC模式时,此设置才生效,否则忽略。 类型:枚举 取值:1、2、4、8、16、32、64、128、256、512、1024、2048、4096,单位是KiB。默认值为源卷的纠删码模式分片大小。 | 否 |
config.cachePool | 指定还原卷的缓存存储池(仅集群版支持)。如果指定了缓存存储池,卷数据首先写入缓存存储池,然后再存入存储池。 注意 存储池与缓存存储池不能是同一个存储池。 类型:字符串 取值:长度范围是1~16,只能由字母、数字和短横线(-)、下划线(_)组成,字母区分大小写,且仅支持以字母和数字开头。 | 否 |
config.pool | 指定还原卷的存储池(仅集群版支持),表示最终存储池,卷数据最终落在该存储池内。默认使用集群的基础存储池。 类型:字符串 取值:长度范围是1~16,只能由字母、数字和短横线(-)、下划线(_)组成,字母区分大小写,且仅支持以字母和数字开头。 说明 不指定,默认使用基础存储池。 | 否 |
config.highAvailability | 指定还原卷的高可用类型(仅集群版支持)。 类型:枚举 取值:
默认值为源卷的高可用类型。 | 否 |
config.writePolicy | 设置还原卷的写策略。 类型:枚举 取值:
默认值为源卷的写策略。 | 否 |
config.path | 指定还原卷存储数据的数据目录(仅单机版支持)。 如果还原卷时不指定数据目录,使用服务器设置的默认数据目录。 | 否 |
cloud.provider | 指定还原卷的对象存储服务名称:
默认值为OOS。 说明 源卷和还原卷必须使用相同的对象存储服务。 | 否 |
cloud.bucketName | 源卷所在存储桶的名称。 注意 请勿开启Bucket的生命周期设定和合规保留。 类型:字符串 | 是 |
cloud.prefix | 源卷的前缀名称。如果源卷未指定前缀,则此处不设置。 类型:字符串 取值:长度范围是1~256。 | 否 |
cloud.accessKey | 源卷的Access Key。 类型:字符串 | 是 |
cloud.secretKey | 源卷的Secret Access Key。 类型:字符串 | 是 |
cloud.endpoint | 源卷的Endpoint。 类型:字符串 | 是 |
cloud.signVersion | 指定还原卷上云签名认证的类型。 类型:枚举 取值:
默认值为v2。 | 否 |
cloud.region | 还原卷的region,即Endpoint资源池所在区域。 OOS region详见OOS Endpoint和区域。 V4签名时,此项必填。 类型:字符串 | 否 |
cloud.storageClass | 设置还原卷上传数据至对象存储的存储类型。 类型:枚举 取值:
默认为源卷上传数据至对象存储的存储类型。 | 否 |
cloud.compression | 设置还原卷是否压缩数据上传至对象存储。 类型:枚举 取值:
默认值为源卷的设置。 | 否 |
请求示例1
单机版:还原卷luna9。
POST /rest/v1/block/lun HTTP/1.1
Date: Mon, 13 May 2024 10: 46: 42 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Authorization: HBlock userName:signature
Content-Length: 516
Host: 192.168.0.32: 1443
{
"lunName": "luna9",
"uuid": "lun-uuid-df8308a9-bfb0-40a0-bf9d-7e741b1b6a63",
"targetName": "targeta",
"storageMode": "Storage",
"config": {
"writePolicy": "WriteThrough"
},
"cloud": {
"bucketName": "hblocktest3",
"prefix": "hblock1",
"accessKey": "cb22b08b1f9229f85874",
"secretKey": "**************************",
"endpoint": "oos-cn.ctyunapi.cn",
"signVersion": "v4",
"region": "cn"
}
}
响应示例1
HTTP/1.1 200 OK
x-hblock-request-id: 20b087c7711f44af9588cc013ede8654
Connection: keep-alive
Content-Length: 0
Date: Mon, 13 May 2024 10: 46: 42 GMT
Server: HBlock
请求示例2
集群版:还原卷lun08a。
POST /rest/v1/block/lun/recover HTTP/1.1
Date: Mon, 13 May 2024 09:33:12 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Authorization: HBlock userName:signature
Content-Length: 629
Host: 192.168.0.110: 1443
{
"lunName": "lun08a",
"uuid": "lun-uuid-a74475f7-8d73-49b5-bd82-0ac0309e1fae",
"targetName": "target08",
"storageMode": "Storage",
"config": {
"localStorageClass": "EC 2+1",
"minReplica": 2,
"highAvailability": "ActiveStandby",
"writePolicy": "WriteThrough"
},
"cloud": {
"bucketName": "hblocktest3",
"prefix": "hblock",
"accessKey": "cb22b08b1f9229f85874",
"secretKey": "*****************************",
"endpoint": "oos-cn.ctyunapi.cn",
"signVersion": "v4",
"region": "cn"
}
}
响应示例2
HTTP/1.1 200 OK
x-hblock-request-id: 251c5dcfab5247599aca4f60f5784b34
Connection: keep-alive
Content-Length: 0
Date: Mon, 13 May 2024 09: 33: 12 GMT
Server: HBlock