磁盘
更新时间:2025-09-24
创建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.ListPurchasableDisksInfo(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}
            