Nichtflüchtiges Speicher-Image aus einer ISO-Datei erstellen


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

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

  1. Öffnen Sie Cloud Shell in der Google Cloud Console. Klicken Sie hierzu auf die Schaltfläche Cloud Shell aktivieren Aktivieren Sie Cloud Shell..

    Weiter zur Google Cloud Console

  2. 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

  1. Erstellen Sie einen Cloud Storage-Bucket in der Google Cloud Console.

    Weiter zur Google Cloud Console

  2. 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.

  3. Rufen Sie im Storage-Browser das hochgeladene Objekt auf.

  4. Kopieren Sie auf der Seite Objektdetails den URI des Objekts. Der URI beginnt mit gs://.

  5. Öffnen Sie Cloud Shell. Klicken Sie hierzu auf die Schaltfläche Cloud Shell aktivieren Aktivieren Sie Cloud Shell..

    Weiter zur Google Cloud Console

  6. 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:

  1. Geben Sie in Cloud Shell den Namen ein, den Sie dem neuen Laufwerk zuweisen möchten:

    DISK_NAME=iso
    
  2. 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.

  3. Erstellen Sie ein Startskript für die temporäre VM. Das Startskript führt die folgenden Aktionen aus:

    1. Formatieren Sie das sekundäre Laufwerk mit dem NTFS-Dateisystem.
    2. Laden Sie die ISO-Datei von der angegebenen HTTP- oder Cloud Storage-URL herunter.
    3. 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
    
  4. 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)
    
  5. 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
    
  6. 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:

  1. 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:

  1. Löschen Sie das Laufwerk:

    gcloud compute disks delete $DISK_NAME \
        --zone=$(gcloud config get-value compute/zone) \
        --quiet
    
  2. Löschen Sie das Image:

    gcloud compute images delete $DISK_NAME
    

Nächste Schritte