Windows 应用的安装媒体通常以 ISO 文件的形式提供,但 Compute Engine 不允许将 ISO 文件作为虚拟 DVD 驱动器公开给虚拟机实例。
如需在单个 Windows 虚拟机上访问 ISO 文件的内容,您可以执行以下操作之一:
- 将 ISO 文件复制到该虚拟机并将其装载到本地。如果您只需要在单个虚拟机实例上访问 ISO 文件的内容,则此方法非常适用。 
- 通过 ISO 文件创建一个永久性磁盘,然后以只读模式将该磁盘挂接到一个或多个虚拟机实例上。如果有多个虚拟机需要访问 ISO 文件的内容,则此方法非常适用。 
本文档介绍如何通过 ISO 文件创建永久性磁盘,并以只读模式将该磁盘挂接到一个或多个虚拟机上。
准备工作
- 
  
  如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
  
   
   
     
   
  
   
   
     
   
  
   
   
     
   
  
 
 
 
  
    
      Select the tab for how you plan to use the samples on this page: ConsoleWhen you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication. gcloud- 
 
 
  
  
   
   
  
   
   
  
   
   
     
   
  
  
   
   
  
   
   
  
   
   
  
 
 
   
   
      安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI: gcloud init如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。 
- Set a default region and zone.
 准备 ISO 文件如果 ISO 文件已通过 HTTP 公开提供,则您无需先下载 ISO 文件。如需使用本地 ISO 文件,您可以将此 ISO 文件上传到 Cloud Storage。 HTTP 网址- 在 Google Cloud 控制台中,点击激活 Cloud Shell - 按钮,以打开 Cloud Shell。 
- 为下载网址创建一个环境变量。该网址可以是 HTTP 或 HTTPS 网址,但必须可匿名访问。 - ISO_URL=https://example.com/big.iso 
 本地 ISO 文件- 在 Google Cloud 控制台中,创建一个 Cloud Storage 存储桶。 
- 
上传过程可能需要几分钟或几小时才能完成,具体取决于 ISO 文件的大小。 
- 在 Storage 浏览器中,导航到已上传的对象。 
- 在对象详情页面上,复制该对象的 URI。该 URI 以 - gs://开头。
- 点击激活 Cloud Shell - 按钮,打开 Cloud Shell。 
- 为下载网址创建一个环境变量。将 - URI替换为您复制的 URI。- ISO_URL=URI 
 创建包含 ISO 文件内容的磁盘如需将 ISO 文件的内容复制到新的磁盘,请先创建一个临时虚拟机,然后根据该磁盘创建映像: - 在 Cloud Shell 中,指定要分配给新磁盘的名称: - DISK_NAME=iso
- 创建一个新磁盘,以将 ISO 文件的内容复制到其中: - gcloud compute disks create $DISK_NAME \ --size=10GB \ --zone=$(gcloud config get-value compute/zone) - 如果您的 ISO 文件超过 9 GB,请使用较大的磁盘。 
- 为临时虚拟机创建启动脚本。该启动脚本会执行以下操作: - 使用 NTFS 文件系统格式化辅助磁盘。
- 从您指定的 HTTP 或 Cloud Storage 网址下载 ISO 文件。
- 装载 ISO 文件并将其内容复制到辅助磁盘。
 - cat << "EOF" > startup.ps1 $DownloadDirectory = 'c:\download\' $ErrorActionPreference = 'Stop' $MetadataUrl = 'http://metadata.google.internal/computeMetadata/v1/instance' $DownloadUrl = (Invoke-RestMethod ` -Headers @{"Metadata-Flavor" = "Google"} ` -Uri "$MetadataUrl/attributes/iso") mkdir $DownloadDirectory\Source -Force Write-Host '== Formatting secondary disk... ===' -ForegroundColor Black -BackgroundColor Yellow Set-Disk -Number 1 -IsOffline $false Clear-Disk -Number 1 -RemoveData -Confirm:$false -ErrorAction SilentlyContinue Initialize-Disk -Number 1 -PartitionStyle MBR New-Partition -DiskNumber 1 -UseMaximumSize -DriveLetter D -IsActive | Format-Volume -FileSystem 'NTFS' -Confirm:$false Write-Host '== Downloading ISO... =============' -ForegroundColor Black -BackgroundColor Yellow if ($DownloadUrl.StartsWith('gs:')) { & gcloud storage cp $DownloadUrl "$DownloadDirectory\Source\image.iso" | Out-Default } else { Import-Module BitsTransfer Start-BitsTransfer -Source $DownloadUrl -Destination "$DownloadDirectory\Source\image.iso" } Write-Host '== Mounting ISO... ================' -ForegroundColor Black -BackgroundColor Yellow Mount-DiskImage -ImagePath "$DownloadDirectory\Source\image.iso" -StorageType ISO Write-Host '== Copying ISO contents... ========' -ForegroundColor Black -BackgroundColor Yellow Copy-Item 'e:\*' 'd:\' -Force -Recurse -PassThru ` | Where-Object { -Not $_.PSIsContainer } ` | Set-ItemProperty -Name IsReadOnly -Value $False Write-Host '== Completed. =====================' -ForegroundColor Black -BackgroundColor Yellow Invoke-RestMethod ` -Headers @{'Metadata-Flavor'='Google'} ` -Method PUT ` -Uri "$MetadataUrl/guest-attributes/vm/ready" ` -Body true EOF
- 创建一个使用您之前创建的启动脚本和磁盘的 Windows Server 2019 虚拟机: - gcloud compute instances create iso-copier \ --machine-type=n1-standard-2 \ --image-family=windows-2019-core \ --image-project=windows-cloud \ --disk=name=$DISK_NAME,auto-delete=no \ --metadata=enable-guest-attributes=true,iso=$ISO_URL \ --metadata-from-file=windows-startup-script-ps1=startup.ps1 \ --scopes=https://www.googleapis.com/auth/devstorage.read_only- 虚拟机大约需要 2 分钟才能启动。根据 ISO 文件的大小,文件复制操作可能需要 5 至 15 分钟时间才能完成。您可以通过运行以下命令来观察进度: - gcloud compute instances tail-serial-port-output iso-copier \ --zone=$(gcloud config get-value compute/zone)
- 等待虚拟机完成启动脚本的运行: - until gcloud compute instances get-guest-attributes iso-copier \ --zone=$(gcloud config get-value compute/zone) \ --query-path=vm/ready > /dev/null 2>&1 do sleep 5 && echo waiting for VM to finish... done
- 关闭并删除虚拟机: - gcloud compute instances delete iso-copier \ --zone=$(gcloud config get-value compute/zone) \ --quiet- 请注意,辅助磁盘并未删除,因为它是通过 - auto-delete=no参数装载的。
 该磁盘现已可供使用。您可以在只读模式下将该磁盘挂接到同一可用区内的一个或多个虚拟机实例。 通过创建映像跨地区和区域共享磁盘如需在其他地区或区域中提供 ISO 文件的内容,请创建 Compute Engine 映像: - 在 Cloud Shell 中,根据您在上一部分中创建的磁盘创建映像: - gcloud compute images create $DISK_NAME \ --source-disk=$DISK_NAME \ --source-disk-zone=$(gcloud config get-value compute/zone)
 清理为避免在完成此过程后产生额外的费用,您可以删除已创建的资源: - 删除磁盘: - gcloud compute disks delete $DISK_NAME \ --zone=$(gcloud config get-value compute/zone) \ --quiet
- 删除映像: - gcloud compute images delete $DISK_NAME 
 后续步骤- 了解如何创建自定义映像。 
- 了解如何管理对自定义映像的访问权限。 
 如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。 最后更新时间 (UTC):2025-10-19。 -