I supporti di installazione per le applicazioni Windows sono spesso forniti come file ISO, ma Compute Engine non consente di esporre un file ISO come unità DVD virtuale su un'istanza VM.
Per accedere ai contenuti del file ISO su una singola VM Windows, puoi:
Copia il file ISO sulla VM e montalo in locale. Questo approccio è ideale se devi accedere solo ai contenuti del file ISO su una singola istanza VM.
Crea un disco permanente dal file ISO e collegalo in modalità di sola lettura a una o più istanze VM. Questo approccio funziona bene se più VM devono accedere ai contenuti del file ISO.
Questo documento descrive come creare un disco permanente dal file ISO e collegarlo in modalità di sola lettura a una o più VM.
Prima di iniziare
- Se vuoi utilizzare gli esempi a riga di comando in questa guida:
- Installa o aggiorna l'ultima versione di Google Cloud CLI.
- Imposta una regione e una zona predefinite.
Prepara il file ISO
Se il file ISO è disponibile pubblicamente tramite HTTP, non è necessario scaricare prima il file ISO. Per utilizzare un file ISO locale, puoi caricarlo in Cloud Storage.
URL HTTP
In Google Cloud Console, apri Cloud Shell facendo clic sul pulsante Attiva Cloud Shell .
Crea una variabile di ambiente per l'URL di download. L'URL può essere un URL HTTP o HTTPS, ma deve essere accessibile in forma anonima.
ISO_URL=https://example.com/big.iso
File ISO locale
In Google Cloud Console, crea un bucket Cloud Storage.
Carica il file ISO utilizzando Google Cloud Console o
gsutil
.A seconda delle dimensioni del file ISO, il caricamento può richiedere diversi minuti o ore.
Nel browser Storage, vai all'oggetto caricato.
Nella pagina Dettagli oggetto, copia l'URI dell'oggetto. L'URI inizia con
gs://
.Apri Cloud Shell facendo clic sul pulsante Attiva Cloud Shell .
Crea una variabile di ambiente per l'URL di download. Sostituisci
URI
con l'URI che hai copiato.ISO_URL=URI
Crea un disco con i contenuti del file ISO
Per copiare i contenuti del file ISO su un nuovo disco, crea una VM temporanea, quindi crea un'immagine dal disco:
Da Cloud Shell, specifica il nome che vuoi assegnare al nuovo disco:
DISK_NAME=iso
Crea un nuovo disco in cui copiare i contenuti dei file ISO:
gcloud compute disks create $DISK_NAME \ --size=10GB \ --zone=$(gcloud config get-value compute/zone)
Utilizza un disco di dimensioni maggiori se il file ISO supera i 9 GB.
Crea uno script di avvio per la VM temporanea. Lo script di avvio esegue le seguenti azioni:
- Formatta il disco secondario con il file system NTFS.
- Scarica il file ISO dall'URL HTTP o Cloud Storage specificato.
- Monta il file ISO e copiane il contenuto sul disco secondario.
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
Crea una VM che esegue Windows Server 2019 Core e collega il disco secondario:
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
L'avvio della VM richiede circa due minuti. A seconda delle dimensioni del file ISO, potrebbero essere necessari altri 5-15 minuti per il completamento dell'operazione di copia dei file. Puoi osservare l'avanzamento eseguendo questo comando:
gcloud compute instances tail-serial-port-output iso-copier \ --zone=$(gcloud config get-value compute/zone)
Attendi che la VM completi l'esecuzione dello script di avvio:
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
Arresta ed elimina la VM:
gcloud compute instances delete iso-copier \ --zone=$(gcloud config get-value compute/zone) \ --quiet
Tieni presente che il disco secondario non viene eliminato perché è stato montato con il parametro
auto-delete=no
.
Il disco è pronto per essere utilizzato. Puoi collegare il disco in modalità di sola lettura a una o più istanze VM all'interno della stessa zona.
Condividi il disco tra zone e aree geografiche creando un'immagine
Per rendere disponibili i contenuti del file ISO in altre zone o aree geografiche, crea un'immagine Compute Engine:
Da Cloud Shell, crea un'immagine dal disco che hai creato nella sezione precedente:
gcloud compute images create $DISK_NAME \ --source-disk=$DISK_NAME \ --source-disk-zone=$(gcloud config get-value compute/zone)
Esegui la pulizia
Per evitare che ti vengano addebitati ulteriori costi dopo aver completato questa procedura, puoi eliminare le risorse che hai creato:
Elimina il disco:
gcloud compute disks delete $DISK_NAME \ --zone=$(gcloud config get-value compute/zone) \ --quiet
Elimina l'immagine:
gcloud compute images delete $DISK_NAME
Passaggi successivi
Scopri come creare, eliminare e ritirare immagini personalizzate.
Scopri come gestire l'accesso alle immagini personalizzate.
Scopri di più sui carichi di lavoro Windows su Compute Engine.