Working with persistent disk snapshots

Create snapshots to periodically back up data from your zonal persistent disks or regional persistent disks.

You can create snapshots from disks even while they are attached to running instances. Snapshots are global resources, so you can use them to restore data to a new disk or instance within the same project. You can also share snapshots across projects.

Before you begin

Creating snapshots

To prepare for creating persistent disk snapshots, do the following:

Creating a snapshot of a zonal persistent disk

Console

  1. Go to the Create a Snapshot page in the Google Cloud Console.
    Go to the Create a Snapshot page
  2. Enter a snapshot Name.
  3. Optionally, enter a Description of the snapshot.
  4. Select the Source disk from the drop-down menu.
  5. Determine your snapshot storage location. You can use the default storage location, or a custom storage location.

    1. Under Location, select whether you want to store your snapshot in a Multi-regional location or a Regional location.
    2. Select which specific region or multi-region that you want to use. To use the region or multi-region that is closest to your source disk, select Based on disk's location (default).
  6. Click Create to create the snapshot.

gcloud

Create your snapshot in the default storage location or in a selected storage location. You must specify a snapshot name. The name must be 1-63 characters long, and comply with RFC 1035.

  • To create a snapshot of a persistent disk in the default storage location, use the gcloud compute snapshots create command.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk SOURCE_DISK \
        --source-disk-zone SOURCE_DISK_ZONE
    

    Replace the following:

    • SNAPSHOT_NAME: A name for the snapshot.
    • SOURCE_DISK: The name of the persistent disk from which you want to create a snapshot.
    • SOURCE_DISK_ZONE: The zone of the persistent disk from which you want to create a snapshot.
  • Alternatively, to create a snapshot in a custom storage location, use the --storage-location flag to indicate where to store your snapshot:

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk SOURCE_DISK \
        --source-disk-zone SOURCE_DISK_ZONE \
        --storage-location STORAGE_LOCATION 
    

    Replace the following:

    • SNAPSHOT_NAME: A name for the snapshot.
    • SOURCE_DISK: The name of the persistent disk from which you want to create a snapshot.
    • SOURCE_DISK_ZONE: The zone of the persistent disk from which you want to create a snapshot.
    • STORAGE_LOCATION: The Cloud Storage multi-region or the Cloud Storage region where you want to store your snapshot. You can specify only one storage location.

The gcloud tool waits until the operation returns a status of READY or FAILED, or reaches the maximum timeout and returns the last known details of the snapshot.

API

Create your snapshot in the default storage location or in a selected storage location.

  • To create your snapshot in the default storage location, make a POST request to the snapshots.insert method:

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    
    {
      "name": SNAPSHOT_NAME
      "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME
    }
    

    Replace the following:

    • DESTINATION_PROJECT_ID: The ID of project in which you want to create the snapshot.
    • SNAPSHOT_NAME: A name for the snapshot.
    • SOURCE_PROJECT_ID: The ID of the source disk project.
    • SOURCE_ZONE: The zone of the source disk.
    • SOURCE_DISK_NAME: The name of the persistent disk from which you want to create a snapshot.
  • Alternatively, to create a snapshot in a custom storage location, make a POST request to the snapshots.insert method and specify the storage location:

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    
    {
      "name": SNAPSHOT_NAME
      "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME
      "storageLocations": STORAGE_LOCATION
    }
    

    Replace the following:

    • DESTINATION_PROJECT_ID: The ID of project in which you want to create the snapshot.
    • SNAPSHOT_NAME: A name for the snapshot.
    • SOURCE_PROJECT_ID: The ID of the source disk project.
    • SOURCE_ZONE: The zone of the source disk.
    • SOURCE_DISK_NAME: The name of the persistent disk from which you want to create a snapshot.
    • STORAGE_LOCATION: The Cloud Storage multi-region or the Cloud Storage region where you want to store your snapshot. You can specify only one storage location.

Creating a snapshot of a regional persistent disk

After you have prepared the disk, you can create a snapshot. When creating a snapshot of a regional persistent disk, you must indicate the region where the disk is located.

Console

  1. Go to the Create a Snapshot page in the Google Cloud Console.
    Go to the Create a Snapshot page
  2. Enter a snapshot Name.
  3. Optionally, enter a Description of the snapshot.
  4. Under Source disk, select an existing disk from which you want to create a snapshot.
  5. Optionally, you can specify a custom storage location:

    1. Under Location, select whether you want to store your snapshot in a Multi-regional location or a Regional location.
    2. Select which specific region or multi-region that you want to use. To use the region or multi-region that is closest to your source disk, select Based on disk's location.
  6. Click Create to create the snapshot.

gcloud

Create your snapshot in the default storage location or in a selected storage location.

  • To create a snapshot of a regional persistent disk in the default storage location, use the gcloud compute snapshots create command.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk SOURCE_DISK \
        --source-disk-region=SOURCE_DISK_REGION
    

    Replace the following:

    • SNAPSHOT_NAME: A name for the snapshot.
    • SOURCE_DISK: The name of the persistent disk from which you want to create a snapshot.
    • SOURCE_DISK_REGION: The region of the regional persistent disk from which you want to create a snapshot.
  • Optionally, you can specify a custom storage location.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk SOURCE_DISK \
        --source-disk-region=SOURCE_DISK_REGION
        --storage-location STORAGE_LOCATION
    

    Replace the following:

    • SNAPSHOT_NAME: A name for the snapshot.
    • SOURCE_DISK: The name of the persistent disk from which you want to create a snapshot.
    • SOURCE_DISK_REGION: The region of the regional persistent disk from which you want to create a snapshot.
    • STORAGE_LOCATION: The Cloud Storage multi-region or the Cloud Storage region where you want to store your snapshot. You can specify only one storage location.

    The gcloud command-line tool waits until the operation returns a status of READY, FAILED, or reaches the maximum timeout and returns the last known details of the snapshot.

API

  • To create a snapshot in the default storage location, make a POST request to the snapshots.insert method:

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": SNAPSHOT_NAME
      "sourceDisk": "projects/SOURCE_PROJECT_ID/regions/SOURCE_REGION/disks/SOURCE_DISK_NAME
    }
    

    Replace the following:

    • DESTINATION_PROJECT_ID: The ID of project in which you want to create the snapshot.
    • SNAPSHOT_NAME: A name for the snapshot.
    • SOURCE_PROJECT_ID: The ID of the source disk project.
    • SOURCE_REGION: The region of the source disk.
    • SOURCE_DISK_NAME: The name of the persistent disk from which you want to create a snapshot.
  • Alternatively, to create a snapshot in a custom storage location, make a POST request to thesnapshots.insert method and specify the storage location:

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": SNAPSHOT_NAME
      "sourceDisk": "projects/SOURCE_PROJECT_ID/regions/SOURCE_REGION/disks/SOURCE_DISK_NAME
      "storageLocations": STORAGE_LOCATION
    }
    

    Replace the following:

    • DESTINATION_PROJECT_ID: The ID of project in which you want to create the snapshot.
    • SNAPSHOT_NAME: A name for the snapshot.
    • SOURCE_PROJECT_ID: The ID of the source disk project.
    • SOURCE_REGION: The region of the source disk.
    • SOURCE_DISK_NAME: The name of the persistent disk from which you want to create a snapshot.
    • STORAGE_LOCATION: The Cloud Storage multi-region or the Cloud Storage region where you want to store your snapshot. You can specify only one storage location.

Sharing disk data across projects

To move data from a disk in one project to a disk in a different project, use the following process:

gcloud

  1. Create a snapshot in the destination project of the disk in the source project using the gcloud compute snapshots create command:

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk https://www.googleapis.com/compute/v1/projects/SOURCE_PROJECT_ID/zones/ZONE/disks/SOURCE_DISK_NAME \
        --project DESTINATION_PROJECT_ID
    

    Replace the following:

    • SNAPSHOT_NAME: A name for the snapshot.
    • SOURCE_PROJECT_ID: The ID of the source disk project.
    • ZONE: The zone of the source disk.
    • SOURCE_DISK_NAME: The name of the source disk.
    • DESTINATION_PROJECT_ID: The ID of the destination project for the new snapshot.
  2. In the destination project, create a new disk based on the snapshot using the gcloud compute disks create command:

    gcloud compute disks create DISK_NAME \
        --source-snapshot SNAPSHOT_NAME \
        --project DESTINATION_PROJECT_ID
    

    Replace the following:

    • DISK_NAME: A name for the new disk.
    • SNAPSHOT_NAME: The name of the snapshot.
    • DESTINATION_PROJECT_ID: The ID of the destination project for the new disk.

API

  1. Create a snapshot in the destination project of the disk in the source project by making a POST request to the snapshots.insert method:

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    
    {
      "name": SNAPSHOT_NAME
      "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME
    }
    

    Replace the following:

    • DESTINATION_PROJECT_ID: The ID of the destination project for the new snapshot.
    • SNAPSHOT_NAME: A name for the snapshot.
    • SOURCE_PROJECT_ID: The ID of the source disk project.
    • SOURCE_ZONE: The zone of the source disk.
    • SOURCE_DISK_NAME: The name of the source disk.
  2. In the destination project, create a new disk based on the snapshot using the disks.insert method:

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/zones/DESTINATION_ZONE/disks
    
    {
      "name": DISK_NAME
      "sourceSnapshot": SNAPSHOT_NAME
    }
    

    Replace the following:

    • DESTINATION_PROJECT_ID: The ID of the destination project for the new disk.
    • DISK_NAME: A name for the new disk.
    • SNAPSHOT_NAME: The name of the snapshot.

To get a list of snapshots available to you, see Listing snapshots.

Restoring snapshots

To restore the contents of a snapshot to a new disk, you have the following options:

  • Create a new persistent disk from a snapshot: Create a new disk and select the snapshot as the Source.

  • Create a new instance from a snapshot: When you create a new instance, you can use snapshots to create boot disks and data disks for that instance. In the event of an outage, you can quickly recover your data by restoring one or more snapshots to the new persistent disks on a new instance. For more information, see Creating an instance from snapshots.

Creating a new persistent disk from a snapshot

The new persistent disk must be at least the same size as the original source disk for the snapshot. If you create a persistent 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.

You can create a new zonal persistent 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 persistent disks from a snapshot. For more information, see Snapshot frequency limits.

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.

Console

  1. In the Google Cloud Console, go to the Snapshots page.

    Go to Snapshots

  2. Find the name of the snapshot that you want to restore.

  3. Go to the Disks page.

    Go to the Disks page

  4. Click Create new disk.

  5. 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.
  6. Under Source type, click Snapshot.

  7. Select the name of the snapshot to restore.

  8. 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.

  9. Click Create to create the disk.

gcloud

  1. Use the gcloud compute snapshots list command command to find the name of the snapshot you want to restore:

    gcloud compute snapshots list
    
  2. Use the gcloud compute snapshots describe command 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.

  3. Use the gcloud compute disks create command command to create a new regional or zonal persistent disk from your snapshot. If you need an SSD persistent disk for additional throughput or IOPS, include the --type flag and specify pd-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 persistent disk. For example, https://www.googleapis.com/compute/v1/projects/PROJECT_ID /zones/ZONE/diskTypes/pd-ssd.

API

  1. Construct a GET request to snapshots.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.

  2. Construct a POST request to create a zonal persistent disk using the disks.insert method. Include the name, sizeGb, and type properties. To restore a disk using a snapshot, you must include the sourceSnapshot property.

    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 persistent 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.

Optionally, you can then attach the new disk to an existing instance.

Console

  1. Go to the VM instances page.

    Go to the VM instances page

  2. Click the name of the instance where you want to restore your non-boot disk.
  3. At the top of the instance details page, click Edit.
  4. Under Additional disks, click Attach existing disk.
  5. Select the name of the new disk made from your snapshot.
  6. Click Done to attach the disk.
  7. At the bottom of the instance details page, click Save to apply your changes to the instance.

gcloud

  1. Use the gcloud compute instances attach-disk command to attach your persistent disk to an instance:

    gcloud compute instances attach-disk INSTANCE_NAME \
        --disk DISK_NAME
    

    where:

    • INSTANCE_NAME is the name of the instance.
    • DISK_NAME is the name of the disk made from your snapshot.

API

  1. Construct a POST request to the instances.attachDisk method, and include the URL to the zonal persistent disk that you just created from your snapshot.

    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"
    }
    

    where:

    • 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 persistent 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.

Deleting a snapshot

Compute Engine uses incremental snapshots so that each snapshot contains only the data that has changed since the previous snapshot. Because subsequent snapshots might require information stored in a previous snapshot, keep in mind that deleting a snapshot does not necessarily delete all the data on the snapshot. To learn more about snapshot deletion, see Snapshot deletion.

To delete a snapshot:

Console

  1. Go to the Snapshots page in the Google Cloud Console.

    Go to the Snapshots page

  2. Select one or more snapshots that you want to delete.
  3. At the top of the Snapshots page, click Delete.

gcloud

To delete a snapshot, use the gcloud compute snapshots delete command:

gcloud compute snapshots delete SNAPSHOT_NAME

where SNAPSHOT_NAME is the name of the snapshot being deleted.

API

Make a DELETE request to compute.snapshots.delete method to delete snapshots.

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/snapshots/SNAPSHOT_NAME

where:

  • PROJECT_ID is the name of your project.
  • SNAPSHOT_NAME is the name of the snapshot to delete.

Deleting multiple snapshots based on a filter

Compute Engine uses incremental snapshots so that each snapshot contains only the data that has changed since the previous snapshot. Because subsequent snapshots might require information stored in a previous snapshot, deleting a snapshot does not necessarily delete all the data on the snapshot. To learn more about snapshot deletion, see Snapshot deletion.

The following sections describe how to delete a number of snapshots based on a given filter. For more information on gcloud tool filters, see gcloud tool topic filters.

To delete the snapshots, use a combination of the gcloud compute snapshots list command with a given filter, and the gcloud compute snapshots delete command with xargs:

gcloud compute snapshots list --filter="EXPRESSION" --uri |
   xargs gcloud compute snapshots delete

Replace EXPRESSION with a gcloud topic filter.

For example, --filter="creationTimestamp>'2021-01-01'" deletes all snapshots created after 2021-01-01.

Listing snapshots

gcloud

To see a list of snapshots available to you in a particular project, use the gcloud compute snapshots list command.

gcloud compute snapshots list --project PROJECT_ID

where PROJECT_ID is the ID of the project.

API

To see a list of snapshot available to you in a particular project, make a GET request to the snapshots.list method:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/snapshots

where PROJECT_ID is the ID of the project.

Viewing information about a snapshot

To list information about a particular snapshot, such as the creation time, size, and source disk, use the gcloud compute snapshots describe command:

gcloud compute snapshots describe SNAPSHOT_NAME

where SNAPSHOT_NAME is the name of the snapshot.

What's next