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

# Volume & snapshot

> Block volume untuk data VM, snapshot volume dan VM, dan restore.

Endpoint di halaman ini butuh `storage:read` (baca) atau `storage:write` (ubah).

## Buat dan pasang volume

**1. Buat volume di zona VM**

```bash theme={null}
curl -s -X POST "$LEVIA_API/volumes" \
  -H "Authorization: Bearer $LEVIA_KEY" -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"name": "data-1", "region_id": "'$REGION'", "zone_id": "'$ZONE'", "size_gb": 20, "tier": "ssd"}'
```

`tier`: `hdd`, `ssd`, atau `ssd-performance`. Volume ditagih per GB per bulan. Status `creating` sampai `available`.

**2. Pasang ke VM**

```bash theme={null}
curl -s -X POST "$LEVIA_API/volumes/$VOL/attach" \
  -H "Authorization: Bearer $LEVIA_KEY" -H "Content-Type: application/json" \
  -d '{"vm_id": "'$VM'"}'
```

VM harus di zona yang sama dengan volume. Status `attaching` lalu `in-use`; `device_path` (mis. `/dev/vdb`) menunjukkan disk di dalam VM.

**3. Format dan mount di dalam VM**

Volume baru masih kosong. Buat filesystem dan mount dari dalam VM, mis. `mkfs.ext4 /dev/vdb`, lalu `mount /dev/vdb /data`.

## Perbesar, lepas, hapus

| Aksi | Endpoint | Catatan |
| - | - | - |
| Perbesar | `POST /volumes/{id}/resize` `{"size_gb": 40}` | Hanya bisa membesar. Volume yang terpasang diperbesar tanpa dilepas; perbesar filesystem dari dalam VM (mis. `resize2fs`). |
| Lepas | `POST /volumes/{id}/detach` | Unmount dulu di dalam VM supaya data aman. Status `detaching` lalu `available`. |
| Hapus | `DELETE /volumes/{id}` | Lepas dulu dan hapus snapshot-nya. Volume yang masih punya snapshot ditolak `409 volume_has_snapshots`. |

Cari volume yang terpasang ke sebuah VM: `GET /volumes?vm_id=…`.

## Snapshot volume

```bash theme={null}
curl -s -X POST "$LEVIA_API/volumes/$VOL/snapshots" \
  -H "Authorization: Bearer $LEVIA_KEY" -H "Content-Type: application/json" \
  -d '{"name": "sebelum-upgrade"}'
```

* Jawaban `202`; status `provisioning` sampai `active`. Volume yang terpasang di-quiesce sebentar.
* Snapshot ditagih per GB yang benar-benar terpakai.
* Daftar: `GET /volumes/{id}/snapshots`, atau `GET /snapshots?source_type=volume&source_id=…`.

### Restore ke volume baru

```bash theme={null}
curl -s -X POST "$LEVIA_API/volumes/$VOL/snapshots/$SNAP/restore" \
  -H "Authorization: Bearer $LEVIA_KEY" -H "Content-Type: application/json" \
  -d '{"name": "data-1-restored"}'
```

Restore membuat volume **baru** di zona yang sama; volume sumber tidak diubah. `size_gb` opsional. Status volume baru `restoring` sampai `available`, lalu pasang seperti volume biasa.

## Snapshot VM

Snapshot disk utama VM (opsional dengan volume terpasang, `include_volumes: true`) dibuat lewat `POST /vms/{id}/snapshots`. Lihat [Siklus hidup VM](https://docs.leviacloud.com/produk/vm.md#snapshot-vm).

## Daftar dan hapus snapshot

`GET /snapshots` memuat snapshot VM dan volume, dengan filter `source_type` (`vm`/`volume`), `source_id`, `region_id`, `status`, dan `name`.

| Hapus | Endpoint |
| - | - |
| Snapshot apa pun | `DELETE /snapshots/{id}` |
| Snapshot volume | `DELETE /volumes/{id}/snapshots/{snapshot_id}` |

Jawaban `200` (`status: "deleted"`) atau `202` (`status: "deleting"`).


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