I supporti di installazione per le applicazioni Windows vengono spesso forniti come file ISO, ma Compute Engine non ti consente di esporre un file ISO come unità DVD virtuale a un'istanza VM.
Per accedere ai contenuti del file ISO su una singola VM Windows, puoi svolgere una delle seguenti operazioni:
Copia il file ISO nella VM e montalo localmente. Questo approccio funziona bene se devi solo accedere 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 non l'hai ancora fatto, configura l'autenticazione.
L'autenticazione è il processo mediante il quale la tua identità viene verificata per l'accesso a servizi e API. Google Cloud
Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:
Select the tab for how you plan to use the samples on this page:
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
-
Prepara il file ISO
Se il file ISO è disponibile pubblicamente tramite HTTP, non è necessario scaricarlo prima. Per utilizzare un file ISO locale, puoi caricarlo su Cloud Storage.
Nella console Google Cloud, 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 modo anonimo.
ISO_URL=https://example.com/big.iso
Nella console Google Cloud, crea un bucket Cloud Storage.
-
A seconda delle dimensioni del file ISO, il caricamento può richiedere diversi minuti o ore.
Nel browser di archiviazione, 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 contenente 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 da assegnare al nuovo disco:
DISK_NAME=iso
Crea un nuovo disco su cui copiare i contenuti dei file ISO:
gcloud compute disks create $DISK_NAME \ --size=10GB \ --zone=$(gcloud config get-value compute/zone)
Utilizza una dimensione del disco maggiore 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 i contenuti 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:')) { & 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
Crea una VM Windows Server 2019 che utilizzi lo script di avvio e il disco che hai creato in precedenza:
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 2 minuti. A seconda delle dimensioni del file ISO, potrebbero essere necessari altri 5-15 minuti per il completamento dell'operazione di copia del file. Puoi osservare l'avanzamento eseguendo il seguente comando:
gcloud compute instances tail-serial-port-output iso-copier \ --zone=$(gcloud config get-value compute/zone)
Attendi che la VM finisca di eseguire lo 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 è ora 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 regioni creando un'immagine
Per rendere disponibili i contenuti del file ISO in altre zone o regioni, crea un'immagine Compute Engine:
Da Cloud Shell, crea un'immagine dal disco 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 di incorrere in 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 immagini personalizzate.
Scopri come gestire l'accesso alle immagini personalizzate.
Scopri di più sui carichi di lavoro Windows su Compute Engine.