[Yandex Cloud documentation](../../../index.md) > [Yandex Compute Cloud](../../index.md) > [Step-by-step guides](../index.md) > Disk snapshots > Creating a snapshot schedule

# Creating a disk snapshot schedule


## Setting up an automatic disk snapshot schedule {#set-schedule}

To set up an automatic [disk snapshot](../../concepts/snapshot.md) [schedule](../../concepts/snapshot-schedule.md):

{% list tabs group=instructions %}

- Management console {#console}

  1. In the [management console](https://console.yandex.cloud), select the [folder](../../../resource-manager/concepts/resources-hierarchy.md#folder) containing the [disk](../../concepts/disk.md).
  1. Navigate to **Compute Cloud**.
  1. In the left-hand panel, select ![image](../../../_assets/console-icons/picture.svg) **Snapshots**.
  1. In the **Snapshot schedules** tab, click **Create snapshot schedule**.
  1. Under **Launch schedule**:
     * Specify the schedule settings:
     
         * `Daily`: Specify the frequency and start time.
         * `By day of week`: Specify the days and start time.
         * `By month`: Specify the frequency or months and start time.
         * `Cron`: Specify a [cron expression](../../concepts/snapshot-schedule.md#cron).
     
     * In the **Start date** field, set the start date for your schedule.
  1. Under **Storage settings**, select the snapshot storage policy:
     * **Store all snapshots**: Enable to retain all snapshots created by this schedule.
     * **Only the last**: Specify the number of the latest snapshots to retain or the number of days for which to retain the snapshots. Any other snapshots created by this schedule will be deleted automatically.
     
     {% note info %}
     
     There are [quotas](../../concepts/limits.md#compute-quotas) on the number and total size of snapshots in the cloud.
     
     {% endnote %}
  1. Optionally, under **General information**:
     * Enter a name for your schedule in the following format:
     
         * Length: between 3 and 63 characters.
         * It can only contain lowercase Latin letters, numbers, and hyphens.
         * It must start with a letter and cannot end with a hyphen.
     
     * Enter a schedule description.
     * Add schedule [labels](../../../overview/concepts/services.md#labels).
  1. Optionally, under **Snapshot settings** for snapshots that will be created according to this schedule:
     * Provide a description.
     * Add labels.
  1. Click **Create**.
      Wait until the schedule is created.

  1. On the page that opens, under **Disks**, click **Add disk**. In the window that opens, choose a disk to add to the schedule and click **Save**.

- CLI {#cli}

  If you do not have the Yandex Cloud CLI yet, [install and initialize it](../../../cli/quickstart.md#install).

  The folder used by default is the one specified when [creating](../../../cli/operations/profile/profile-create.md) the CLI profile. To change the default folder, use the `yc config set folder-id <folder_ID>` command. You can also specify a different folder for any command using `--folder-name` or `--folder-id`. If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.

  1. See the description of the [CLI](../../../cli/index.md) commands for managing schedules:

     ```bash
     yc compute snapshot-schedule --help
     yc compute snapshot-schedule create --help
     ```

  1. Create a schedule:

     ```bash
     yc compute snapshot-schedule create <schedule_name> \
       --expression "<cron_expression>" \
       --start-at "<start_date_and_time>" \
       --retention-period "<snapshot_retention_period>" \
       --description "<schedule_description>" \
       --labels "<schedule_labels>" \
       --snapshot-description "<snapshot_description>" \
       --snapshot-labels "<snapshot_labels>"
     ```

     Where:
     * `--expression`: [Cron expression](../../concepts/snapshot-schedule.md#cron). This is a required setting.
     * `--start-at`: Schedule start date and time in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) format.
     * `--retention-period`: Snapshot retention period. Specified in duration format, for example: `300ms`, `1.5h`, or `2h45m`. Use either `--retention-period` or `--snapshot-count`.
     * `--snapshot-count`: Maximum number of snapshots per [disk](../../concepts/disk.md). Use either `--snapshot-count` or `--retention-period`.
     * `--description`: Schedule description.
     * `--labels`: Schedule [labels](../../../overview/concepts/services.md#labels) in `key=value` format.
     * `--snapshot-description`: Snapshot description.
     * `--snapshot-labels`: Snapshot labels in `key=value` format.

     Result:

     ```text
     id: fd8uhc5qcinv********
     folder_id: b1g681qpemb4********
     created_at: "2026-05-25T21:03:22Z"
     name: my-schedule
     description: for my disks
     status: ACTIVE
     schedule_policy:
       start_at: "2027-01-02T15:04:05Z"
       expression: 30 0 * * *
     retention_period: 3600s
     snapshot_spec:
       description: my snapshot
     ```

     {% note info %}

     The snapshot creation time is specified in [UTC±00:00](https://en.wikipedia.org/wiki/UTC±00:00).

     {% endnote %}

     For more information about the `yc compute snapshot-schedule create` command, see the [CLI reference](../../../cli/cli-ref/compute/cli-ref/snapshot-schedule/create.md).
  1. To add disks to your schedule, get [disk](../../concepts/disk.md) IDs:

     ```bash
     yc compute disk list --format yaml
     ```

     Result:

     ```text
     - id: epdcq9g3co9s********
       folder_id: e1ea8s8l71li********
       created_at: "2022-10-13T14:37:44Z"
     ...
       instance_ids:
         - fhm1c7u23aiq********
       disk_placement_policy: {}
     ```

     You can create snapshots of network [disks](../../concepts/disk.md#disks_types) and drives, such as HDDs, SSDs, and non-replicated SSDs, as well as ultra high-speed network storages with three replicas (SSD).
     
     For non-replicated SSDs and ultra high-speed network storages with three replicas (SSD), the snapshot time is not determined.
     
     To create snapshots of local disks residing on [dedicated hosts](../../concepts/dedicated-host.md), use [Yandex Cloud Backup](../../../backup/index.md). This service supports Ubuntu, CentOS, CentOS Stream, and Windows Server.

  1. Add disks to the schedule:

     ```bash
     yc compute snapshot-schedule add-disks <schedule_name_or_ID> \
       --disk-id <disk_1_ID>,<disk_2_ID>
     ```

     Result:

     ```text
     done (3s)
     id: fc8e52mvchb2********
     folder_id: e1ea8s8l71li********
     ...
       expression: 36 14 */1 * *
     snapshot_count: "3"
     snapshot_spec: {}
     ```

- Terraform {#tf}

  If you do not have Terraform yet, [install it and configure the Yandex Cloud provider](../../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
  
  
  To manage infrastructure using Terraform under a service account or user accounts (a Yandex account, a federated account, or a local user), [authenticate](../../../terraform/authentication.md) using the appropriate method.

  1. In the Terraform configuration file, describe the resource you want to create:

     ```hcl
     resource "yandex_compute_snapshot_schedule" "default" {
       schedule_policy {
         expression = "<cron_expression>"
         start_at   = "<start_date_and_time>"
       }

       retention_period = "<snapshot_retention_period>"
       name             = "<schedule_name>"
       description      = "<schedule_description>"
       labels           = {
         <schedule_label_key> = "<schedule_label_value>"
       }

       snapshot_spec {
         description = "<snapshot_description>"
         labels      = {
           <snapshot_label_key> = "<snapshot_label_value>"
         }
       }

       disk_ids = ["<disk_1_ID>", "<disk_2_ID>"]
     }
     ```

     Where:
     * `schedule_policy`: Schedule properties:
       * `expression`: [Cron expression](../../concepts/snapshot-schedule.md#cron). This is a required setting.
       * `start_at`: Date and time in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) format from which the schedule will run.
     * `retention_period`: Snapshot retention period. Specified in duration format, for example: `"300ms"`, `"1.5h"`, or `"2h45m"`. Any other snapshots created by this schedule will be deleted automatically. Use either `retention_period` or `snapshot_count`.
     * `snapshot_count`: Maximum number of snapshots per [disk](../../concepts/disk.md). Use either `snapshot_count` or `retention_period`.

        {% note info %}

        There are [quotas](../../concepts/limits.md#compute-quotas) on the number and total size of snapshots in the cloud.

        {% endnote %}

     * `name`: Schedule in the following format:

        * Length: between 3 and 63 characters.
        * It can only contain lowercase Latin letters, numbers, and hyphens.
        * It must start with a letter and cannot end with a hyphen.

     * `description`: Schedule description.
     * `labels`: Schedule [labels](../../../overview/concepts/services.md#labels) in `<key> = "<value>"` format.
     * `snapshot_spec`: Properties of snapshots that will be created according to the schedule:
        * `description`: Snapshot description.
        * `labels`: Snapshot labels in `<key> = "<value>"` format.

     * `disk_ids`: IDs of disks to create snapshots for.

     You can create snapshots of network [disks](../../concepts/disk.md#disks_types) and drives, such as HDDs, SSDs, and non-replicated SSDs, as well as ultra high-speed network storages with three replicas (SSD).
     
     For non-replicated SSDs and ultra high-speed network storages with three replicas (SSD), the snapshot time is not determined.
     
     To create snapshots of local disks residing on [dedicated hosts](../../concepts/dedicated-host.md), use [Yandex Cloud Backup](../../../backup/index.md). This service supports Ubuntu, CentOS, CentOS Stream, and Windows Server.

     Learn more about the `yandex_compute_snapshot_schedule` resource properties in the [Terraform provider guide](../../../terraform/resources/compute_snapshot_schedule.md).

  1. Create the resources:

     1. In the terminal, navigate to the configuration file directory.
     1. Make sure the configuration is correct using this command:
     
        ```bash
        terraform validate
        ```
     
        If the configuration is valid, you will get this message:
     
        ```bash
        Success! The configuration is valid.
        ```
     
     1. Run this command:
     
        ```bash
        terraform plan
        ```
     
        You will see a list of resources and their properties. No changes will be made at this step. Terraform will show any errors in the configuration.
     1. Apply the configuration changes:
     
        ```bash
        terraform apply
        ```
     
     1. Type `yes` and press **Enter** to confirm the changes.

  This will create a schedule in the specified folder. You can check the new schedule and its settings using the [management console](https://console.yandex.cloud) or this [CLI](../../../cli/quickstart.md) command:

  ```bash
  yc compute snapshot-schedule get <schedule_name>
  ```

- API {#api}

  1. Get a list of disks using the [list](../../api-ref/Disk/list.md) REST API method for the [Disk](../../api-ref/Disk/index.md) resource or the [DiskService/List](../../api-ref/grpc/Disk/list.md) gRPC API call.

     You can create snapshots of network [disks](../../concepts/disk.md#disks_types) and drives, such as HDDs, SSDs, and non-replicated SSDs, as well as ultra high-speed network storages with three replicas (SSD).
     
     For non-replicated SSDs and ultra high-speed network storages with three replicas (SSD), the snapshot time is not determined.
     
     To create snapshots of local disks residing on [dedicated hosts](../../concepts/dedicated-host.md), use [Yandex Cloud Backup](../../../backup/index.md). This service supports Ubuntu, CentOS, CentOS Stream, and Windows Server.

  1. Create a snapshot schedule using the [create](../../api-ref/SnapshotSchedule/create.md) REST API method for the [SnapshotSchedule](../../api-ref/SnapshotSchedule/index.md) resource or the [SnapshotScheduleService/Create](../../api-ref/grpc/SnapshotSchedule/create.md) gRPC API call.

{% endlist %}

Snapshots will be created and deleted automatically only while the schedule has the `ACTIVE` [status](../../concepts/snapshot-schedule.md#statuses).

## Examples {#examples}

### Daily snapshots {#daily}

{% list tabs group=instructions %}

- CLI {#cli}

  To set up daily snapshots:
  1. Create a schedule using a [cron expression](../../concepts/snapshot-schedule.md#cron):

     ```bash
     yc compute snapshot-schedule create sched-1 \
       --description "Daily" \
       --expression "10 16 ? * *" \
       --start-at "2022-12-31T19:04:05+03:00" \
       --snapshot-count 7 \
       --labels "machine=file-server"
     ```

     This will create a schedule with the following parameters:
     * Name: `sched-1`; description: `Daily`.
     * Snapshots taken daily at 19:10 Moscow time.
     * Start date: December 31 at 19:04 Moscow time.
     * Last seven snapshots retained.
     * Label: `machine`; label value: `file-server`.
  1. Get disk IDs to add them to the schedule:

     ```bash
     yc compute disk list --format yaml
     ```

     Result:

     ```text
     - id: epdcq9g3co9s********
       folder_id: e1ea8s8l71li********
       created_at: "2022-10-13T14:37:44Z"
       name: disk-2
       type_id: network-hdd
       zone_id: ru-central1-a
       size: "21474836480"
       block_size: "4096"
       product_ids:
         - f2euv1kekdgv********
       status: READY
       source_image_id: fd88d14a6790********
       instance_ids:
         - ephothb6lppn********
       disk_placement_policy: {}
     - id: fhm7mip40dqh********
       folder_id: e1ea8s8l71li********
       created_at: "2022-10-10T05:00:04Z"
       name: disk-1
       type_id: network-hdd
       zone_id: ru-central1-a
       size: "21474836480"
       block_size: "4096"
       product_ids:
         - f2euv1kekdgv********
       status: READY
       source_image_id: fd88d14a6790********
       instance_ids:
         - fhm1c7u23aiq********
       disk_placement_policy: {}
      ```

  1. Add disks to the schedule:

     ```bash
     yc compute snapshot-schedule add-disks sched-1 \
       --disk-id epdcq9g3co9s********,fhm7mip40dqh********
     ```

     Result:

     ```text
     done (3s)
     id: fc8bplhqmh2b********
     folder_id: e1ea8s8l71li********
     created_at: "2022-10-03T13:28:01Z"
     name: sched-1
     description: Daily
     labels:
       machine: file-server
     status: ACTIVE
     schedule_policy:
       start_at: "2022-12-31T16:04:05Z"
       expression: 10 16 ? * *
     snapshot_count: "7"
     snapshot_spec: {}
     ```

{% endlist %}

#### See also {#see-also}

* [Disabling and enabling a disk snapshot schedule](stop-and-start-schedule.md).
* [Updating a disk snapshot schedule](update-schedule.md).
* [Deleting a disk snapshot schedule](delete-schedule.md).
* [Creating a disk snapshot manually](../disk-control/create-snapshot.md).