Installationsmedien für Windows-Anwendungen werden häufig als ISO-Datei bereitgestellt. In Compute Engine können Sie aber eine ISO-Datei nicht als virtuelles DVD-Laufwerk für eine VM-Instanz bereitstellen.
So können Sie auf den Inhalt der ISO-Datei auf einer einzelnen Windows-VM zugreifen:
Kopieren Sie die ISO-Datei auf die VM und stellen Sie sie lokal bereit. Dieser Ansatz eignet sich gut, wenn Sie nur auf den Inhalt der ISO-Datei auf einer einzelnen VM-Instanz zugreifen müssen.
Erstellen Sie aus der ISO-Datei einen nichtflüchtigen Speicher und hängen Sie das Laufwerk im Lesemodus an eine oder mehrere VM-Instanzen an. Dieser Ansatz eignet sich gut, wenn mehrere VMs Zugriff auf den Inhalt der ISO-Datei benötigen.
In diesem Dokument wird beschrieben, wie Sie einen nichtflüchtigen Speicher aus der ISO-Datei erstellen und das Laufwerk im Lesemodus an eine oder mehrere VMs anhängen.
Hinweis
- Wenn Sie die Befehlszeilenbeispiele in dieser Anleitung verwenden möchten, gehen Sie so vor:
- Installieren Sie die Google Cloud CLI oder aktualisieren Sie sie auf die neueste Version.
- Legen Sie eine Standardregion und -zone fest.
ISO-Datei vorbereiten
Wenn die ISO-Datei öffentlich über HTTP verfügbar ist, müssen Sie sie nicht zuerst herunterladen. Wenn Sie eine lokale ISO-Datei verwenden möchten, können Sie die ISO-Datei in Cloud Storage hochladen.
HTTP-URL
Öffnen Sie Cloud Shell in der Google Cloud Console. Klicken Sie hierzu auf die Schaltfläche Cloud Shell aktivieren .
Erstellen Sie eine Umgebungsvariable für die Download-URL. Die URL kann eine HTTP- oder HTTPS-URL sein, muss aber anonym zugänglich sein.
ISO_URL=https://example.com/big.iso
Lokale ISO-Datei
Erstellen Sie einen Cloud Storage-Bucket in der Google Cloud Console.
Laden Sie die ISO-Datei mit der Google Cloud Console oder
gsutil
hoch.Je nach Größe der ISO-Datei kann der Upload einige Minuten oder Stunden dauern.
Rufen Sie im Storage-Browser das hochgeladene Objekt auf.
Kopieren Sie auf der Seite Objektdetails den URI des Objekts. Der URI beginnt mit
gs://
.Öffnen Sie Cloud Shell. Klicken Sie hierzu auf die Schaltfläche Cloud Shell aktivieren .
Erstellen Sie eine Umgebungsvariable für die Download-URL. Ersetzen Sie
URI
durch den kopierten URI.ISO_URL=URI
Laufwerk mit dem Inhalt der ISO-Datei erstellen
Wenn Sie den Inhalt der ISO-Datei auf ein neues Laufwerk kopieren möchten, erstellen Sie erst eine temporäre VM und dann ein Image von dem Laufwerk:
Geben Sie in Cloud Shell den Namen ein, den Sie dem neuen Laufwerk zuweisen möchten:
DISK_NAME=iso
Erstellen Sie ein neues Laufwerk, auf das der Inhalt der ISO-Dateien kopiert werden soll:
gcloud compute disks create $DISK_NAME \ --size=10GB \ --zone=$(gcloud config get-value compute/zone)
Falls Ihre ISO-Datei größer als 9 GB ist, verwenden Sie ein größeres Laufwerk.
Erstellen Sie ein Startskript für die temporäre VM. Das Startskript führt die folgenden Aktionen aus:
- Formatieren Sie das sekundäre Laufwerk mit dem NTFS-Dateisystem.
- Laden Sie die ISO-Datei von der angegebenen HTTP- oder Cloud Storage-URL herunter.
- Stellen Sie die ISO-Datei bereit und kopieren Sie ihren Inhalt auf das sekundäre Laufwerk.
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:')) { & gsutil 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
Erstellen Sie eine VM, auf der Windows Server 2019 Core ausgeführt wird, und hängen Sie das sekundäre Laufwerk an:
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
Der Start der VM dauert etwa zwei Minuten. Je nach Größe der ISO-Datei kann es weitere fünf bis fünfzehn Minuten dauern, bis der Kopiervorgang abgeschlossen ist. Mit dem folgenden Befehl können Sie den Fortschritt beobachten:
gcloud compute instances tail-serial-port-output iso-copier \ --zone=$(gcloud config get-value compute/zone)
Warten Sie, bis die VM das Startskript ausgeführt hat:
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
Fahren Sie die VM herunter und löschen Sie sie:
gcloud compute instances delete iso-copier \ --zone=$(gcloud config get-value compute/zone) \ --quiet
Beachten Sie, dass das sekundäre Laufwerk nicht gelöscht wird, da es mit dem Parameter
auto-delete=no
bereitgestellt wurde.
Das Laufwerk kann jetzt verwendet werden. Sie können das Laufwerk im Lesemodus an eine oder mehrere VM-Instanzen innerhalb derselben Zone anhängen.
Laufwerk für Zonen und Regionen freigeben, indem ein Image erstellt wird
Wenn Sie den Inhalt der ISO-Datei in anderen Zonen oder Regionen verfügbar machen möchten, sollten Sie ein Compute Engine-Image erstellen:
Erstellen Sie in Cloud Shell ein Image von dem Laufwerk, das Sie im vorherigen Abschnitt erstellt haben:
gcloud compute images create $DISK_NAME \ --source-disk=$DISK_NAME \ --source-disk-zone=$(gcloud config get-value compute/zone)
Bereinigen
Damit Ihnen nach Abschluss des Vorgangs keine weiteren Kosten entstehen, können Sie die erstellten Ressourcen löschen:
Löschen Sie das Laufwerk:
gcloud compute disks delete $DISK_NAME \ --zone=$(gcloud config get-value compute/zone) \ --quiet
Löschen Sie das Image:
gcloud compute images delete $DISK_NAME