Crea immagini macchina

Utilizza un'immagine macchina per archiviare tutte le configurazioni, i metadati, le autorizzazioni e i dati provenienti da più dischi per un'istanza Compute Engine. L'istanza che utilizzi per creare un'immagine macchina è detta istanza di origine.

Per informazioni su come e quando utilizzare le immagini macchina, vedi l'apposita sezione.

Questo documento descrive i passaggi per creare un'immagine macchina da un'istanza di origine.

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione verifica la tua identità per l'accesso ad API e servizi Google Cloud . Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    Seleziona la scheda relativa a come prevedi di utilizzare gli esempi in questa pagina:

    Console

    Quando utilizzi la console Google Cloud per accedere ai servizi Google Cloud e alle API, non devi configurare l'autenticazione.

    gcloud

    1. Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il comando seguente:

      gcloud init

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  • Imposta una regione e una zona predefinite.
  • REST

    Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.

      Installa Google Cloud CLI.

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

    Per saperne di più, consulta Autenticati per usare REST nella documentazione sull'autenticazione di Google Cloud .

Limitazioni e restrizioni

  • Puoi creare un'immagine macchina di un'istanza specifica al massimo 6 volte ogni 60 minuti.
  • Puoi proteggere un'immagine macchina utilizzando Cloud Key Management Service (Cloud KMS) o una chiave di crittografia fornita dal cliente (CSEK). La chiave di crittografia protegge i contenuti dei dischi. Tuttavia, i metadati non sono protetti.
  • Se utilizzi una CSEK per proteggere l'immagine macchina, una copia completa di tutti i dati del disco viene archiviata durante la generazione dell'immagine macchina. In tutti gli altri scenari, i dati del disco vengono archiviati in copie differenziali.
  • Non puoi creare immagini macchina da istanze Compute Engine di origine che:

    • Hanno dischi collegati con una capacità combinata superiore a 200 TiB.
    • non hanno alcun disco collegato;
    • hanno volumi Hyperdisk collegati;
    • Utilizza il tipo di macchina Z3, ad eccezione di z3-highmem-192-highlssd-metal.
    • utilizzano un tipo di macchina C3D, H3 o A3.

    Per le istanze che non supportano la creazione di immagini macchina, puoi creare un'immagine del sistema operativo dal disco di avvio dell'istanza, come descritto in Creare immagini personalizzate.

  • Non puoi specificare i dischi da includere e quelli da escludere contemporaneamente.

Proprietà di istanze e dischi non supportate dall'immagine macchina

Quando crei immagini macchina da istanze o viceversa, le seguenti proprietà di istanze e dischi non vengono conservate o ripristinate:

  • disks.architecture
  • disks.description
  • disks.labels
  • disks.locked
  • disks.multiWriter
  • disks.onUpdateAction
  • disks.provisionedIops
  • disks.shieldedInstanceInitialState
  • disks.sourceImage
  • disks.sourceImageEncryptionKey
  • disks.sourceInstantSnapshot
  • disks.sourceSnapshot
  • disks.sourceSnapshotEncryptionKey
  • privateIpv6GoogleAccess
  • resourceManagerTags
  • resourcePolicies
  • secure_tag
  • shieldedInstanceConfig

Crea un'immagine macchina da un'istanza

Per impostazione predefinita, un'immagine macchina include il disco di avvio e tutti gli altri dischi collegati all'istanza Compute Engine di origine. Facoltativamente, puoi specificare quali dischi non di avvio includere o escludere, ma non puoi escludere il disco di avvio.

Crea un'immagine macchina da un'istanza e includi tutti i dischi collegati

Puoi creare immagini macchina utilizzando la consoleGoogle Cloud , Google Cloud CLI o REST.

Per creare un'immagine macchina, sono necessarie le seguenti informazioni:

  • Un nome per l'immagine macchina che vuoi creare
  • Il nome dell'istanza di origine.
  • La zona in cui si trova l'istanza di origine.
  • Una descrizione facoltativa
  • Una storageLocation facoltativa. Se non specifichi una località, la località di archiviazione predefinita è la località Cloud Storage multiregionale dell'istanza di origine.
  • Una chiave di crittografia facoltativa. Puoi scegliere tra una chiave Google-owned and Google-managed encryption key, una chiave Cloud Key Management Service (Cloud KMS) o una chiave di crittografia fornita dal cliente (CSEK). Se non viene specificata alcuna chiave di crittografia, le immagini macchina vengono criptate utilizzando Google-owned and Google-managed encryption key.
  • Se vuoi utilizzare un'immagine macchina per la clonazione e gli snapshot delle istanze, prima di generare l'immagine macchina da un'istanza, rimuovi tutte le informazioni sulle app e sul sistema operativo univoche relative a quell'istanza. Ad esempio, per le istanze VM Windows, utilizza GCESysprep per preparare il sistema a eseguire una replica.

Console

  1. Nella console Google Cloud vai alla pagina Immagini macchina.

    Vai a Immagini macchina

  2. Fai clic su Crea immagine macchina.

  3. Specifica un nome per l'immagine macchina.

  4. Facoltativo: fornisci una descrizione.

  5. Seleziona l'istanza VM di origine.

  6. Facoltativo: specifica dove archiviare l'immagine macchina. Scegli tra lo spazio di archiviazione multiregionale o regionale. Per saperne di più sulla località, consulta Località di archiviazione delle immagini macchina.

  7. Facoltativo: seleziona un metodo di crittografia.

  8. Fai clic su Crea.

gcloud

Utilizza il comando gcloud compute machine-images create per creare un'immagine macchina da un'istanza.

gcloud compute machine-images create MACHINE_IMAGE_NAME \
    --source-instance=SOURCE_INSTANCE_NAME

Sostituisci quanto segue:

  • MACHINE_IMAGE_NAME: il nome dell'immagine della macchina che vuoi creare
  • SOURCE_INSTANCE_NAME: il nome dell'istanza di origine da cui vuoi creare l'immagine.

Esempio

Ad esempio, puoi utilizzare il comando gcloud per creare un'immagine macchina denominata my-machine-image da un'istanza di origine nota come my-instance:

gcloud compute machine-images create my-machine-image  \
    --source-instance=my-instance

Il processo richiede alcuni minuti. Quando viene creata l'immagine macchina, viene visualizzato un output simile al seguente:

Created [https://www.googleapis.com/compute/v1/projects/project-12345/global/machineImages/my-machine-image].
NAME               STATUS
my-machine-image   READY

REST

Nell'API, crea una richiesta POST al metodo machineimages.insert. Nel corpo, includi la richiesta POST:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/machineImages

{
  "name": "MACHINE_IMAGE_NAME",
  "sourceInstance": "SOURCE_INSTANCE_URL"
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto
  • MACHINE_IMAGE_NAME: il nome dell'immagine della macchina che vuoi creare
  • SOURCE_INSTANCE_URL: l'URL completo o parziale dell'istanza di origine che vuoi utilizzare per creare l'immagine macchina. Ad esempio, se hai un'istanza di origine denominata my-instance in un progetto noto come myProject. I seguenti URL sono validi:

    • https://www.googleapis.com/compute/v1/projects/myProject/global/instances/my-instance
    • projects/myProject/global/instances/my-instance
    • global/instances/my-instance

Crea un'immagine della macchina e includi dischi specifici (anteprima)

Puoi utilizzare il backup selettivo del disco per creare un'immagine della macchina che include o esclude dischi non di avvio specifici.

I backup selettivi dei dischi ti consentono di eseguire le seguenti attività durante la creazione di un'immagine macchina:

  • Includi dischi non di avvio specifici: puoi creare un'immagine della macchina che esegue il backup solo del disco di avvio e di un elenco specifico di dischi non di avvio che fornisci.

  • Escludi dischi non di avvio specifici: puoi creare un'immagine macchina che esegue il backup del disco di avvio e di tutti i dischi non di avvio collegati ad eccezione di quelli specificati in un elenco di esclusione.

Best practice per le istanze Linux

Per le istanze Linux, consigliamo le seguenti best practice:

  • Quando crei un'immagine macchina che esclude dischi non di avvio specifici o li omette utilizzando un elenco di inclusione, assicurati che il file /etc/fstab nelle istanze Compute Engine di origine Linux utilizzi l'opzione nofail per questi dischi. In questo modo si impedisce l'avvio dell'istanza Compute Engine ripristinata se manca un disco previsto.

  • Durante il processo di avvio di un'istanza Compute Engine ripristinata da un'immagine macchina, il sistema operativo tenta di montare tutti i dischi elencati in /etc/fstab. Se manca un disco previsto e l'opzione nofail non è specificata, il processo di avvio si interrompe e l'istanza non è avviabile. Per una soluzione alternativa alla gestione degli errori di avvio, consulta Soluzioni alternative per gli errori di avvio causati dall'esclusione di dischi specifici.

Includi solo dischi specifici

Utilizza le seguenti istruzioni per creare un'immagine macchina solo da dischi specifici. Devi sempre includere il disco di avvio. Non puoi creare un'immagine macchina solo da dischi specifici utilizzando la console Google Cloud . Devi utilizzare Google Cloud CLI o REST.

Google Cloud CLI

Utilizza il comando gcloud beta compute machine-images create per creare un'immagine macchina solo da dischi specifici.

gcloud beta compute machine-images create MACHINE_IMAGE_NAME \
    --source-instance=SOURCE_INSTANCE_NAME \
    --source-instance-zone=ZONE \
    --include-disks=BOOT_DISK,DISK_NAME_1,DISK_NAME_2

Sostituisci quanto segue:

  • MACHINE_IMAGE_NAME: il nome dell'immagine della macchina che vuoi creare.
  • SOURCE_INSTANCE_NAME: il nome dell'istanza di origine da cui vuoi creare l'immagine.
  • ZONE: la zona in cui si trova l'istanza di origine.
  • BOOT_DISK, DISK_NAME_1,DISK_NAME_2: un elenco separato da virgole del disco di avvio e dei dischi non di avvio collegati all'istanza di origine che vuoi includere nell'immagine macchina.

Ad esempio, puoi utilizzare il seguente comando gcloud per creare un'immagine macchina denominata my-gmi-include da un'istanza di origine denominata my-instance che si trova in us-central1-a, includendo solo data-disk-1 e data-disk-2:

gcloud beta compute machine-images create my-gmi-include \
    --source-instance=my-instance \
    --source-instance-zone=us-central1-a \
    --include-disks=boot-disk,data-disk-1,data-disk-2

REST

Nell'API, crea una richiesta POST al metodo machineimages.insert. Nel corpo, includi la richiesta POST:

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/machineImages

{
  "name": "MACHINE_IMAGE_NAME",
  "sourceInstance": "SOURCE_INSTANCE_URL",
  "params": {
    "includedDisks": ["BOOT_DISK", "DISK_NAME_1", "DISK_NAME_2"]
  }
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto contenente l'immagine macchina, ad esempio my-project.
  • MACHINE_IMAGE_NAME: il nome dell'immagine della macchina che vuoi creare
  • SOURCE_INSTANCE_URL: l'URL completo o parziale dell'istanza di origine che vuoi utilizzare per creare l'immagine macchina.
  • BOOT_DISK, DISK_NAME_1, DISK_NAME_2: elenco del disco di avvio e dei dischi non di avvio collegati all'istanza di origine che vuoi includere nell'immagine della macchina.

Crea un'immagine macchina ed escludi dischi specifici (anteprima)

Segui queste istruzioni per creare un'immagine macchina ed escludere dischi specifici dal backup. Non puoi escludere il disco di avvio. Non puoi creare un'immagine macchina ed escludere dischi specifici utilizzando la console Google Cloud . Puoi utilizzare Google Cloud CLI o REST.

gcloud

Utilizza il comando gcloud beta compute machine-images create per creare un'immagine macchina ed escludere dischi specifici.

gcloud beta compute machine-images create MACHINE_IMAGE_NAME \
    --source-instance=SOURCE_INSTANCE_NAME \
    --source-instance-zone=ZONE \
    --exclude-disks=DISK_NAME_1,DISK_NAME_2

Sostituisci quanto segue:

  • MACHINE_IMAGE_NAME: il nome dell'immagine della macchina che vuoi creare
  • SOURCE_INSTANCE_NAME: il nome dell'istanza di origine da cui vuoi creare l'immagine.
  • ZONE: la zona in cui si trova l'istanza di origine.
  • DISK_NAME_1,DISK_NAME_2: elenco separato da virgole dei dischi non di avvio collegati all'istanza di origine che vuoi escludere dall'immagine macchina.

Esempio

Ad esempio, puoi utilizzare il seguente comando gcloud per creare un'immagine macchina denominata my-gmi-exclude da un'istanza di origine denominata my-instance che si trova in us-central1-a, escludendo temp-disk-1 e scratch-disk:

 gcloud beta compute machine-images create my-gmi-exclude \
    --source-instance=my-instance \
    --source-instance-zone=us-central1-a \
    --exclude-disks=temp-disk-1,scratch-disk

REST

Nell'API, crea una richiesta POST al metodo machineimages.insert. Nel corpo, includi la richiesta POST:

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/machineImages

{
  "name": "MACHINE_IMAGE_NAME",
  "sourceInstance": "SOURCE_INSTANCE_URL",
  "params": {
    "excludedDisks": ["DISK_NAME_1", "DISK_NAME_2"]
  }
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto contenente l'immagine macchina.
  • MACHINE_IMAGE_NAME: il nome dell'immagine della macchina che vuoi creare
  • SOURCE_INSTANCE_URL: l'URL completo o parziale dell'istanza di origine che vuoi utilizzare per creare l'immagine macchina.
  • DISK_NAME_1, DISK_NAME_2: elenco dei dischi non di avvio collegati all'istanza di origine che vuoi escludere dall'immagine macchina.

Soluzioni alternative per gli errori di avvio causati dall'esclusione di dischi specifici

Se crei un'istanza da un'immagine della macchina in cui un disco escluso causa un errore di avvio, puoi recuperare l'istanza utilizzando una delle seguenti soluzioni alternative:

  • Connettiti alla console seriale: attiva e connettiti alla console seriale interattiva dell'istanza Compute Engine non avviabile. Accedi per risolvere il problema e modifica direttamente il file /etc/fstab per rimuovere la voce del disco mancante o aggiungere l'opzione nofail.

  • Scambio di dischi: se un'istanza Compute Engine non si avvia perché un disco è stato escluso dall'immagine della macchina, ma è ancora elencato in /etc/fstab senza l'opzione nofail, utilizza le seguenti istruzioni per riparare la configurazione utilizzando Google Cloud CLI.

    1. Arresta l'istanza Compute Engine non avviabile utilizzando il comando gcloud compute instances stop:

      gcloud compute instances stop UNBOOTABLE_INSTANCE_NAME \
       --zone=ZONE
      

      Sostituisci quanto segue:

      • UNBOOTABLE_INSTANCE_NAME: nome dell'istanza Compute Engine non avviabile.
      • ZONE: la zona in cui si trovano le istanze Compute Engine.
    2. Scollega il disco di avvio utilizzando il comando gcloud compute instances detach-disk:

      gcloud compute instances detach-disk UNBOOTABLE_INSTANCE_NAME \
       --disk=BOOT_DISK_NAME \
       --zone=ZONE
      

      Sostituisci quanto segue:

      • UNBOOTABLE_INSTANCE_NAME: nome dell'istanza Compute Engine non avviabile.
      • BOOT_DISK_NAME: il nome del disco di avvio collegato all'istanza Compute Engine non avviabile.
      • ZONE: la zona in cui si trovano le istanze Compute Engine.
    3. Collega il disco come disco secondario a un'altra istanza di Compute Engine funzionante utilizzando il comando gcloud compute instances attach-disk:

      gcloud compute instances attach-disk SECONDARY_INSTANCE_NAME \
       --disk=BOOT_DISK_NAME \
       --zone=ZONE
      

      Sostituisci quanto segue:

      • SECONDARY_INSTANCE_NAME: il nome dell'istanza di Compute Engine secondaria funzionante utilizzata per riparare il disco.
      • BOOT_DISK_NAME: il nome del disco di avvio collegato all'istanza Compute Engine non avviabile.
      • ZONE: la zona in cui si trovano le istanze Compute Engine.
    4. Monta il disco e modifica il relativo file /etc/fstab per correggere la voce problematica utilizzando la seguente sequenza di istruzioni:

      1. Connettiti all'istanza Compute Engine secondaria utilizzando SSH:

        gcloud compute ssh SECONDARY_INSTANCE_NAME \
        --zone=ZONE
        

        Sostituisci quanto segue:

        • SECONDARY_INSTANCE_NAME: il nome dell'istanza di Compute Engine secondaria funzionante utilizzata per riparare il disco.
        • ZONE: la zona in cui si trovano le istanze Compute Engine.
      2. Identifica il disco collegato, di solito /dev/sdb o simile, utilizzando lsblk:

        lsblk
        
      3. Crea un punto di montaggio temporaneo:

        sudo mkdir /mnt/repair
        
      4. Monta la partizione root:

        sudo mount /dev/DEVICE_PARTITION /mnt/repair
        

        Sostituisci DEVICE_PARTITION con il nome del dispositivo e il numero di partizione del disco secondario collegato all'istanza Compute Engine secondaria (ad esempio, sdb1).

      5. Apri il file fstab:

        sudo nano /mnt/repair/etc/fstab
        
      6. Aggiungi l'opzione nofail alla voce del disco mancante o commenta l'intera riga aggiungendo # all'inizio.

      7. Salva ed esci.

      8. Smonta il disco:

        sudo umount /mnt/repair
        
    5. Scollega il disco dall'istanza Compute Engine secondaria utilizzando il comando gcloud compute instances detach-disk:

      gcloud compute instances detach-disk SECONDARY_INSTANCE_NAME \
       --disk=BOOT_DISK_NAME \
       --zone=ZONE
      

      Sostituisci quanto segue:

      • SECONDARY_INSTANCE_NAME: nome dell'istanza Compute Engine secondaria funzionante utilizzata per riparare il disco.
      • BOOT_DISK_NAME: il nome del disco di avvio collegato all'istanza Compute Engine non avviabile.
      • ZONE: la zona in cui si trovano le istanze Compute Engine.
    6. Ricollega il disco come disco di avvio all'istanza Compute Engine originale utilizzando il comando gcloud compute instances attach-disk:

      gcloud compute instances attach-disk UNBOOTABLE_INSTANCE_NAME \
       --disk=BOOT_DISK_NAME \
       --boot \
       --zone=ZONE
      

      Sostituisci quanto segue:

      • UNBOOTABLE_INSTANCE_NAME: nome dell'istanza Compute Engine non avviabile.
      • BOOT_DISK_NAME: il nome del disco di avvio collegato all'istanza Compute Engine non avviabile.
      • ZONE: la zona in cui si trovano le istanze Compute Engine.
    7. Avvia l'istanza Compute Engine riparata:

      gcloud compute instances start UNBOOTABLE_INSTANCE_NAME \
       --zone=ZONE
      

      Sostituisci quanto segue:

      • UNBOOTABLE_INSTANCE_NAME: nome dell'istanza Compute Engine non avviabile.
      • ZONE: la zona in cui si trovano le istanze Compute Engine.

Passaggi successivi