A disk is either a boot disk that is used to start and run the operating system on a compute instance or a non-boot disk that an instance 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 instance based on the boot disk snapshot.
After you take a snapshot of a non-boot disk, create a new instance with a new non-boot disk based on the snapshot.
Before you begin
-
If you haven't already, set up authentication.
Authentication verifies your identity 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. After installation, initialize the Google Cloud CLI by running the following command:
gcloud initIf you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- 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.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
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.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
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.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
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.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
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.
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
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 globally scoped snapshot (default):
-
compute.disks.createon the project -
compute.instances.attachDiskon the instance -
compute.disks.useon the disk to attach -
compute.snapshots.useReadOnly,compute.snapshots.create, orcompute.disks.createSnapshoton the project
-
-
To create a disk from a regionally scoped snapshot:
-
compute.disks.createon the project -
compute.instances.attachDiskon the instance -
compute.disks.useon the disk to attach -
compute.snapshots.useReadOnlyon the project
-
-
To create an instance from a boot disk and non-boot disk snapshot, at a minimum, you need the following permissions:
-
compute.instances.createon the project -
compute.snapshots.useReadOnlyon the snapshot -
compute.disks.createon the project -
compute.disks.useon the disk -
compute.instances.attachDiskon the instance
-
You might also be able to get these permissions with custom roles or other predefined roles.
Limitations
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 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 disks 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.
Create a disk from a snapshot and optionally attach it to an instance
If you backed up a boot or non-boot disk with a snapshot, you can create a new disk based on the snapshot.
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 a non-boot disk to an instance.
gcloud
Use the
gcloud compute snapshots listcommand to find the name of the snapshot you want to restore:gcloud compute snapshots list
Use the
gcloud compute snapshots describecommand 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 createcommand to create a new regional or zonal disk from your snapshot. You can include the--typeflag to specify the type of disk to create.- To create a zonal disk from a globally scoped snapshot:
gcloud compute disks create DISK_NAME \ --zone=ZONE \ --size=DISK_SIZE \ --source-snapshot=SNAPSHOT_NAME \ --type=DISK_TYPE- (Preview) To create a zonal disk from a regionally scoped snapshot:
gcloud beta compute disks create DISK_NAME \ --zone=ZONE \ --source-snapshot=SNAPSHOT_NAME \ --source-snapshot-region=SOURCE_REGION \ --type=DISK_TYPE- To create a regional disk from a globally scoped snapshot:
gcloud beta compute disks create DISK_NAME \ --size=DISK_SIZE \ --source-snapshot=SNAPSHOT_NAME \ --type=DISK_TYPE \ --region=REGION \ --replica-zones=ZONE1,ZONE2- (Preview) To create a regional disk from a regionally scoped snapshot:
gcloud beta compute disks create DISK_NAME \ --size=DISK_SIZE \ --source-snapshot=SNAPSHOT_NAME \ --source-snapshot-region=SOURCE_REGION \ --type=DISK_TYPE \ --region=REGION \ --replica-zones=ZONE1,ZONE2Replace the following:
- DISK_NAME: the name of the new disk
- DISK_SIZE: the size of the new disk, in gibibytes (GiB). 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: the
type of the disk, for example,
pd-ssd,hyperdisk-throughputorhyperdisk-balanced-high-availability - REGION: the region for the regional disk to reside in,
for example:
europe-west1 - SOURCE_REGION: the region that the source snapshot is scoped to
- ZONE: the zone where the new disk will reside
- ZONE1,ZONE2: the zones within the region where the two
disk replicas are located, for example:
europe-west1-bandeurope-west1-c
Optional: Attach the new disk to an existing instance by using the
gcloud compute instances attach-diskcommand:gcloud compute instances attach-disk INSTANCE_NAME \ --disk DISK_NAMEReplace the following:
- INSTANCE_NAME: the name of the instance
- DISK_NAME: 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 client libraries.
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 client libraries.
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 client libraries.
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 client libraries.
REST
Construct a
GETrequest tosnapshots.listto 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
POSTrequest to create a zonal disk or a regional disk using the respectivedisks.insertmethod:- For zonal disks:
disks.insert - For regional disks:
regionDisks.insert
Include the
name,sizeGb, andtypeproperties. To restore a disk using a snapshot, you must include thesourceSnapshotproperty.- To create a zonal disk from a globally scoped snapshot:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks { "name": "DISK_NAME", "sourceSnapshot": "SNAPSHOT_NAME", "sizeGb": "DISK_SIZE", "type": "zones/ZONE/diskTypes/DISK_TYPE" }- (Preview) To create a zonal disk from a regionally scoped snapshot:
POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/disks { "name": "DISK_NAME", "sourceSnapshot": "projects/PROJECT_ID/regions/SOURCE_REGION/snapshots/SNAPSHOT_NAME", "sizeGb": "DISK_SIZE", "type": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE", "zone": "projects/PROJECT_ID/zones/ZONE" }- To create a regional disk from a globally scoped snapshot:
POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/disks { "name": "DISK_NAME", "sourceSnapshot": "SNAPSHOT_NAME", "region": "projects/PROJECT_ID/regions/REGION", "replicaZones": [ "projects/PROJECT_ID/zones/ZONE1", "projects/PROJECT_ID/zones/ZONE2" ], "sizeGb": "DISK_SIZE", "type": "zones/ZONE/diskTypes/DISK_TYPE" }- (Preview) To create a regional disk from a regionally scoped snapshot:
POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/disks { "name": "DISK_NAME", "sourceSnapshot": "projects/PROJECT_ID/regions/SOURCE_REGION/snapshots/SNAPSHOT_NAME", "replicaZones": [ "projects/PROJECT_ID/zones/ZONE1", "projects/PROJECT_ID/zones/ZONE2" ], "sizeGb": "DISK_SIZE", "type": "projects/PROJECT_ID/regions/REGION/diskTypes/DISK_TYPE" }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
- SNAPSHOT_NAME: the source snapshot for the disk that you're restoring
- REGION: the region for the regional disk to reside in,
for example:
europe-west1 - SOURCE_REGION: the region that the source snapshot is scoped to
- ZONE1, ZONE2: the zones where replicas of the new disk should be located
- DISK_SIZE: the size of the new disk, in gibibytes (GiB). 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,
PROJECT_ID/zones/ZONE/diskTypes/pd-ssd,PROJECT_ID/zones/ZONE/diskTypes/hyperdisk-balancedorPROJECT_ID/zones/ZONE/diskTypes/hyperdisk-balanced-high-availability
- For zonal disks:
Optional. Attach the new disk to an existing instance.
Construct a
POSTrequest to theinstances.attachDiskmethod, and include the URL to the disk that you just created from your snapshot.For zonal disks:
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" }For regional disks:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/attachDisk { "source": "/compute/v1/projects/PROJECT_ID/regions/REGION/disks/DISK_NAME" }Replace the following:
- PROJECT_ID: your project ID
- ZONE: the zone where your instance and new disk are located
- REGION: the region where the regional disk is located. This must be the same region that the compute instance is located in.
- INSTANCE_NAME: the name of the instance where you're adding the new disk
- DISK_NAME: 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 an instance from existing disks
You can create boot disks and data disks from snapshots and then attach these disks to a new compute instance.
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 client libraries.
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 client libraries.
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 client libraries.
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 client libraries.
Create an instance from a boot disk snapshot
If you created a snapshot of the boot disk of a compute instance,you can use that snapshot to create a new instance.
To quickly create more than one instance with the same boot disk, create a custom image, then create instances from that image instead of using a snapshot.
To create a compute instance with a regional boot disk that was created from a snapshot, use the Google Cloud CLI or REST.