A disk is either a boot disk that is used to start and run the operating system on a virtual machine (VM) instance or a non-boot disk that a VM uses only for data storage.
You can use snapshots to backup and restore disk data in the following ways:
After you take a snapshot of a boot or non-boot disk, create a new disk based on the snapshot.
After you take a snapshot of a boot disk, create a new VM based on the boot disk snapshot.
After you take a snapshot of a non-boot disk, create a new VM with a new non-boot disk based on the snapshot.
Before you begin
-
If you haven't already, then set up authentication.
Authentication is
the process by which your identity is verified for access to Google Cloud services and APIs.
To run code or samples from a local development environment, you can authenticate to
Compute Engine by selecting one of the following options:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
Go
To use the Go samples on this page in a local development environment, install and initialize the gcloud CLI, and then set up Application Default Credentials with your user credentials.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
For more information, see Set up authentication for a local development environment.
Java
To use the Java samples on this page in a local development environment, install and initialize the gcloud CLI, and then set up Application Default Credentials with your user credentials.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
For more information, see Set up authentication for a local development environment.
Node.js
To use the Node.js samples on this page in a local development environment, install and initialize the gcloud CLI, and then set up Application Default Credentials with your user credentials.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
For more information, see Set up authentication for a local development environment.
Python
To use the Python samples on this page in a local development environment, install and initialize the gcloud CLI, and then set up Application Default Credentials with your user credentials.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
For more information, see Set up authentication for a local development environment.
REST
To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
For more information, see Authenticate for using REST in the Google Cloud authentication documentation.
-
Required roles
To get the permissions that you need to restore from a snapshot,
ask your administrator to grant you the
Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1
) IAM role on the project.
For more information about granting roles, see Manage access to projects, folders, and organizations.
This predefined role contains the permissions required to restore from a snapshot. To see the exact permissions that are required, expand the Required permissions section:
Required permissions
The following permissions are required to restore from a snapshot:
-
To create a disk from a snapshot:
-
compute.disks.create
on the project -
compute.instances.attachDisk
on the VM -
compute.disks.use
on the disk to attach -
compute.snapshots.useReadOnly
,compute.snapshots.create
, orcompute.disks.createSnapshot
on the project
-
-
To create a VM from a boot disk and non-boot disk snapshot:
compute.instances.create
on the project- To use a custom image to create the VM:
compute.images.useReadOnly
on the image - To use a snapshot to create the VM:
compute.snapshots.useReadOnly
on the snapshot - To use an instance template to create the VM:
compute.instanceTemplates.useReadOnly
on the instance template - To assign a legacy network to the VM:
compute.networks.use
on the project - To specify a static IP address for the VM:
compute.addresses.use
on the project - To assign an external IP address to the VM when using a legacy network:
compute.networks.useExternalIp
on the project - To specify a subnet for the VM:
compute.subnetworks.use
on the project or on the chosen subnet - To assign an external IP address to the VM when using a VPC network:
compute.subnetworks.useExternalIp
on the project or on the chosen subnet - To set VM instance metadata for the VM:
compute.instances.setMetadata
on the project - To set tags for the VM:
compute.instances.setTags
on the VM - To set labels for the VM:
compute.instances.setLabels
on the VM - To set a service account for the VM to use:
compute.instances.setServiceAccount
on the VM - To create a new disk for the VM:
compute.disks.create
on the project - To attach an existing disk in read-only or read-write mode:
compute.disks.use
on the disk - To attach an existing disk in read-only mode:
compute.disks.useReadOnly
on the disk
You might also be able to get these permissions with custom roles or other predefined roles.
Create a disk from a snapshot and optionally attach it to a VM
If you backed up a boot or non-boot disk with a snapshot, you can create a new disk based on the snapshot.
Restrictions
The new disk must be at least the same size as the original source disk for the snapshot. If you create a disk that is larger than the original source disk for the snapshot, you must resize the file system on that persistent disk to include the additional disk space. Depending on your operating system and file system type, you might need to use a different file system resizing tool. For more information, see your operating system documentation.
You can create a new zonal or regional disk from a given snapshot at most once every ten minutes. If you want to issue a burst of requests to snapshot your disks, you can issue at most 6 requests in 60 minutes. This limit does not apply when creating regional disks from a snapshot. For more information, see Snapshot frequency limits.
Console
In the Google Cloud console, go to the Snapshots page.
Find the name of the snapshot that you want to restore.
Go to the Disks page.
Click Create new disk.
Specify the following configuration parameters:
- A name for the disk.
- A type for the disk.
- Optionally, you can override the default region and zone selection. You can select any region and zone, regardless of the storage location of the source snapshot.
Under Source type, click Snapshot.
Select the name of the snapshot to restore.
Select the size of the new disk, in gigabytes. This number must be equal to or larger than the original source disk for the snapshot.
Click Create to create the disk.
Optionally, you can then attach the new disk to an existing instance.
- Go to the VM instances page.
- Click the name of the instance where you want to restore your non-boot disk.
- At the top of the instance details page, click Edit.
- Under Additional disks, click Attach existing disk.
- Select the name of the new disk made from your snapshot.
- Click Done to attach the disk.
- At the bottom of the instance details page, click Save to apply your changes to the instance.
gcloud
Use the
gcloud compute snapshots list
command to find the name of the snapshot you want to restore:gcloud compute snapshots list
Use the
gcloud compute snapshots describe
command to find the size of the snapshot you want to restore:gcloud compute snapshots describe SNAPSHOT_NAME
Replace SNAPSHOT_NAME with the name of the snapshot being restored.
Use the
gcloud compute disks create
command to create a new regional or zonal disk from your snapshot. If you need an SSD persistent disk for additional throughput or IOPS, include the--type
flag and specifypd-ssd
.gcloud compute disks create DISK_NAME \ --size=DISK_SIZE \ --source-snapshot=SNAPSHOT_NAME \ --type=DISK_TYPE
Replace the following:
- DISK_NAME: the name of the new disk.
- DISK_SIZE: The size of the new disk, in gigabytes. This number must be equal to or larger than the original source disk for the snapshot.
- SNAPSHOT_NAME: the name of the snapshot being restored.
- DISK_TYPE: full or partial URL for the type
of the disk. For example,
https://www.googleapis.com/compute/v1/projects/PROJECT_ID /zones/ZONE/diskTypes/pd-ssd
.
Optional: attach the new disk to an existing instance by using the
gcloud compute instances attach-disk
command:gcloud compute instances attach-disk INSTANCE_NAME \ --disk DISK_NAME
Replace the following:
- INSTANCE_NAME is the name of the instance.
- DISK_NAME is the name of the disk made from your snapshot.
Go
Go
Before trying this sample, follow the Go setup instructions in the Compute Engine quickstart using client libraries. For more information, see the Compute Engine Go API reference documentation.
To authenticate to Compute Engine, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Java
Java
Before trying this sample, follow the Java setup instructions in the Compute Engine quickstart using client libraries. For more information, see the Compute Engine Java API reference documentation.
To authenticate to Compute Engine, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Node.js
Node.js
Before trying this sample, follow the Node.js setup instructions in the Compute Engine quickstart using client libraries. For more information, see the Compute Engine Node.js API reference documentation.
To authenticate to Compute Engine, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Python
Python
Before trying this sample, follow the Python setup instructions in the Compute Engine quickstart using client libraries. For more information, see the Compute Engine Python API reference documentation.
To authenticate to Compute Engine, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
REST
Construct a
GET
request tosnapshots.list
to display the list of snapshots in your project.GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/snapshots
Replace PROJECT_ID with your project ID.
Construct a
POST
request to create a regional or zonal disk using the respectivedisks.insert
method:- For zonal disks:
disks.insert
- For regional disks:
regionDisks.insert
for regional disks
Include the
name
,sizeGb
, andtype
properties. To restore a disk using a snapshot, you must include thesourceSnapshot
property.For example, the following requests creates a zonal disk:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks { "name": "DISK_NAME", "sizeGb": "DISK_SIZE", "type": "zones/ZONE/diskTypes/DISK_TYPE" "sourceSnapshot": "SNAPSHOT_NAME" }
Replace the following:
- PROJECT_ID: your project ID.
- ZONE the zone where your instance and new disk are located.
- DISK_NAME: the name of the new disk.
- DISK_SIZE: the size of the new disk, in gigabytes. This number must be equal to or larger than the original source disk for the snapshot.
- DISK_TYPE: full or partial URL for the type
of the disk. For example
https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ ZONE/diskTypes/pd-ssd
. - SNAPSHOT_NAME: the source snapshot for the disk you are restoring.
- For zonal disks:
Optionally, you can then attach the new disk to an existing instance by constructing a
POST
request to theinstances.attachDisk
method, and including the URL to the disk that you just created from your snapshot.For regional disks, replace
zones/ZONE
withregions/REGION
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/attachDisk { "source": "/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME" }
Replace the following:
- PROJECT_ID is your project ID.
- ZONE is the zone where your instance and new disk are located.
- INSTANCE_NAME is the name of the instance where you are adding the new disk.
- DISK_NAME is the name of the new disk.
After you create and attach a new disk to an instance, you must mount the disk so that the operating system can use the available storage space.
Create a VM from existing disks
You can create boot disk and data disks from snapshots and then attach these disks to a new VM.
Go
Go
Before trying this sample, follow the Go setup instructions in the Compute Engine quickstart using client libraries. For more information, see the Compute Engine Go API reference documentation.
To authenticate to Compute Engine, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Java
Java
Before trying this sample, follow the Java setup instructions in the Compute Engine quickstart using client libraries. For more information, see the Compute Engine Java API reference documentation.
To authenticate to Compute Engine, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Node.js
Node.js
Before trying this sample, follow the Node.js setup instructions in the Compute Engine quickstart using client libraries. For more information, see the Compute Engine Node.js API reference documentation.
To authenticate to Compute Engine, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Python
Python
Before trying this sample, follow the Python setup instructions in the Compute Engine quickstart using client libraries. For more information, see the Compute Engine Python API reference documentation.
To authenticate to Compute Engine, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Create a VM from a boot disk snapshot
If you backed up a VM's boot disk with a snapshot, you can use that snapshot to create a new VM.
To create a VM with a regional Persistent Disk boot disk from a snapshot, use the Google Cloud CLI or the Compute Engine API.
Console
In the Google Cloud console, go to the VM instances page.
Select your project and click Continue.
Click Create instance.
Specify a Name for your VM. For more information, see Resource naming convention.
Optional: Change the Zone for this VM. If you select Any, Google automatically chooses a zone for you based on machine type and availability.
Select a Machine configuration for your VM.
In the Boot disk section, click Change, and then do the following:
- Click the Snapshots tab.
- In the Snapshot list, click a snapshot.
- Specify the boot disk type and size.
- Optional: For advanced configuration options, click Show advanced configurations.
- To confirm your boot disk options, click Select.
In the Firewall section, to permit HTTP or HTTPS traffic to the VM, select Allow HTTP traffic or Allow HTTPS traffic.
The Google Cloud console adds a network tag to your VM and creates the corresponding ingress firewall rule that allows all incoming traffic on
tcp:80
(HTTP) ortcp:443
(HTTPS). The network tag associates the firewall rule with the VM. For more information, see Firewall rules overview in the Virtual Private Cloud documentation.To create and start the VM, click Create.
gcloud
Persistent Disk boot disk
Use the
gcloud compute instances create
command
and include the --source-snapshot
flag.
gcloud compute instances create VM_NAME \ --source-snapshot=BOOT_SNAPSHOT_NAME \ --boot-disk-size=BOOT_DISK_SIZE \ --boot-disk-type=BOOT_DISK_TYPE \ --boot-disk-device-name=BOOT_DISK_NAME
Replace the following:
VM_NAME
: name for the new VMBOOT_SNAPSHOT_NAME
: name of the boot disk snapshot that you want to restore to the boot disk of the new VM.BOOT_DISK_SIZE
: Optional: size, in gigabytes, of the new boot diskThe size must be equal to or larger than the size of the source disk from which the snapshot was made.
BOOT_DISK_TYPE
: Optional: type of the boot persistent disk, for example,pd-ssd
.BOOT_DISK_NAME
: name of the new boot disk for this VM
Regional Persistent Disk boot disk
Use the
gcloud compute instances create
command
and include the --create-disk
flag with the source-snapshot
,
replica-zones
, and boot
properties.
gcloud compute instances create VM_NAME \ --zone=ZONE \ --create-disk=^:^name=DISK_NAME:source-snapshot=BOOT_SNAPSHOT_NAME:boot=true:replica-zones=ZONE,REMOTE_ZONE
The characters ^:^
specify that a colon :
is used as the separator
between each of the disk properties. This is required so that you can use
a comma ,
when specifying the zones for replica-zones
.
Replace the following:
VM_NAME
: name for the new VMZONE
: To zone to create the VM inDISK_NAME
: Optional: a name for the diskBOOT_SNAPSHOT_NAME
: name of the boot disk snapshot that you want to restore to the boot disk of the new VM.REMOTE_ZONE
: The region that the regional Persistent Disk is replicated to.Thereplica-zones
property requires two zones separated by comma, and one of the zones must the same as the zone for the VM.
Go
Go
Before trying this sample, follow the Go setup instructions in the Compute Engine quickstart using client libraries. For more information, see the Compute Engine Go API reference documentation.
To authenticate to Compute Engine, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Java
Java
Before trying this sample, follow the Java setup instructions in the Compute Engine quickstart using client libraries. For more information, see the Compute Engine Java API reference documentation.
To authenticate to Compute Engine, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Node.js
Node.js
Before trying this sample, follow the Node.js setup instructions in the Compute Engine quickstart using client libraries. For more information, see the Compute Engine Node.js API reference documentation.
To authenticate to Compute Engine, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Python
Python
Before trying this sample, follow the Python setup instructions in the Compute Engine quickstart using client libraries. For more information, see the Compute Engine Python API reference documentation.
To authenticate to Compute Engine, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
REST
When you use the API to create a VM from a snapshot, the following restrictions apply:
- Only one persistent disk can be used as the boot disk.
- You must attach the boot disk as the first disk for that VM.
- If you specify the
source
property, you cannot also specify theinitializeParams
property. Providing asource
indicates that the boot persistent disk exists already, but theinitializeParams
property indicates that Compute Engine should create a new boot persistent disk.
Persistent Disk boot disk
To create a VM from a boot disk snapshot, use theinstances.insert
method
and specify the sourceSnapshot
field under the
disks
property. Optional: specify the diskSizeGb
and diskType
properties for the new boot disk.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM_NAME", "machineType": "machineTypes/MACHINE_TYPE" "networkInterfaces": [{ "accessConfigs": [{ "type": "ONE_TO_ONE_NAT", "name": "External NAT" }], "network": "global/networks/default" }], "disks": [{ "boot": true, "initializeParams": { "sourceSnapshot": "global/snapshots/BOOT_SNAPSHOT_NAME", "diskSizeGb": "BOOT_DISK_SIZE", "diskType": "BOOT_DISK_TYPE" } }], }Replace the following:
PROJECT_ID
: your project IDZONE
: zone where you want to create the new VMVM_NAME
: name of the VM that you want to restore a snapshot toMACHINE_TYPE
: machine type of the VMBOOT_SNAPSHOT_NAME
: name of the snapshot that you want to use to create the boot disk of a new VMBOOT_DISK_SIZE
: Optional: size, in gigabytes, for the new boot diskThe size must be equal to or larger than the size of the source disk from which the snapshot was made.
BOOT_DISK_TYPE
: Optional: type of the boot disk, for example, `pd-ssd`.
Regional Persistent Disk boot disk
To create a VM with a regional Persistent Disk for the boot disk from a boot disk snapshot, use theinstances.insert
method
and specify the sourceSnapshot
and replicaZones
fields in the disks
property.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM_NAME", "disks": [{ "boot": true, "initializeParams": { "sourceSnapshot": "global/snapshots/BOOT_SNAPSHOT_NAME", "replicaZones": [ "projects/PROJECT_ID/zones/ZONE", "projects/PROJECT_ID/zones/REMOTE_ZONE"] } }], }
Replace the following:
PROJECT_ID
: your project IDZONE
: the name of the zone where you want to create the VMVM_NAME
`: a name for the VMBOOT_SNAPSHOT_NAME
: the name of the boot disk snapshotREMOTE_ZONE
: the remote zone for the regional Persistent Disk
Create a VM from a non-boot disk snapshot
If you backed up a non-boot disk with a snapshot, you can create a VM with a new non-boot disk based on the snapshot.
Console
When restoring non-boot snapshots to a new VM from the console, first create a disk from each snapshot. Then, attach the new disks when you create the VM.
Restore each non-boot snapshot to a new disk.
In the Google Cloud console, go to the Disks page.
Click Create disk.
Specify a Name for your disk. For more information, see Resource naming convention.
Select the Region and Zone for this disk. The disk and VM must be in the same zone for zonal disks, or region for regional disks.
Select a disk Type.
Under Source type, select Snapshot.
Under the new Source snapshot field, select a non-boot snapshot that you want to restore to the new disk.
To create the disk, click Create.
Repeat these steps to create a disk from each snapshot that you want to restore. When creating a VM, you can add up to 15 non-boot disks.
In the Google Cloud console, go to the VM instances page.
Select your project and click Continue.
Click Create instance.
- Specify a Name for your VM. For more information, see Resource naming convention.
- Select the Region and Zone for this VM. The disk and VM must be in the same zone for zonal disks, or region for regional disks.
- Select a Machine type for your VM.
- If you want to allow incoming external traffic, change the Firewall rules for the VM.
To attach disks to the VM, expand the Advanced options section, and then do the following:
- Expand the Disks section.
- Click Attach existing disk.
- In the Disk list, select a disk to attach to this VM.
- In the Attachment Setting section, select disk's attachment Mode and the Deletion rule. For more information about adding new disks, see Add a persistent disk to your VM.
- Click Save.
Repeat these steps for each disk that you want to attach. When creating a VM, you can add up to 15 non-boot disks.
To create and start the VM, click Create.
gcloud
Create a VM by using the
gcloud compute instances create
command.
For each non-boot snapshot that you want to restore, include the
--create-disk
flag, and specify a source-snapshot
. When creating a
VM, you can add up to 15 non-boot disks.
For example, to restore two non-boot snapshots to a new VM, use the following command:
gcloud compute instances create VM_NAME \ --create-disk source-snapshot=SNAPSHOT_1_NAME,name=DISK_1_NAME,size=DISK_1_SIZE,type=DISK_1_TYPE \ --create-disk source-snapshot=SNAPSHOT_2_NAME,name=DISK_2_NAME,size=DISK_2_SIZE,type=DISK_2_TYPE
Replace the following:
VM_NAME
: name for the new VMSNAPSHOT_1_NAME
andSNAPSHOT_2_NAME
: names of non-boot snapshots that you want to restoreDISK_1_NAME
andDISK_2_NAME
: names of the new non-boot disks for this VMDISK_1_SIZE
andDISK_2_SIZE
: Optional: sizes, in gigabytes, of each new non-boot diskThe sizes must be equal to or larger than the sizes of the source disks from which the snapshot was made.
DISK_1_TYPE
andDISK_2_TYPE
: Optional: types of the persistent disksFor example,
https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/diskTypes/pd-ssd
.
REST
When using the API to restore a non-boot snapshot to a new VM, the following restrictions apply:
- Only one persistent disk can be the boot persistent disk.
- You must attach the boot persistent disk as the first disk for that VM.
- If you specify the
source
property, you can't also specify theinitializeParams
property. Providing asource
indicates that the boot persistent disk exists already, but theinitializeParams
property indicates that Compute Engine should create a new boot persistent disk.
Using the beta API, specify the sourceSnapshot
field under the
initializeParams
property. You can add up to 15 non-boot disks
by repeating the initializeParams
property for every non-boot disk that
you want to create. You can optionally specify the diskSizeGb
and
diskType
properties for any of the disks that you create.
For example, to restore two non-boot snapshots to a new VM, make the following request:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM_NAME", "machineType": "machineTypes/MACHINE_TYPE" "networkInterfaces": [{ "accessConfigs": [{ "type": "ONE_TO_ONE_NAT", "name": "External NAT" }], "network": "global/networks/default" }], "disks": [{ "autoDelete": "true", "boot": "true", "type": "PERSISTENT", "diskSizeGb": "DISK_SIZE", "diskType": "DISK_TYPE" }, { "initializeParams": { "sourceSnapshot": "global/snapshots/SNAPSHOT_1_NAME", "diskSizeGb": "DISK_SIZE", "diskType": "DISK_TYPE" } }, { "initializeParams": { "sourceSnapshot": "global/snapshots/SNAPSHOT_2_NAME", "diskSizeGb": "DISK_SIZE", "diskType": "DISK_TYPE" } }] }
Replace the following:
PROJECT_ID
: your project IDZONE
: zone where you want to create the VMVM_NAME
: name of the VM that you want to restore a snapshot toMACHINE_TYPE
: machine type of the VMDISK_SIZE
: Optional: size, in gigabytes, of the corresponding diskWhen provided, this property must be equal to or larger than the size of the source disk from which the snapshot was made.
DISK_TYPE
: Optional: full or partial URL for the type of the corresponding persistent diskFor example,
https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/diskTypes/pd-ssd
.SNAPSHOT_1_NAME
andSNAPSHOT_2_NAME
: names of non-boot snapshots that you want to restore to new, non-boot disks on the new VM