> ## Documentation Index
> Fetch the complete documentation index at: https://docs.basaltic.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Instantáneas y políticas

> Instantáneas puntuales, restauración desde una y los horarios que las toman por usted.

## Snapshots

Una instantánea es una copia de un punto en el tiempo de un volumen:

<Tabs>
  <Tab title="Console">
    Vaya a **Storage → Snapshots** y elija **Create Snapshot**, luego elija el **Volume** y déle un **Name**. La página del propio volumen tiene un botón **Create
    Snapshot** que abre el mismo formulario con ese volumen ya seleccionado; está deshabilitado a menos que el volumen esté `available` o `in_use`.
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    POST /v1/snapshots
    { "volume": "5f8d2c1a-...", "name": "pre-upgrade" }
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic storage snapshot create --volume vol-1 --name pre-upgrade
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    snap, err := storage.New(cfg).CreateSnapshot(ctx, &storage.SnapshotCreateRequest{
        Volume: volumeID,
        Name:     "pre-upgrade",
    })
    ```
  </Tab>
</Tabs>

<Steps>
  <Step title="Tómalo">
    Permitido contra un volumen en `available` **o** `in_use` — no tiene que desconectar a snapshot. La instantánea se crea de forma asincrónica (`202`, estado `creating`).
  </Step>

  <Step title="Esperar por disponibilidad">
    Consulta `GET /v1/snapshots/{snapshot_id}`. `available` significa que la instantánea está completa y se puede restaurar; `error` significa un error de error activo — lea `faults`.
  </Step>
</Steps>

Los nombres de las instantáneas se fijan después de su creación porque las directivas de IAM se refieren a las instantáneas por sus CRN. Las actualizaciones que contienen `name` devuelven un error de validación, incluyendo valores sin cambios, vacíos o `null`. Las instantáneas existentes conservan sus nombres actuales.

Un nombre de instantánea es único **por volumen**, por lo que `nightly` en dos volúmenes diferentes está bien. `size_gb` es el tamaño del volumen congelado en el momento en que se tomó la instantánea — el volumen puede haberse extendido desde entonces, así que no lo lea como el tamaño actual del volumen, y no lo lea como el espacio que ocupa la instantánea.

<Warning>
  Al tomar una instantánea de un volumen adjunto, se captura el dispositivo tal como está en ese instante, incluido todo lo que el invitado haya almacenado en búfer pero que aún no se haya borrado. Para una base de datos o cualquier otra cosa con estado en memoria, quiete o realice un flush dentro del huésped antes de tomar la instantánea si necesita que sea coherente con la aplicación.
</Warning>

<a id="restoring-from-a-snapshot" />

### Restauración desde una instantánea

Restaurar significa crear un **nuevo** volumen a partir de la instantánea. No hay reversión in situ:

<Tabs>
  <Tab title="Console">
    En **Create Volume**, cambie **Source** a **From snapshot** y elija la **Snapshot**. **Size (GB)** debe ser al menos el tamaño de la instantánea, y el **Tier** es el que usted elija: una restauración no está vinculada al nivel en el que estaba el volumen de origen.

    **Storage → Snapshots** también tiene una acción de fila **Create volume from snapshot** que abre el mismo formulario con la instantánea rellenada.
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    POST /v1/volumes
    {
      "name": "app-data-restored",
      "volume_type": "ssd",
      "size_gb": 200,
      "source_snapshot": "7b1e9c4d-..."
    }
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic storage volume create \
      --name restored-01 --volume-type ssd --size-gb 100 \
      --source-snapshot snap-1
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    vol, err := storage.New(cfg).CreateVolume(ctx, &storage.VolumeCreateRequest{
        Name:             "restored-01",
        VolumeType:       "ssd",
        SizeGB:           100,
        SourceSnapshot: basaltic.String(snapshotID),
    })
    ```

    Una restauración es un volumen nuevo, por lo que el nivel es suyo para elegir — no tiene que coincidir con el volumen de la instantánea.
  </Tab>
</Tabs>

La instantánea tiene que estar `available`, y `size_gb` debe ser al menos el tamaño congelado de la instantánea — puede restaurar a un volumen más grande, nunca a uno más pequeño. El volumen restaurado registra `source_snapshot_id`, que es también lo que detiene la retención de cosechar una instantánea de la que algo todavía depende.

<a id="snapshot-policies" />

## Políticas de snapshots

Una política es un programa adjunto a un volumen: tomar una instantánea cada `interval_minutes`, luego mantener como máximo `retention_count` de las instantáneas que creó la política.

<Tabs>
  <Tab title="Console">
    Abra la pestaña **Snapshot schedules** del volumen y elija **Create schedule**. Rellene **Name**, **Every (minutes)**, **Keep** y opcionalmente **Also delete after (days)**, luego elija **Create schedule**.

    Cada fila tiene acciones para editar, pausar o reanudar, y eliminar esa programación. Al editar se abre su configuración; **Save** aplica los cambios.
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    POST /v1/snapshot-policies
    {
      "volume": "5f8d2c1a-...",
      "name": "nightly",
      "interval_minutes": 1440,
      "retention_count": 7,
      "retention_days": 30
    }
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic storage snapshot-policy create \
      --volume vol-1 --name nightly \
      --interval-minutes 1440 --retention-count 7
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    pol, err := storage.New(cfg).CreateSnapshotPolicy(ctx, &storage.SnapshotPolicyCreateRequest{
        Volume:          volumeID,
        Name:            "nightly",
        IntervalMinutes: 1440,
        RetentionCount:  7,
    })
    ```
  </Tab>
</Tabs>

<ResponseField name="volume" type="up to 16 policies per volume" required>
  Cada directiva tiene su propio intervalo, configuración de retención y estado habilitado. Los nombres deben ser únicos en toda la cuenta. Las programaciones superpuestas crean instantáneas separadas, cada una de las cuales cuenta para su cuota y cargos de instantáneas. Una decimoséptima política devuelve `409`.
</ResponseField>

También puede establecer programaciones en cada nuevo volumen de arranque o de datos mientras [inicia una instancia](/es/compute/instances#snapshot-schedules-at-launch).

<ResponseField name="interval_minutes" type="1–43200" required>
  Un **gap mínimo**, no una cadencia exacta. Una instantánea aterriza en o después del intervalo y nunca antes, y puede aterrizar un minuto o dos tarde cuando el pase de programación está ocupado. El mínimo es de un minuto porque es la frecuencia con la que el pase evalúa los horarios; el máximo es de 30 días.
</ResponseField>

<ResponseField name="retention_count" type="1–256" required>
  Cuántas instantáneas de esta política se deben conservar. Cuando una carrera lleva el conteo más allá de esto, el más antiguo va primero.
</ResponseField>

<ResponseField name="retention_days" type="0–3650, default 0">
  Un límite de edad opcional aplicado **encima del** recuento: se obtiene una instantánea fuera de cualquiera de las ventanas. `0` significa que no hay edad limitada.
</ResponseField>

<Note>
  La primera instantánea aterriza un intervalo de ahora. Adjuntar un programa no es en sí mismo una solicitud de instantánea — use `POST /v1/snapshots` si desea una inmediatamente.
</Note>

Los nombres de las políticas de instantáneas también se fijan después de su creación: forman el CRN de la política utilizado por IAM. Al editar una programación, omita `name`; si lo proporciona, incluso sin cambiar, vacío o `null`, devuelve un error de validación. Aún puede cambiar el intervalo, la configuración de retención, la descripción, las etiquetas y el estado habilitado. Las directivas existentes conservan sus nombres actuales.

Las instantáneas programadas se llaman `<policy>-<UTC timestamp>`, por ejemplo `nightly-20260115T000000Z`, y heredan las etiquetas de la política para que una lista le indique qué programa las produjo sin una segunda búsqueda.

<a id="what-retention-will-never-delete" />

### Qué retención nunca se eliminará

Un programa también es un borrador automático, por lo que los límites de lo que puede eliminar importan más que los límites de lo que mantiene:

<Columns cols={2}>
  <Card title="Instantáneas que tomaste a mano" icon="shield">
    La retención solo coincide con las instantáneas que llevan el `snapshot_policy_id` de esta política. Una instantánea creada por una persona no tiene ninguna y nunca es una candidata, independientemente de las etiquetas que tenga.
  </Card>

  <Card title="Instantáneas de algo que depende" icon="git-branch">
    Una instantánea de la que se creó un volumen, incluida una restauración que todavía está en ejecución, se omite y se vuelve a examinar en una ejecución posterior. Se vuelve cosechable una vez que el volumen dependiente ha desaparecido.
  </Card>

  <Card title="La única instantánea más reciente" icon="clock">
    La instantánea más reciente está exenta del límite de **edad**. Un volumen que no se pudo capturar por más tiempo que la ventana nunca pierde todo su historial de esa manera.
  </Card>

  <Card title="Cualquier cosa, mientras está en pausa" icon="pause">
    `enabled: false` detiene las nuevas ejecuciones de instantáneas y las eliminaciones de retención de ser reclamadas. El trabajo ya reclamado antes de que la pausa pueda terminar. Otras políticas del mismo volumen se siguen ejecutando de forma independiente.
  </Card>
</Columns>

<Warning>
  Al reanudar una directiva en pausa, la ventana de retención se aplica de nuevo en su siguiente ejecución. Si se redujo `retention_count` mientras estaba en pausa, todo lo que ahora está fuera de la ventana se cosecha en esa ejecución.
</Warning>

<a id="reading-a-schedules-state" />

### Lectura del estado de una programación

`GET /v1/snapshot-policies/{policy_id}` devuelve donde la política está en su ciclo:

| Campo de juego | Lo que te dice |
| - | - |
| `next_run_at` | Cuando se debe realizar la siguiente instantánea. |
| `last_run_at` | Cuando la política se disparó por última vez. Ausente hasta la primera carrera. |
| `faults` | Por qué una ejecución no produjo una instantánea. Vacía después de una carrera que tuvo éxito. Siempre una `warning` — una ejecución fallida deja `enabled` solo y la política nunca informa `error`. |

`faults` es el campo para comprobar en una programación que ha dejado de producir instantáneas — lleva razones como una cuota de `snapshots` agotada, o un volumen que estaba a mitad de extensión cuando la ventana apareció. El envío, la ejecución y la retención tienen su propio código y se recuperan de forma independiente.

| Código | Significado y recuperación |
| - | - |
| `SNAPSHOT_POLICY_DISPATCH_FAILED` | La directiva no pudo iniciar una ejecución. La siguiente ventana reintenta. |
| `SNAPSHOT_POLICY_EXECUTION_FAILED` | Una ejecución comenzó y no tomó ninguna instantánea. Compruebe la cuota y el estado del volumen. |
| `SNAPSHOT_POLICY_RETENTION_FAILED` | No se pudo obtener una instantánea dentro de la ventana. Más tarde ejecuta retención de reintento. |

La tabla **Snapshot schedules** muestra la ejecución siguiente y la última de cada política y cualquier error activo, de modo que se puede leer una programación detenida sin salir de la consola.

<Info>
  Una ventana perdida cuesta **una** instantánea, no una por ventana perdida. `next_run_at` se vuelve a marcar como `now + interval_minutes` cada vez que se dispara la política, nunca como `previous + interval`, por lo que una programación que no se pudo ejecutar durante seis horas toma una sola instantánea cuando se reanuda en lugar de una ráfaga de recuperación. Cambiar `interval_minutes` re-bases la siguiente ejecución ahora también, por lo que acortar un horario diario a cada hora tiene efecto dentro de la hora.
</Info>

Al eliminar una política, se separa la programación y **se mantienen** todas las instantáneas que ya se han tomado: se convierten en instantáneas ordinarias que usted posee directamente y nunca se vuelven a recolectar. Otras directivas del volumen y sus instantáneas no cambian. El trabajo ya reclamado antes de la eliminación puede terminar. Elimine las instantáneas en sí si eso es lo que quería decir.

<a id="resource-references" />

## Referencias de recursos

Use `volume` con un UUID, CRN o nombre exacto de volumen de propiedad de la cuenta al crear una instantánea o una directiva. Los CRN de instantáneas incluyen su elemento principal, por ejemplo, `crn:storage:sa-saopaulo-1:my-account:volume/data/snapshot/nightly`.

Los filtros de lista utilizan coincidencias exactas de `name` y `crn`. Un filtro `name` de instantánea requiere `volume`; `snapshot_policy` acepta un UUID de política, CRN o nombre de ámbito de cuenta. Las solicitudes de restauración usan `source_snapshot` con un UUID o CRN anidado, ya que no fijan un volumen de origen. Los CRN mal formados devuelven 400; los CRN válidos fuera de la cuenta, región o tipo de recurso solicitado devuelven una página vacía.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.