---
sidebar_position: 5
---

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

# Volumes

A **Volume** is persistent storage that lives outside any single pod. Attach one to a pod and the data survives pod termination, can be moved to another pod later, and never has to fit on the host's local disk.

When attached, the volume is mounted at **`/mnt`** inside your container. Use it for datasets, model weights, training checkpoints, evaluation outputs — anything you don't want to lose when a pod is deleted.

> Volumes are backed by S3-compatible object storage. Throughput is fine for streaming/loading, but sustained random I/O is slower than the pod's local disk. For tight inner loops, copy the working set into `/root` and write results back to `/mnt`.

## Create a volume

In the dashboard:

1. Click **Volumes** in the sidebar.
2. Click **ADD NEW +** (top-right).
3. Enter a **Name** (letters, digits, hyphens, underscores, dots, spaces, and `,()!?/` — max 100 chars). Description is optional.
4. **Create**.

![Volumes page with rate calculator and existing volume](./assets/volumes-list.png)

The page shows your volumes with their **Size**, **Files**, and **Date created**. The **Current Rate** widget at the top is a calculator — set Storage Amount × Time Period to estimate hourly cost.

## Attach a volume to a pod

When deploying a pod (Browse Pods → **RENT NOW**):

1. Find the **Volume** field on the Create Pod form.
2. Open **Choose Volume** and select an existing volume — or click **Add a Volume** to create one inline.
3. **Deploy**. The volume mounts at `/mnt` automatically.

To switch volumes later, open the pod detail page and click **Volume** in the top action bar.

:::warning One volume per pod
A volume can only be attached to one pod at a time. To move it to another pod, detach (or terminate) the current pod first.
:::

## Use it from inside the pod

```bash
# SSH into the pod
ssh root@<pod-ip> -p <pod-port>

# Volume is at /mnt
ls /mnt
df -h /mnt    # confirm it's mounted

# Suggested layout
/mnt/
├── datasets/      # input data
├── models/        # trained weights you want to keep
├── checkpoints/   # in-progress training state
└── outputs/       # results, evaluation reports
```

Tip: keep the working set on `/root` (the local mount, fast disk) during training, then `rsync /root/checkpoints/ /mnt/checkpoints/` between epochs.

## Billing

- Charged **per-GB / per-hour** based on the actual data stored, not the allocated capacity.
- Continues to accrue while the volume is **detached** — your data stays available.
- Stops only when you **delete** the volume (irreversible).
- Pay-as-you-use AWS pass-through — no markup. The Volumes page calculator at the top of the list shows the current `$/GB/hour` rate.

## Delete a volume

In the **Volumes** list, click the trash icon on the row. **This permanently destroys the data** — there is no undo and no archive.

If you might want the data back, take a [Backup](./backups) of the relevant pod first, then delete the volume.

## Limits & rules

| Rule | Detail |
|---|---|
| Mount point | Always `/mnt` |
| Pods per volume | 1 at a time |
| Size cap | None — volumes scale automatically |
| Name pattern | `[a-zA-Z0-9\s\-_.,()!?/]+`, 1–100 chars |

<details>
<summary>For agents and automation: API + CLI</summary>

```bash
# List your volumes
curl https://lium.io/api/volumes \
  -H "X-API-Key: $LIUM_API_KEY"

# Get one
curl https://lium.io/api/volumes/<volume_id> \
  -H "X-API-Key: $LIUM_API_KEY"

# Create one
curl -X POST https://lium.io/api/volumes \
  -H "X-API-Key: $LIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "my-dataset", "description": "Training data v2"}'

# Delete one (data is gone — no recovery)
curl -X DELETE https://lium.io/api/volumes/<volume_id> \
  -H "X-API-Key: $LIUM_API_KEY"
```

CLI: `lium volumes list / new / rm` ([reference](/developers/cli/reference/volumes)). Get an [API key](./api-keys) first.
</details>
