如果您的本地环境中已有包含您所需软件和配置的虚拟磁盘(有时称为黄金磁盘或黄金映像),您可以将这些虚拟磁盘导入 Compute Engine 中并使用生成的映像创建虚拟机,从而节约时间。导入工具支持大多数虚拟磁盘文件格式,包括 VMDK 和 VHD。
如果您已从 Compute Engine 中导出磁盘,则可以使用该磁盘来create映像。
如需了解如何创建自动化系统来迁移多个虚拟机 (VM),请参阅将虚拟机迁移到 Compute Engine。
准备工作
- 如果您为要向其中导入映像的项目定义了可信映像政策,请将
projects/compute-image-import
和projects/compute-image-tools
添加到允许的发布商列表中。 - 如需了解如何满足导入映像的要求,请参阅导入和导出虚拟机映像的前提条件。
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
如果要导入运行 RHEL 的虚拟磁盘,您必须在导入之前将 python-boto 软件包安装到该虚拟磁盘上,这样系统才能支持自带许可 (BYOL)。
虚拟磁盘上的操作系统必须支持 ACPI。
对于受 VPC Service Controls 保护的项目,不支持此功能。对于这些环境,请参阅手动导入启动磁盘。
您无法使用映像导入工具导入 Arm 映像。如需导入 Arm 映像,请按照手动导入启动磁盘中所述的分步说明。
Compute Engine 不支持导入软件加密磁盘,因为如果没有密钥,就无法读取这些磁盘。具体而言,您无法导入使用 BitLocker 驱动器加密的 Windows 10 及更高版本的映像。
Linux 虚拟磁盘必须使用
grub
作为引导加载程序。Linux 虚拟磁盘必须符合与自定义映像相同的要求,包括对 Virtio-SCSI 存储控制器设备的支持。
当安装在 Windows 虚拟磁盘上时,应用许可名单软件(例如 Carbon Black 的 CB Protection)可能会导致导入过程失败。在导入之前,您可能需要卸载此类软件。
在基于 Windows 的虚拟机上,Microsoft KM-TEST 环回适配器会阻止对元数据服务器的网络访问,因此,您必须在导入之前停用或移除该适配器。
- 在 Google Cloud 控制台中,将虚拟磁盘文件上传到 Cloud Storage。
转到创建映像页面。
为您的映像指定名称。
在来源下,选择虚拟磁盘(VMDK、VHD)。
选择 Cloud Build 服务账号。您可以使用默认服务账号或选择自定义服务账号。
- 如果您选择的服务账号没有足够的权限来导入映像,您将看到一条消息,其中包含授予所需权限的选项。点击授予,为服务账号提供所需的权限。
输入日志位置。如果您选择的服务账号是 Cloud Build 服务账号,则无需提供日志位置。对于所有其他服务账号(包括默认的 Compute Engine 服务账号),您必须提供日志位置。
浏览到或手动输入 Cloud Storage 文件的存储位置。
选择导入磁盘上可用的操作系统。您还可以进行以下更改:
(可选)为映像指定其他属性。例如,您可以将此映像组织为映像系列的一部分。
点击创建以导入该映像。
IMAGE_NAME
:您的目标映像的名称。SOURCE_FILE
:您的虚拟磁盘文件。此文件可以是本地文件或 Cloud Storage 中存储的文件。如果您的虚拟磁盘是本地文件,则可以提供绝对路径或相对路径。如果您的虚拟磁盘文件已存储在 Cloud Storage 中,则该文件必须位于导入过程所用项目的 Cloud Storage 存储桶内,并且您必须按gs://BUCKET_NAME/OBJECT_NAME
格式指定该文件的完整路径。将虚拟磁盘添加到 Cloud Storage。
向 Cloud Build API 发送
POST
请求。POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds { "steps":[ { "args":[ "-image_name=IMAGE_NAME", "-source_file=SOURCE_FILE", "-timeout=7000s", "-client_id=api" ], "name":"gcr.io/compute-image-import/gce_vm_image_import:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "timeout":"7200s", "tags":[ "gce-daisy", "gce-daisy-image-import" ] }
替换以下内容:
PROJECT_ID
:要向其中导入映像的项目的 ID。IMAGE_NAME
:要导入的映像的名称。SOURCE_FILE
:Cloud Storage 中映像的 URI,例如gs://my-bucket/my-image.vmdk
。
如需查看可提供的其他
args
值,请参阅虚拟机映像导入 GitHub 页面的“可选标志”部分。示例响应
以下示例响应类似于返回的输出:
{ "name": "operations/build/myproject-12345/operation-1578608233418", "metadata": { "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata", "build": { "id": "3a2055bc-ccbd-4101-9434-d376b88b8940", "status": "QUEUED", "createTime": "2019-09-20T15:55:29.353258929Z", "steps": [ { "name": "gcr.io/compute-image-import/gce_vm_image_import:release", "env": [ "BUILD_ID=3a2055bc-ccbd-4101-9434-d376b88b8940" ], "args": [ "-timeout=7000s", "-image_name=my-image", "-client_id=api", "-data-disk", "-source_file=gs://my-bucket/my-image.vmdk" ] } ], "timeout": "7200s", "projectId": "myproject-12345", "logsBucket": "gs://123456.cloudbuild-logs.googleusercontent.com", "options": { "logging": "LEGACY" }, "logUrl": "https://console.cloud.google.com/cloud-build/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=123456" } }
您可以通过以下几种方式监控您的版本:
- 使用返回的
build-id
运行 projects.builds.get 请求。 - 查看在提供的
logUrl
下托管的日志。
IMAGE_NAME
:要创建的映像的名称。SOURCE_FILE
:要导入的虚拟磁盘的本地文件或 Cloud Storage URI。OS
:要导入的磁盘映像的操作系统。操作系统的许可是根据此标志的值推断出来的;导入时没有明确提供许可信息标志。如需查看受支持值的列表,请参阅--os
标志。IMAGE_NAME
:您的目标映像的名称。SOURCE_FILE
:您的虚拟磁盘文件。此文件可以是本地文件或 Cloud Storage 中存储的文件。如果您的虚拟磁盘是本地文件,您可以使用绝对路径或相对路径。 如果您的虚拟磁盘文件已存储在 Cloud Storage 中,则该文件必须位于导入过程所用项目的 Cloud Storage 存储桶内,并且您必须按gs://BUCKET_NAME/OBJECT_NAME
格式指定该文件的完整路径。将虚拟磁盘添加到 Cloud Storage。
向 Cloud Build API 发送
POST
请求。POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds { "steps":[ { "args":[ "-image_name=IMAGE_NAME", "-source_file=SOURCE_FILE", "-timeout=7000s", "-client_id=api", "-data_disk" ], "name":"gcr.io/compute-image-import/gce_vm_image_import:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "timeout":"7200s", "tags":[ "gce-daisy", "gce-daisy-image-import" ] }
替换以下
args
值:PROJECT_ID
:要向其中导入映像的项目的 ID。IMAGE_NAME
:要导入的映像的名称。SOURCE_FILE
:Cloud Storage 中映像的 URI,例如gs://my-bucket/my-image.vmdk
。
将虚拟磁盘添加到 Cloud Storage。
映像导入过程要求在虚拟磁盘的操作系统上安装软件包管理器。这些软件包管理器可能需要对 Google Cloud 外部的软件包代码库发出请求。若要允许访问这些更新,您需要配置 Cloud NAT。如需了解详情,请参阅使用 Cloud Router 创建 NAT 配置。
配置专用 Google 访问通道。有关了解详情,请参阅配置专用 Google 访问通道。
使用 Google Cloud CLI 或 REST 导入虚拟磁盘。
导入虚拟磁盘时,系统会在您的项目中创建临时虚拟机。为确保这些临时虚拟机未被分配外部 IP 地址,您必须指定其他标志或参数。
如需了解详情,请点击以下标签页:
IMAGE_NAME
:您要创建的磁盘映像的名称。SOURCE_FILE
:您的虚拟磁盘文件。该文件可以是本地文件或 Cloud Storage 中存储的文件。如果您的虚拟磁盘是本地文件,则可以提供绝对路径或相对路径。如果您的虚拟磁盘文件已存储在 Cloud Storage 中,则该文件必须位于导入过程所用项目的 Cloud Storage 存储桶内,并且您必须按gs://BUCKET_NAME/OBJECT_NAME
格式指定该文件的完整路径。ZONE
:要在其中创建映像的可用区。如果留空,则使用项目的默认可用区。PROJECT_ID
:要向其中导入映像的项目的 ID。IMAGE_NAME
:要导入的映像的名称。SOURCE_FILE
:Cloud Storage 中映像的 URI,例如gs://my-bucket/my-image.vmdk
,用于gcloud compute images import
命令。ZONE
:要在其中创建映像的可用区。如果留空,则使用项目的默认可用区。- 如果映像导入进程在导入期间未检测到 UEFI 引导加载程序。
如果您的磁盘是双重启动磁盘并且具有 hybrid-mbr + UEFI 或 protective-mbr + UEFI 组合。对于双重启动磁盘,导入可能默认为非 UEFI 启动。
IMAGE_NAME
:要导入的映像的名称。SOURCE_FILE
:Cloud Storage 中映像的 URI,例如gs://my-bucket/my-image.vmdk
。将虚拟磁盘添加到 Cloud Storage。
向 Cloud Build API 发送
POST
请求。POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds { "steps":[ { "args":[ "-image_name=IMAGE_NAME", "-source_file=SOURCE_FILE", "-uefi_compatible", "-timeout=7000s", "-client_id=api" ], "name":"gcr.io/compute-image-import/gce_vm_image_import:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "timeout":"7200s", "tags":[ "gce-daisy", "gce-daisy-image-import" ] }
替换以下内容:
PROJECT_ID
:要向其中导入映像的项目的 ID。IMAGE_NAME
:要导入的映像的名称。SOURCE_FILE
:Cloud Storage 中映像的 URI,例如gs://my-bucket/my-image.vmdk
。
IMAGE_NAME
:要导入的映像的名称。SOURCE_FILE
:您的虚拟磁盘文件。该文件可以是本地文件或 Cloud Storage 中存储的文件。如果您的虚拟磁盘是本地文件,则可以提供绝对路径或相对路径。如果您的虚拟磁盘文件已存储在 Cloud Storage 中,则该文件必须位于导入过程所用项目的 Cloud Storage 存储桶内,并且您必须按gs://BUCKET_NAME/OBJECT_NAME
格式指定该文件的完整路径。SERVICE_PROJECT_ID
:要向其中导入映像的项目的 ID。ZONE
:要向其中导入映像的可用区。此区域必须与子网的地区相匹配。例如,如果SUBNET
为us-west1
。导入区域必须是以下各项之一:us-west1-a
、us-west1-b
或us-west1-c
。NETWORK
:共享 VPC 网络的完整路径,例如projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME
。SUBNET
:共享 VPC 子网的完整路径,例如projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
。示例命令
gcloud compute images import example-image \ --source-file gs://source-bucket/source-file.vmdk \ --project my-image-project \ --zone us-west1-c \ --network projects/my-vpc-project/global/networks/my-shared-vpc \ --subnet projects/my-vpc-project/regions/us-west1/subnetworks/my-shared-subnet
将虚拟磁盘添加到 Cloud Storage。
向 Cloud Build API 发送
POST
请求。POST https://cloudbuild.googleapis.com/v1/projects/SERVICE_PROJECT_ID/builds { "steps":[ { "args":[ "-image_name=IMAGE_NAME", "-source_file=SOURCE_FILE", "-zone=ZONE", "-network=NETWORK", "-subnet=SUBNET", "-timeout=7000s", "-client_id=api" ], "name":"gcr.io/compute-image-import/gce_vm_image_import:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "timeout":"7200s", "tags":[ "gce-daisy", "gce-daisy-image-import" ] }
替换以下
args
值:SERVICE_PROJECT_ID
:要向其中导入映像的项目的 ID。IMAGE_NAME
:要导入的映像的名称。SOURCE_FILE
:Cloud Storage 中映像的 URI,例如gs://my-bucket/my-image.vmdk
。ZONE
:要向其中导入映像的可用区。此区域必须与子网的地区相匹配。例如,如果SUBNET
为us-west1
。导入区域必须是以下各项之一:us-west1-a
、us-west1-b
或us-west1-c
。NETWORK
:共享 VPC 网络的完整路径,例如projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME
。SUBNET
:共享 VPC 子网的完整路径,例如projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
将虚拟磁盘添加到 Cloud Storage。
创建服务账号并分配最小角色。如需详细了解如何创建服务账号,请参阅创建和管理服务账号。
指定的 Compute Engine 服务账号必须至少具有以下角色:
roles/compute.storageAdmin
roles/storage.objectViewer
如需了解详情,请参阅为 Compute Engine 服务账号授予所需角色。
使用
gcloud compute images import
导入映像。gcloud compute images import IMAGE_NAME \ --source-file SOURCE_FILE \ --compute-service-account SERVICE_ACCOUNT_EMAIL
替换以下内容:
IMAGE_NAME
:您的目标映像的名称。SOURCE_FILE
:您的虚拟磁盘文件。此文件可以是本地文件或 Cloud Storage 中存储的文件。如果您的虚拟磁盘是本地文件,则可以提供绝对路径或相对路径。如果您的虚拟磁盘文件已存储在 Cloud Storage 中,则该文件必须位于导入过程所用项目的 Cloud Storage 存储桶内,并且您必须按gs://BUCKET_NAME/OBJECT_NAME
格式指定该文件的完整路径。SERVICE_ACCOUNT_EMAIL
:与上一步中创建的 Compute Engine 服务账号关联的电子邮件地址。
示例
以下示例使用具有电子邮件地址
image-export-service-account@proj-12345.iam.gserviceaccount.com
的服务账号,导入存储在gs://your_gcs_bucket
中名为my_server.vmdk
的可启动虚拟磁盘。gcloud compute images import my-imported-image \ --source-file gs://your_gcs_bucket/my_server.vmdk \ --compute-service-account image-export-service-account@proj-12345.iam.gserviceaccount.com
将虚拟磁盘添加到 Cloud Storage。
创建服务账号并分配最小角色。如需详细了解如何创建服务账号,请参阅创建和管理服务账号。
指定的 Compute Engine 服务账号必须至少具有以下角色:
roles/compute.storageAdmin
roles/storage.objectViewer
如需了解详情,请参阅为 Compute Engine 服务账号授予所需角色。
将虚拟磁盘添加到 Cloud Storage。
向 Cloud Build API 发送
POST
请求。POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds { "steps":[ { "args":[ "-image_name=IMAGE_NAME", "-source_file=SOURCE_FILE", "-compute_service_account=SERVICE_ACCOUNT_EMAIL", "-timeout=7000s", "-client_id=api" ], "name":"gcr.io/compute-image-import/gce_vm_image_import:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "timeout":"7200s", "tags":[ "gce-daisy", "gce-daisy-image-import" ] }
替换以下内容:
PROJECT_ID
:要向其中导入映像的项目的 ID。IMAGE_NAME
:要导入的映像的名称。SOURCE_FILE
:Cloud Storage 中映像的 URI,例如gs://my-bucket/my-image.vmdk
。SERVICE_ACCOUNT_EMAIL
:与上一步中创建的 Compute Engine 服务账号关联的电子邮件地址。
IMAGE_NAME
:您的目标映像的名称。SOURCE_IMAGE_NAME
:您的来源映像的名称。如需了解如何将具备现有许可的映像导入 Google Cloud,请参阅自带许可。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
支持的操作系统
您可以导入可启动的磁盘和不可启动的磁盘。您的虚拟磁盘必须运行以下支持的操作系统之一才能在 Compute Engine 上启动。
支持 BYOL 和 BYOS
如果您希望使用自己的软件许可或订阅,则可以导入虚拟磁盘及其许可。如需了解支持 BYOL 或 BYOS 的操作系统,请参阅操作系统详细信息。
您可以使用带有
--byol
标志的gcloud compute instances import
命令来导入具有现有许可的映像。限制
此功能具有以下常规限制:
此功能在 Linux 上具有以下限制:
此功能在 Windows 上具有以下限制:
权限
如需在导入映像时启用无缝体验,请确保您已向您的账号、Cloud Build 服务账号和 Compute Engine 服务账号授予所需的 IAM 角色。如需了解详情,请参阅授予所需的 IAM 角色。
检查兼容性
在尝试导入您的虚拟机的磁盘之前,请先下载预检工具并在虚拟机内部运行该工具。预检工具会检查是否存在任何兼容性问题,这些问题可能会导致导入过程失败或者导致磁盘在 Compute Engine 上无法正常运行。
导入虚拟磁盘
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Cloud Build API 导入虚拟磁盘。
导入可启动的虚拟磁盘
对于可启动的磁盘,您无需指定操作系统,因为导入工具会自动检测操作系统以确定所需的驱动程序和软件包。但是,如果您需要替换检测到的操作系统,则可以指定
--os
标志或-os
参数。如需查看受支持的值的列表,请参阅--os
标志。控制台
gcloud
使用
gcloud compute images import
命令创建可启动的 Compute Engine 映像。尽管 Compute Engine 可以启动大多数启动磁盘映像,但import
命令可确保磁盘具备所需的驱动程序和最新的访客环境软件包,而这些正是启动实例以及通过 SSH 或 RDP 连接到实例的必要条件。您可以从 Cloud Storage 存储桶或本地工作站导入虚拟磁盘文件。
从工作站导入虚拟磁盘文件时,导入工具会为您将该文件自动上传到 Cloud Storage 存储桶。
如果您愿意,可以在开始导入过程之前自行将虚拟磁盘文件上传到 Cloud Storage,但是您必须将该文件上传到属于导入过程所用同一项目的 Cloud Storage 存储桶中。
gcloud compute images import IMAGE_NAME \ --source-file SOURCE_FILE
替换以下内容:
如果要导入具有现有许可的映像,请指定
--byol
标志,如下所示:gcloud compute images import IMAGE_NAME \ --source-file SOURCE_FILE --byol
如需了解如何将具备现有许可的映像导入 Google Cloud,请参阅自带许可。
如果您指定了本地文件,则上传操作可能需要很长时间才能完成,具体取决于虚拟磁盘的大小和网络连接的速度。根据磁盘大小,导入操作可能需要运行几十分钟。
示例
以下示例会导入存储在
gs://your_gcs_bucket
中名为my_server.vmdk
的虚拟磁盘。gcloud compute images import my-imported-image \ --source-file gs://your_gcs_bucket/my_server.vmdk
可选参数
默认情况下,访客环境软件包会添加到所有导入的启动磁盘映像中。如果您不想使用这些软件包,请在导入命令中添加
--no-guest-environment
标志。REST
导入许可并将其附加到虚拟磁盘
如需在导入映像时附加许可,请使用以下
gcloud compute images import
命令。gcloud compute images import IMAGE_NAME \ --source-file=SOURCE_FILE --os=OS
替换以下内容:
如需详细了解如何查看和附加许可,请参阅查看和附加许可。
导入无法启动的虚拟磁盘
控制台
gcloud
您可以使用
gcloud compute images import
命令创建不可启动的 Compute Engine 映像。 如果您的虚拟磁盘上没有安装可启动的操作系统,请指定--data-disk
标志。这样就省却了安装驱动程序和访客环境软件包以让映像能够在 Compute Engine 上启动的步骤。gcloud compute images import IMAGE_NAME \ --source-file SOURCE_FILE \ --data-disk
替换以下内容:
示例 1:从 Cloud Storage 导入不可启动的虚拟磁盘
以下示例会导入存储在
gs://your_gcs_bucket
中名为my_disk.vmdk
的虚拟磁盘。gcloud compute images import my-imported-image \ --source-file gs://your_gcs_bucket/my_disk.vmdk --data-disk
示例 2:通过指定超时值导入大型 VMDK 文件
导入过程的默认超时值为 2 小时。大型 VMDK 文件可能需要长达 24 小时才能导入完成。如果您在导入此类大型文件时未指定
--timeout
标志,则该过程会在 2 小时后失败。以下示例会导入存储在
gs://your_gcs_bucket
中名为my_disk.vmdk
的虚拟磁盘。 此次导入的超时值为 24 小时。gcloud compute images import my-imported-image \ --source-file gs://your_gcs_bucket/my_disk.vmdk --data-disk --timeout=24h
REST
使用不允许外部 IP 地址的网络来导入磁盘
如需使用不允许外部 IP 地址的网络导入虚拟磁盘,请完成以下步骤:
gcloud
使用带有
--no-address
标志的gcloud compute images import
命令导入您的虚拟磁盘。gcloud compute images import IMAGE_NAME \ --source-file=SOURCE_FILE \ --zone=ZONE \ --no-address
替换以下内容:
REST
向 Cloud Build API 发送
POST
请求并指定-no-external-ip
参数。POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds { "steps":[ { "args":[ "-image_name=IMAGE_NAME", "-source_file=SOURCE_FILE", "-zone=ZONE", "-no_external_ip", "-timeout=7000s", "-client_id=api" ], "name":"gcr.io/compute-image-import/gce_vm_image_import:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "timeout":"7200s", "tags":[ "gce-daisy", "gce-daisy-image-import" ] }
替换以下内容:
使用 UEFI 引导加载程序来导入虚拟磁盘
对于大多数虚拟磁盘,Compute Engine 可以检测并成功导入具有 UEFI 引导加载程序的磁盘,而无需额外标志。
但是,对于如下所示的情况,您可能需要在导入期间强制执行 UEFI 启动。
gcloud
您可以使用
gcloud compute images import
命令强制执行导入以使用 UEFI 启动。gcloud compute images import IMAGE_NAME \ --source-file=SOURCE_FILE \ --guest-os-features=UEFI_COMPATIBLE
替换以下内容:
示例
以下示例会导入存储在
gs://my-gcs-bucket/
中名为my-disk.vmdk
的虚拟磁盘,并强制使用 UEFI 启动。gcloud compute images import my-imported-image \ --source-file gs://my-gcs-bucket/my-disk.vmdk \ --guest-os-features=UEFI_COMPATIBLE
REST
如需强制导入项使用 UEFI 启动,您可以使用 Cloud Build API 并指定
-uefi_compatible
参数。为此,请完成以下步骤:使用共享 VPC 来导入虚拟磁盘
在导入使用共享 VPC 的虚拟磁盘之前,您必须将
compute.networkUser
角色添加到 Cloud Build 服务账号。如需了解详情,请参阅向 Cloud Build 服务账号授予所需角色。gcloud
使用
gcloud compute images import
命令导入您的虚拟磁盘。gcloud compute images import IMAGE_NAME \ --source-file SOURCE_FILE \ --project SERVICE_PROJECT_ID \ --zone ZONE \ --network NETWORK \ --subnet SUBNET
替换以下内容:
REST
使用自定义 Compute Engine 服务账号导入虚拟磁盘
在映像导入期间,系统会在您的项目中创建临时虚拟机 (VM)。这些临时虚拟机上的映像导入工具必须经过身份验证。
服务账号是关联到虚拟机的身份。服务账号访问令牌可通过实例元数据服务器访问,用于对虚拟机上的映像导入工具进行身份验证。
默认情况下,导入过程使用项目的默认 Compute Engine 服务代理。但是,如果您在项目中停用了默认 Compute Engine 服务账号,或者如果要使用自定义 Compute Engine 服务账号,则需要创建一个服务账号并针对导入过程指定该账号。
gcloud
REST
使映像可启动
如果您的 Compute Engine 自定义映像上有可启动的操作系统,但没有必需的 Compute Engine 驱动程序或访客环境软件包,则可以使用映像导入工具使该映像能够在 Compute Engine 上启动。
请使用
--source-image
标志指定要设为可启动的自定义映像,而不要使用--source-file
标志指定要导入的新磁盘。gcloud compute images import IMAGE_NAME \ --source-image SOURCE_IMAGE_NAME
替换以下内容:
示例命令
以下示例将一个名为
my-image
的 Compute Engine 映像转换为名为my-bootable-image
的可启动映像。在此示例中,--os ubuntu-1604
会替换检测的操作系统。gcloud compute images import my-bootable-image \ --source-image my-image \ --os ubuntu-1604
资源清理
存储在 Cloud Storage 上的文件和 Compute Engine 中的映像会产生费用。导入工具会将虚拟磁盘文件导入 Cloud Storage 并创建 Compute Engine 自定义映像。
在确认映像已正确导入并且作为 Compute Engine 实例正确启动后,您就可以从 Cloud Storage 中删除虚拟磁盘文件。该工具会在将文件上传到 Cloud Storage 时输出该文件的 URI。此 URI 的格式如下:
gs://BUCKET_NAME/tmpimage/IMAGE_NAME
。如果您使用
--data-disk
标志导入了一个映像,然后使用--source-image
标志再次运行import
工具,以将该映像设为可启动映像,则第一个映像仍将存在。如果您不需要该映像,请考虑将其删除。如果您为--image
和--source-image
标志指定相同的映像名称,则系统会自动覆盖该映像,您无需执行进一步清理。后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-11-22。
-