磁盘
更新时间:2023-08-01
创建CDS磁盘
支持新建空白CDS磁盘或者从CDS数据盘快照创建CDS磁盘,参考以下代码可以创建CDS磁盘:
// 新建CDS磁盘
public static void createVolume(BccClient bccClient) {
CreateVolumeRequest createVolumeRequest = new CreateVolumeRequest();
// 设置创建CDS磁盘的大小
createVolumeRequest.setCdsSizeInGB(cdsSizeInGb);
// 设置创建CDS磁盘的数量
createVolumeRequest.setPurchaseCount(purchaseCount);
CreateVolumeResponse createVolumeResponse = bccClient.createVolume(createVolumeRequest);
System.out.println(createVolumeResponse.getVolumeIds());
}
// 从快照创建CDS磁盘
public static void createVolumeFromSnapshot(BccClient bccClient, String snapshotId) {
CreateVolumeRequest createVolumeRequest = new CreateVolumeRequest();
// 设置创建CDS磁盘的快照来源
createVolumeRequest.setSnapshotId(snapshotId);
// 设置创建CDS磁盘的数量
createVolumeRequest.setPurchaseCount(purchaseCount);
CreateVolumeResponse createVolumeResponse = bccClient.createVolume(createVolumeRequest);
System.out.println(createVolumeResponse.getVolumeIds());
}
查询磁盘列表
以下代码可以查询所有的磁盘列表,不包含临时数据盘,支持分页查询以及通过次磁盘所挂载的BCC实例id进行过滤筛选:
public static void listVolumes(BccClient bccClient) {
ListVolumesRequest listVolumesRequest = new ListVolumesRequest();
// 设置分页标志
listVolumesRequest.setMarker(volumeId);
// 设置分页返回数据大小
listVolumesRequest.setMaxKeys(maxKey);
// 设置筛选的磁盘所挂载的实例Bcc实例id
listVolumesRequest.setInstanceId(instanceId);
ListVolumesResponse listVolumesResponse = bccClient.listVolumes(listVolumesRequest);
for (VolumeModel volumeModel : listVolumesResponse.getVolumes()) {
System.out.println(volumeModel.getId());
}
}
查询磁盘详情
通过磁盘id可以获取对应磁盘的详细信息,以下代码可以查询磁盘详情:
public static void getVolumeDetail(BccClient bccClient) {
// 设置磁盘id
GetVolumeResponse volumeResponse = bccClient.getVolume(volumeId);
System.out.println(volumeResponse.getVolume().getId());
}
挂载CDS磁盘
可以将未挂载的磁盘挂载在对应的BCC虚机下,以下代码将一个CDS挂载在对应的BCC虚机下:
public static void attachVolume(BccClient bccClient) {
AttachVolumeRequest attachVolumeRequest = new AttachVolumeRequest();
// 设置需要挂载的磁盘id
attachVolumeRequest.setVolumeId(volumeId);
// 设置BCC虚机id
attachVolumeRequest.setInstanceId(instanceId);
// 打印挂载路径
System.out.println(bccClient.attachVolume(attachVolumeRequest).getVolumeAttachment().getDevice());
}
- CDS磁盘需要挂载在与其处在相同zone下的虚机实例上,否则将返回403错误。
- 只有磁盘状态为 Available 且实例状态为 Running 或 Stopped 时才允许挂载,否则调用此接口将返回 409 错误。
卸载CDS磁盘
可以将已挂载的磁盘从对应的BCC虚机上卸载下来,以下代码卸载CDS磁盘:
public static void detachVolume(BccClient bccClient) {
DetachVolumeRequest detachVolumeRequest = new DetachVolumeRequest();
// 设置待卸载的磁盘对应的ID
detachVolumeRequest.setVolumeId(volumeId);
// 设置所挂载的实例ID
detachVolumeRequest.setInstanceId(instanceId);
// 执行卸载操作
bccClient.detachVolume(detachVolumeRequest);
}
- 只有实例状态为 Running 或 Stopped 时,磁盘才可以执行此操作,否则将提示 409 错误。
- 如果 volumeId 的磁盘不挂载在 instanceId 的实例上,该操作失败,提示 404 错误。
释放CDS磁盘
用于释放未挂载的CDS磁盘,可指定是否删除磁盘关联的快照,缺省情况下,该磁盘的所有快照将保留,但会删除与磁盘的关联关系:
public static void releaseVolume(BccClient bccClient) {
ReleaseVolumeRequest releaseVolumeRequest = new ReleaseVolumeRequest();
// 设置磁盘id
releaseVolumeRequest.setVolumeId(volumeId);
// 若要释放磁盘关联的快照,加入以下代码,参数有"on"和"off"
// 若要删除磁盘关联的自动快照,将参数设为"on",否则默认为"off"
releaseVolumeRequest.setAutoSnapshot("on");
// 若要删除磁盘关联的手动快照,将参数设为"on",否则默认为"off"
releaseVolumeRequest.setManualSnapshot("on");
bccClient.releaseVolume(releaseVolumeRequest);
}
- 已挂载的CDS磁盘不能释放,系统盘不能释放。
- 磁盘释放后不可恢复。缺省情况下,该磁盘的所有快照将保留,但会删除与磁盘的关联关系。
- 只有磁盘状态为 Available 或 Expired 或 Error 时才可以执行此操作,否则将提示 409 错误。
修改磁盘属性
可以使用以下代码修改指定磁盘名称、描述信息:
public static void modifyCdsAttribute(BccClient bccClient) {
ModifyCdsAttributeRequest modifyCdsAttributeRequest = new ModifyCdsAttributeRequest();
// 设置磁盘id
modifyCdsAttributeRequest.setCdsId(volumeId);
// 设置新的磁盘名称
modifyCdsAttributeRequest.setCdsName(volumeName);
// 设置磁盘新的描述
modifyCdsAttributeRequest.setDesc(volumeDesc);
bccClient.modifyCdsAttribute(modifyCdsAttributeRequest);
}
磁盘计费变更
可以使用以下代码变更磁盘计费方式,仅支持后付费转预付费、预付费转后付费两种方式。变更为预付费需要指定购买时长。
public static void modifyVolumeChargeType(BccClient bccClient) {
ModifyVolumeChargeRequest modifyVolumeChargeRequest = new ModifyVolumeChargeRequest();
// 设置磁盘id
modifyVolumeChargeRequest.setVolumeId(volumeId);
// 设置新的计费方式为预付费
modifyVolumeChargeRequest.setBillingMethod("prepay");
// 设置新的计费方式为后付费
modifyVolumeChargeRequest.setBillingMethod("postpay");
// 设置购买时长(月)
modifyVolumeChargeRequest.setReservationLength(reservationLength);
bccClient.modifyVolumeChargeType(modifyVolumeChargeRequest);
}
磁盘扩容
使用以下代码可以对磁盘进行扩大容量操作:
public static void resizeVolume(BccClient bccClient) {
ResizeVolumeRequest resizeVolumeRequest = new ResizeVolumeRequest();
// 设置磁盘id
resizeVolumeRequest.setVolumeId(volumeId);
// 设置磁盘扩容后总大小
resizeVolumeRequest.setNewCdsSizeInGB(cdsResizeInGb);
// 执行磁盘扩容
bccClient.resizeVolume(resizeVolumeRequest);
}
磁盘只能进行扩大容量,不支持缩小容量。 只有Available状态的磁盘,才能进行扩容操作 磁盘扩容是一个异步接口,可通过查询磁盘详情接口查询磁盘扩容状态。
回滚磁盘
可以使用指定磁盘自身的快照回滚磁盘内容,使用以下代码可以对磁盘进行回滚:
public static void rollbackVolume(BccClient bccClient) {
RollbackVolumeRequest rollbackVolumeRequest = new RollbackVolumeRequest();
// 设置磁盘id
rollbackVolumeRequest.setVolumeId(volumeId);
// 设置磁盘的快照id
rollbackVolumeRequest.setSnapshotId(snapshotId);
// 执行回滚操作
bccClient.rollbackVolume(rollbackVolumeRequest);
}
- 磁盘状态必须为 Available 才可以执行回滚磁盘操作。
- 指定快照id必须是由该磁盘id创建的快照。
- 若是回滚系统盘,实例状态必须为 Running 或 Stopped 才可以执行此操作。
- 回滚系统盘快照,自本次快照以来的系统盘数据将全部丢失,不可恢复。
磁盘续费
对磁盘的续费操作,可以延长过期时长,以下代码可以对磁盘进行续费:
public static void purchaseReservedVolume(BccClient bccClient) {
PurchaseReservedVolumeRequest purchaseReservedVolumeRequest = new PurchaseReservedVolumeRequest();
// 设置磁盘id
purchaseReservedVolumeRequest.setVolumeId(volumeId);
// 设置billing信息
Billing billing = new Billing();
// 设置续费时长,单位目前只支持'月'为单位
billing.setReservation(new Reservation().withReservationLength(reservationLength));
// 设置billing信息
purchaseReservedVolumeRequest.setBilling(billing);
// 执行续费磁盘操作
bccClient.purchaseReservedVolume(purchaseReservedVolumeRequest);
}
磁盘开通自动续费
为指定磁盘开通自动续费
public static void autoRenewVolume(BccClient bccClient, String volumeId, String renewTimeUnit, int renewTime) {
AutoRenewVolumeRequest autoRenewVolumeRequest = new AutoRenewVolumeRequest();
// 磁盘ID
autoRenewVolumeRequest.setVolumeId(volumeId);
// 按月付费或者按年付费 月是"month",年是"year"
autoRenewVolumeRequest.setRenewTimeUnit(renewTimeUnit);
// 自动续费的时间 按月是1-9 按年是 1-3
autoRenewVolumeRequest.setRenewTime(renewTime);
bccClient.autoRenewVolume(autoRenewVolumeRequest);
}
- 注意数据盘才能进行自动续费操作
- 注意过期状态磁盘不能进行自动续费操作
- 异步接口,可通过查询磁盘详情接口查询磁盘到期时间
磁盘取消自动续费
为指定磁盘取消自动续费
public static void cancelAutoRenewVolume(BccClient bccClient, String volumeId) {
CancelAutoRenewVolumeRequest cancelAutoRenewVolumeRequest = new CancelAutoRenewVolumeRequest();
// 磁盘ID
cancelAutoRenewVolumeRequest.setVolumeId(volumeId);
bccClient.cancelAutoRenewVolume(cancelAutoRenewVolumeRequest);
}
- 注意数据盘才能进行取消自动续费操作
- 异步接口,可通过查询磁盘详情接口查询磁盘到期时间
磁盘重命名
用于修改指定磁盘名称
public static void renameVolume(BccClient bccClient, String volumeId, String newName) {
RenameVolumeRequest renameVolumeRequest = new RenameVolumeRequest();
// 待重命名的磁盘ID
renameVolumeRequest.setVolumeId(volumeId);
// 磁盘新的名称,自定义镜像名称,支持大小写字母、数字、中文以及-_ /.特殊字符,必须以字母开头,长度1-65。
renameVolumeRequest.setName(newName);
bccClient.renameVolume(renameVolumeRequest);
}