磁盘
更新时间:2024-07-02
创建CDS磁盘
支持新建CDS云磁盘或者从CDS数据盘快照创建CDS磁盘,参考以下代码可以创建CDS磁盘:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16 args := &api.CreateCDSVolumeArgs{
17 PurchaseCount: 2, // 购买数量
18 CdsSizeInGB: 5, // 磁盘大小
19 StorageType: api.StorageTypeHdd, // 存储类型
20 ChargeType: api.PaymentTimingPostPaid, // 付费方式
21 ZoneName: "cn-bj-c", // 可用区
22 Name: "test-create-cds", // 磁盘名称
23 Description: "test-desc", // 磁盘描述
24 Tags:[]model.TagModel{ // 绑定标签
25 {
26 // 标签key
27 TagKey: "Key-***",
28 // 标签value
29 TagValue: "Value***",
30 },
31 },
32 }
33 result, err := bccClient.CreateCDSVolume(args)
34 if err != nil {
35 fmt.Println("create CDS volume failed:", err)
36 } else {
37 fmt.Println("create CDS volume success: ", result)
38 }
39}
提示:
查询磁盘列表
以下代码可以查询所有的磁盘列表,支持分页查询以及通过云磁盘所挂载的BCC实例ID进行过滤筛选:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16
17 // 磁盘列表查询参数
18 queryArgs := &api.ListCDSVolumeArgs{
19 Marker: "v-3uIJ****", // 起始磁盘ID
20 MaxKeys: 10, // 返回结果的最大数量
21 InstanceId: "i-cVh8****", // 磁盘挂载的实例ID
22 ZoneName: "cn-bj-a", // 可用区
23 ClusterId: "DC-rWKx****", // 专属集群ID
24 }
25
26 res, err := bccClient.ListCDSVolume(queryArgs)
27 if err != nil {
28 fmt.Println(err)
29 } else {
30 fmt.Println(res)
31 }
32}
查询磁盘详情
通过磁盘ID可以获取对应磁盘的详细信息,以下代码可以查询磁盘详情:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6)
7
8func main() {
9 // 设置您的ak、sk和要访问的endpoint
10 ak := "ak"
11 sk := "sk"
12 endpoint := "bcc.bj.baidubce.com"
13 // 创建bcc client
14 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
15
16 // 获取指定CDS卷的详细信息
17 res, err := bccClient.GetCDSVolumeDetail("v-3uIJ****") // 指定CDS磁盘ID
18 if err != nil {
19 fmt.Println(err)
20 } else {
21 fmt.Println(res)
22 }
23}
挂载CDS磁盘
可以将未挂载的磁盘挂载在对应的BCC实例下,以下代码将一个CDS挂载在对应的BCC实例下:
Go
1package main
2import (
3 "fmt"
4 "github.com/baidubce/bce-sdk-go/services/bcc"
5 "github.com/baidubce/bce-sdk-go/services/bcc/api"
6)
7func main() {
8 // 设置您的ak、sk和要访问的endpoint
9 ak := "ak"
10 sk := "sk"
11 endpoint := "http://bcc.bj.baidubce.com"
12 // 创建bcc client
13 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
14
15 args := &api.AttachVolumeArgs{
16 // 设置要挂载的实例ID
17 InstanceId: "i-***",
18 }
19 result, err := bccClient.AttachCDSVolume(
20 // 设置要挂载的磁盘ID
21 "v-***",
22 args)
23 fmt.Println(result)
24 fmt.Println(err)
25}
提示:
- CDS磁盘需要挂载在与其处在相同zone下的BCC实例上,否则将返回403错误。
- 只有磁盘状态为 Available 且实例状态为 Running 或 Stopped 时才允许挂载,否则调用此接口将返回 409 错误。
卸载CDS磁盘
可以将已挂载的磁盘从对应的BCC虚机上卸载下来,以下代码卸载CDS磁盘:
Go
1package main
2import (
3 "fmt"
4 "github.com/baidubce/bce-sdk-go/services/bcc"
5 "github.com/baidubce/bce-sdk-go/services/bcc/api"
6)
7func main() {
8 // 设置您的ak、sk和要访问的endpoint
9 ak := "ak"
10 sk := "sk"
11 endpoint := "http://bcc.bj.baidubce.com"
12 // 创建bcc client
13 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
14 args := &api.DetachVolumeArgs{
15 // 设置要挂载的实例ID
16 InstanceId: "i-***",
17 }
18 err := bccClient.DetachCDSVolume(
19 // 设置要挂载的磁盘ID
20 "v-***",
21 args)
22
23 fmt.Println(err)
24}
提示:
- 只有实例状态为 Running 或 Stopped 时,磁盘才可以执行此操作,否则将提示 409 错误。
- 如果 volumeId 的磁盘不挂载在 instanceId 的实例上,该操作失败,提示 404 错误。
释放CDS磁盘
用于释放未挂载的CDS磁盘,可指定是否删除磁盘关联的快照,缺省情况下,该磁盘的所有快照将保留,但会删除与磁盘的关联关系:
Go
1err = client.DeleteCDSVolume(volumeId)
2if err != nil {
3 fmt.Println("delete CDS volume failed:", err)
4} else {
5 fmt.Println("delete CDS volume success")
6}
提示:
- 已挂载的CDS磁盘不能释放,系统盘不能释放。
- 若磁盘释放后不可恢复。缺省情况下,该磁盘的所有快照将保留,但会删除与磁盘的关联关系。
- 只有磁盘状态为 Available 或 Expired 或 Error 时才可以执行此操作,否则将提示 409 错误。
释放磁盘(POST)
提示:
- 该接口用于释放未挂载的CDS磁盘,系统盘不能释放。
- 用户可指定是否删除磁盘关联的快照,缺省情况下,该磁盘的所有快照将保留,但会删除与磁盘的关联关系。
- 用户可以指定是否将磁盘放入回收站
- 只有磁盘状态为 Available 或 Expired 或 Error 时才可以执行此操作,否则将提示 409 错误。
- 如果 volumeId 的磁盘不存在,将提示 404 错误 使用以下代码可以释放磁盘:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16
17 // 磁盘ID
18 volumeId := "v-***"
19
20 args := &api.DeleteCDSVolumeArgs{
21 // 是否删除磁盘关联的自动快照
22 AutoSnapshot: "on",
23 // 是否删除磁盘关联的手动快照
24 ManualSnapshot: "on",
25 // 是否将磁盘回收至回收站,为off时直接释放,不进入回收站
26 Recycle: "off",
27 }
28
29 // 请求释放磁盘
30 err := bccClient.DeleteCDSVolumeNew(volumeId, args)
31
32 fmt.Println(err)
33}
磁盘重命名
以下代码可以给一个CDS磁盘重命名:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16 volumeId := "" // 待重命名的磁盘ID
17 args := &api.RenameCSDVolumeArgs{
18 Name: "testVolume", // 新的磁盘名称
19 }
20 err := bccClient.RenameCDSVolume(volumeId, args)
21 if err != nil {
22 fmt.Println("rename CDS volume failed", err)
23 } else {
24 fmt.Println("rename CDS volume success")
25 }
26}
修改磁盘属性
可以使用以下代码修改指定磁盘名称、描述信息:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16
17 args := &api.ModifyCSDVolumeArgs{
18 CdsName: "name", // 待修改的CDS名称
19 Desc: "desc", // 修改后的CDS描述
20 }
21 volumeId := "v-vG0z****" // 磁盘ID
22 err := bccClient.ModifyCDSVolume(volumeId, args)
23 if err != nil {
24 fmt.Println("modify CDS volume failed: ", err)
25 } else {
26 fmt.Println("modify CDS volume success")
27 }
28}
磁盘计费变更
可以使用以下代码变更磁盘计费方式,仅支持按量付费(后付费)转包年包月(预付费)、包年包月(预付费)转按量付费(后付费)两种方式。变更为包年包月(预付费)需要指定购买时长。
- 使用以下代码可以完成将包年包月(预付费)磁盘计费变更为按量付费(后付费)。
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16
17 // 磁盘ID
18 volumeId := "v-***"
19 args := &api.ModifyChargeTypeCSDVolumeArgs{
20 Billing: &api.Billing{
21 // 后付费标志, 可不填
22 PaymentTiming: api.PaymentTimingPostPaid,
23 },
24 }
25
26 // 请求将预付费磁盘变更为后付费
27 err := bccClient.ModifyChargeTypeCDSVolume(volumeId, args)
28 fmt.Println(err)
29}
- 使用以下代码可以完成将按量付费(后付费)磁盘变更为包年包月(预付费):
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16
17 // 磁盘ID
18 volumeId := "v-***"
19 args := &api.ModifyChargeTypeCSDVolumeArgs{
20 Billing: &api.Billing{
21 // 预付费标志, 可不填
22 PaymentTiming: api.PaymentTimingPrePaid,
23 Reservation: &api.Reservation{
24 // 预留时长,预留时长单位为month,取值范围[1,9]
25 ReservationLength: 1,
26 // 预留时长单位, 当前仅支持month,可不填
27 ReservationTimeUnit: "month",
28 },
29 },
30 }
31
32 // 请求将后付费磁盘变更为预付费
33 err := bccClient.ModifyChargeTypeCDSVolume(volumeId, args)
34 fmt.Println(err)
35}
磁盘开通自动续费
通过以下代码可以开通磁盘自动续费:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16
17 volumeId := "v-***"
18 renewTimeUnit := "month"
19 // 设置自动续费的时间 按月是1-9 按年是 1-3
20 renewTime := 4
21 args := &api.AutoRenewCDSVolumeArgs{
22 // 磁盘ID
23 VolumeId: volumeId,
24 // 续费时间单位, 当前支持取值为:month
25 RenewTimeUnit: renewTimeUnit,
26 // 续费时间, 以month为单位续费时支持取值为:1-9
27 RenewTime: renewTime,
28 }
29 err := bccClient.AutoRenewCDSVolume(args)
30 fmt.Println(err)
31}
- 注意数据盘才能进行自动续费操作。
- 注意过期状态磁盘不能进行自动续费操作。
- 异步接口,可通过查询磁盘详情接口查询磁盘到期时间。
磁盘取消自动续费
通过以下代码可以取消磁盘自动续费:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16
17 volumeId := "v-***"
18 args := &api.CancelAutoRenewCDSVolumeArgs{
19 // 磁盘ID
20 VolumeId: volumeId,
21 }
22
23 err := bccClient.CancelAutoRenewCDSVolume(args)
24 fmt.Println(err)
25}
- 注意数据盘才能取消进行自动续费操作。
- 异步接口,可通过查询磁盘详情接口查询磁盘到期时间。
磁盘扩容
使用以下代码可以对磁盘进行扩大容量操作:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16 // 磁盘ID
17 volumeId := "v-***"
18 // 请求扩容参数
19 args := &api.ResizeCSDVolumeArgs{
20 // 扩容大小,单位为GB
21 NewCdsSizeInGB: 60,
22 // 扩容类型
23 NewVolumeType: api.StorageTypeEnhancedPl1,
24 }
25
26 // 请求扩容cds盘,变更磁盘类型和大小
27 err := bccClient.ResizeCDSVolume(volumeId, args)
28
29 fmt.Println(err)
30}
提示:
- 磁盘只能进行扩大容量,不支持缩小容量。
- 只有Available状态的磁盘,才能进行扩容操作
- 磁盘扩容是一个异步接口,可通过查询磁盘详情接口查询磁盘扩容状态。
回滚磁盘
可以使用指定磁盘自身的快照回滚磁盘内容,使用以下代码可以对磁盘进行回滚:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7
8)
9
10func main() {
11 // 设置您的ak、sk和要访问的endpoint
12 ak := "ak"
13 sk := "sk"
14 endpoint := "bcc.bj.baidubce.com"
15 // 创建bcc client
16 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
17
18 volumeId := "v-zBms****" // 磁盘ID
19
20 args := &api.RollbackCSDVolumeArgs{
21 SnapshotId: "s-HkbJ****", // 快照ID
22 }
23 err := bccClient.RollbackCDSVolume(volumeId, args)
24 if err != nil {
25 fmt.Println(err)
26 }
27}
提示:
- 磁盘状态必须为 Available 才可以执行回滚磁盘操作。
- 指定快照id必须是由该磁盘id创建的快照。
- 若是回滚系统盘,实例状态必须为 Running 或 Stopped 才可以执行此操作。
- 回滚系统盘快照,自本次快照以来的系统盘数据将全部丢失,不可恢复。
磁盘续费
对磁盘的续费操作,可以延长过期时长,以下代码可以对磁盘进行续费:
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16 // 待变配的实例配置参数
17 args := &api.PurchaseReservedCSDVolumeArgs{
18 Billing: &api.Billing{
19 PaymentTiming: api.PaymentTimingPrePaid,
20 Reservation: &api.Reservation{
21 ReservationLength: 1, // 续费时长
22 ReservationTimeUnit: "month", // 续费时长单位
23 },
24 },
25 }
26 volumeId := "v-dj5Q****" // 磁盘ID
27 err := bccClient.PurchaseReservedCDSVolume(volumeId, args)
28 if err != nil {
29 fmt.Println("purchase reserve CDS volume failed:", err)
30 } else {
31 fmt.Println("purchase reserve CDS volume success")
32 }
33}
释放CDS磁盘(新)
如下代码可以释放一个CDS磁盘及相关联的快照,并指定是否进入回收站
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16
17 // 磁盘ID
18 volumeId := "v-***"
19
20 args := &api.DeleteCDSVolumeArgs{
21 // 是否删除磁盘关联的自动快照
22 AutoSnapshot: "on",
23 // 是否删除磁盘关联的手动快照
24 ManualSnapshot: "on",
25 // 是否将磁盘回收至回收站,为off时直接释放,不进入回收站
26 Recycle: "off",
27 }
28
29 // 请求释放磁盘
30 err := bccClient.DeleteCDSVolumeNew(volumeId, args)
31
32 fmt.Println(err)
33}
提示:
- 该接口用于释放未挂载的CDS磁盘,系统盘不能释放。
- 与老接口功能上的区别在于,可以控制是否删除与磁盘关联的快照。
查询可用区可购买的磁盘信息
使用以下代码可以查询指定可用区可购买的磁盘信息
GO
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16
17 // 可用区名称;当传入zoneName为空串或为非法zone时,会返回全部可用区的可购买磁盘信息。
18 zoneName := "cn-bj-d"
19
20 // 请求查询可用区下可购买磁盘信息
21 result, err := bccClient.GetAvailableDiskInfo(zoneName)
22 fmt.Println(err)
23 fmt.Println(result)
24}
磁盘绑定标签
使用以下代码可以给指定磁盘绑定标签
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16 // 磁盘ID
17 volumeId := "v-***"
18 tagArgs := &api.TagVolumeArgs{
19 // 是否为关联资源绑定标签
20 RelationTag: false,
21 ChangeTags: []api.Tag{
22 {
23 // 标签key
24 TagKey: "Key-***",
25 // 标签value
26 TagValue: "Value***",
27 },
28 {
29 // 标签key
30 TagKey: "Key-***",
31 // 标签value
32 TagValue: "Value***",
33 },
34 },
35 }
36
37 // 请求为磁盘绑定标签
38 err := bccClient.TagVolume(volumeId, tagArgs)
39 fmt.Println(err)
40}
磁盘解绑标签
使用以下代码可以给指定磁盘绑定标签
Go
1package main
2
3import (
4 "fmt"
5 "github.com/baidubce/bce-sdk-go/services/bcc"
6 "github.com/baidubce/bce-sdk-go/services/bcc/api"
7)
8
9func main() {
10 // 设置您的ak、sk和要访问的endpoint
11 ak := "ak"
12 sk := "sk"
13 endpoint := "bcc.bj.baidubce.com"
14 // 创建bcc client
15 bccClient, _ := bcc.NewClient(ak, sk, endpoint)
16 // 磁盘ID
17 volumeId := "v-***"
18 tagArgs := &api.TagVolumeArgs{
19 // 是否为关联资源解绑标签
20 RelationTag: false,
21 ChangeTags: []api.Tag{
22 {
23 // 标签key
24 TagKey: "Key-***",
25 // 标签value
26 TagValue: "Value***",
27 },
28 {
29 // 标签key
30 TagKey: "Key-***",
31 // 标签value
32 TagValue: "Value***",
33 },
34 },
35 }
36
37 // 请求为磁盘解绑标签
38 err := bccClient.UntagVolume(volumeId, tagArgs)
39 fmt.Println(err)
40}