Créer une image de disque persistant à partir d'un fichier ISO


Le support d'installation pour les applications Windows est souvent fourni sous forme de fichier ISO, mais Compute Engine ne permet pas d'exposer un fichier ISO en tant que lecteur DVD virtuel sur une instance de VM.

Pour accéder au contenu du fichier ISO sur une seule VM Windows, vous pouvez effectuer l'une des opérations suivantes :

  • Copiez le fichier ISO sur la VM et installez-le localement. Cette approche fonctionne bien si vous n'avez besoin d'accéder au contenu du fichier ISO que sur une seule instance de VM.

  • Créez un disque persistant à partir du fichier ISO et associez le disque en mode lecture seule à une ou plusieurs instances de VM. Cette approche fonctionne bien si plusieurs VM nécessitent d'accéder au contenu du fichier ISO.

Ce document explique comment créer un disque persistant à partir du fichier ISO et l'associer en mode lecture seule à une ou plusieurs VM.

Avant de commencer

Préparer le fichier ISO

Si le fichier ISO est accessible au public via HTTP, vous n'avez pas besoin de le télécharger au préalable. Pour utiliser un fichier ISO local, vous pouvez l'importer dans Cloud Storage.

URL HTTP

  1. Dans Google Cloud Console, ouvrez Cloud Shell en cliquant sur le bouton Activer Cloud Shell Activez Cloud Shell..

    Accédez à Google Cloud Console.

  2. Créez une variable d'environnement pour l'URL de téléchargement. Vous pouvez utiliser une URL HTTP ou HTTPS, pourvu qu'elle soit accessible de manière anonyme.

    ISO_URL=https://example.com/big.iso
    

Fichier ISO local

  1. Dans la console Google Cloud, créez un bucket Cloud Storage.

    Accédez à Google Cloud Console.

  2. Importez le fichier ISO à l'aide de la console Google Cloud ou de gsutil.

    En fonction de la taille du fichier ISO, l'importation peut prendre plusieurs minutes ou plusieurs heures.

  3. Dans le navigateur de stockage, accédez à l'objet importé.

  4. Sur la page Détails de l'objet, copiez l'URI de l'objet. L'URI commence par gs://.

  5. Ouvrez Cloud Shell en cliquant sur le bouton Activer Cloud Shell Activez Cloud Shell..

    Accédez à Google Cloud Console.

  6. Créez une variable d'environnement pour l'URL de téléchargement. Remplacez URI par l'URI que vous avez copié.

    ISO_URL=URI
    

Créer un disque avec le contenu du fichier ISO

Pour copier le contenu du fichier ISO sur un nouveau disque, créez une VM temporaire, puis créez une image à partir du disque :

  1. Dans Cloud Shell, spécifiez le nom que vous souhaitez attribuer au nouveau disque :

    DISK_NAME=iso
    
  2. Créez un disque sur lequel copier le contenu des fichiers ISO :

    gcloud compute disks create $DISK_NAME \
      --size=10GB \
      --zone=$(gcloud config get-value compute/zone)
    

    Utilisez une taille de disque plus importante si votre fichier ISO dépasse 9 Go.

  3. Créez un script de démarrage pour la VM temporaire. Le script de démarrage effectue les actions suivantes :

    1. Formatage du disque secondaire avec le système de fichiers NTFS.
    2. Téléchargement du fichier ISO à partir de l'URL HTTP ou Cloud Storage que vous avez spécifiée.
    3. Installation du fichier ISO et copie de son contenu sur le disque secondaire.
    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. Création d'une VM qui exécute Windows Server 2019 Core et associez le disque secondaire :

    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
    

    Le démarrage de la VM prend environ deux minutes. Selon la taille du fichier ISO, l'opération de copie du fichier peut prendre entre 5 et 15 minutes. Vous pouvez suivre la progression en exécutant la commande suivante :

    gcloud compute instances tail-serial-port-output iso-copier \
        --zone=$(gcloud config get-value compute/zone)
    
  5. Attendez que la VM ait terminé d'exécuter le script de démarrage :

    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. Arrêtez et supprimez la VM :

    gcloud compute instances delete iso-copier \
        --zone=$(gcloud config get-value compute/zone) \
        --quiet
    

    Notez que le disque secondaire n'est pas supprimé, car il a été installé avec le paramètre auto-delete=no.

Le disque est maintenant prêt à être utilisé. Vous pouvez associer le disque en mode lecture seule à une ou plusieurs instances de VM dans la même zone.

Partager le disque entre plusieurs zones et régions en créant une image

Pour rendre le contenu du fichier ISO disponible dans d'autres zones ou régions, créez une image Compute Engine :

  1. Dans Cloud Shell, créez une image à partir du disque que vous avez créé dans la section précédente :

    gcloud compute images create $DISK_NAME \
        --source-disk=$DISK_NAME \
        --source-disk-zone=$(gcloud config get-value compute/zone)
    

Effectuer un nettoyage

Pour éviter des frais supplémentaires une fois ce processus terminé, vous pouvez supprimer les ressources que vous avez créées :

  1. Supprimez le disque :

    gcloud compute disks delete $DISK_NAME \
        --zone=$(gcloud config get-value compute/zone) \
        --quiet
    
  2. Supprimez l'image :

    gcloud compute images delete $DISK_NAME
    

Étape suivante