正在从已停止的实例中分离磁盘



我正在尝试从当前保存磁盘的已停止实例中分离磁盘。 这是我目前的做法。

def detach_disk_from_instance(disk_name, zone=GCLOUD_ZONE):
disk_info = get_disk_info(disk_name=disk_name, zone=zone)
if disk_info.get('users'):
instance_name = disk_info['users'][0].rsplit('/').pop()
logger.info("detatching disk : {} from instance : {}".format(disk_name, instance_name))
request = compute.instances().detachDisk(
project=GCLOUD_PROJECT_NAME, zone=zone, instance=instance_name, deviceName=disk_name)
return make_http_request(request, {})
def wait_for_operation(operation, zone=GCLOUD_ZONE, worker=1):
logger.info('Waiting for operation {} to finish...'.format(operation))
with ThreadPoolExecutor(worker) as executor:
future = executor.submit(_check_operation_status, operation=operation, zone=zone)
wait([future])
return future.result()
req = detach_disk_from_instance(disk_name='test-disk')
wait_for_operation(operation=req['name'])

如果保存磁盘的实例当前正在运行,则上面的代码有效。 但如果实例停止,它不起作用。当我尝试从已停止的实例中分离磁盘时,我收到以下错误。

{'错误': [{'消息': "找不到带有设备名称的附加磁盘 'test-disk'", 'code': 'INVALID_USAGE'}]}

我向您保证,磁盘仍然附加到实例,gcp 仪表板也显示了这一点。

TL;DR- 您传递的是磁盘资源的name,而不是磁盘附加到实例的device name

在将磁盘附加到 VM 实例的instances.attachDisk请求中,可以在请求的deviceName字段中指定设备名称。

设备名称

字符串

指定您选择的唯一设备名称,该名称 反映在 Linux 的/dev/disk/by-id/google-* 树中 在实例中运行的操作系统。此名称可用于 从内部引用设备以进行安装、调整大小等 实例。

如果未指定,服务器将选择要应用于的默认设备名称 此磁盘,采用持久磁盘-X 的形式,其中 x 是一个数字 由 Google Compute Engine 分配。此字段仅适用于 永久磁盘。

您需要使用此名称作为instances.detachDisk请求的deviceName查询参数。

必需的查询参数

设备名称

字符串

要分离的磁盘设备名称。

如文档中所述,如果您在附加磁盘时未指定设备名称,GCE 会以persistent-disks-x的形式生成设备名称,您必须指定此名称。

相关内容

  • 没有找到相关文章

最新更新