> See the full index of documentation pages at https://docs.zettabyte.com/llms.txt.

# Storage and PVCs

> How storage works on zCLOUD, and how to make sure your data survives.

Source: https://docs.zettabyte.com/docs/models-data-storage/storage

Last updated: 2026-07-21

**Storage Manage** covers two storage systems. Stat cards at the top summarize `PVC` quota, S3 quota, and overall usage.

## The mental model

Think of a Storage Volume (`PVC`) as a persistent file system, like a network drive attached to your work. It exists independently of any single task and keeps your files between runs. This is the storage concept to internalize; everything else is a variation on it.

## Storage Volumes (PVCs)

The **PVC Storage Manage** tab lists shared volumes, also referred to as Storage Volumes elsewhere in the console. Each volume shows Name, Type, Usage, Capacity, Status, and Creation Time. Volumes are NFS-backed Kubernetes `PVCs`. The row menu opens **Update PVC**, where you can change the capacity.

- Your tenant starts with a default volume, `ZB shared data PVC`.
- You can create additional `PVCs` and attach one or many to a task.
- A `PVC` holds folders and files (code, datasets, checkpoints, weights) that persist across tasks.
- Size and quota: a `PVC`'s size is bounded by the storage allocated to your tenant. Quota is per-tenant, and getting more capacity is handled through your distributor or account owner.

## What persists vs. what's cleared

> [!WARNING]
> **This is the one thing every user must know**
> When a task ends, anything not written to a persistent volume (a `PVC`) or to S3 is **deleted**. Ephemeral and in-container data do not survive. Always write outputs you care about (weights, checkpoints, logs you want to keep) to a mounted `PVC`.

## Mounting storage into a task

In task, IDE, and deployment wizards, a Storage Volume mounts a `PVC` into your container at a path you specify.

- Attach a **Storage Volume** (`PVC`) and choose a mount directory, the path it appears at inside your pod. A common convention is `/workspace`; keep it consistent with your image's working directory so paths stay predictable.
- Mount directories must be unique within a task.
- Example: mount `ZB shared data PVC` at `/workspace`, then have your training write to `/workspace/checkpoints`.

## Ephemeral volumes

An **Ephemeral Volume** is fast, memory-backed scratch space, sized in GiB. Use it for temporary intermediate data. It is cleared when the task ends, so never store anything you need to keep here.

## S3

The **S3 Object Storage** tab lists buckets with Bucket Name, Object Count, Storage Quota, Storage Usage, Access Permission, and Creation Time.

You can also bring your own object storage into a task. Provide an access key, a secret key, a mount directory, a region, and a path, or an external AWS S3 URL. This is useful for large datasets and artifacts you manage outside zCLOUD. S3 details are configured per task today, so provide them again in each task, IDE, or deployment wizard that needs the bucket.

The object store is S3-compatible, so you can access it with the AWS SDK. From a job or IDE, create a client with your endpoint and keys:

```python
import boto3

s3 = boto3.client(
    "s3",
    endpoint_url="YOUR_S3_ENDPOINT",
    aws_access_key_id="YOUR_ACCESS_KEY",
    aws_secret_access_key="YOUR_SECRET_KEY",
)

for bucket in s3.list_buckets()["Buckets"]:
    print(bucket["Name"])
```

## Limits

- Quota is per-tenant; increases go through your distributor or account owner.
- Ephemeral volumes are memory-backed and volatile.
- Mount directories must be unique per task.

## Troubleshooting

- Data disappeared after a task: it was not on a `PVC` or S3. Ephemeral and container-local data is cleared at task end. Write anything you need to keep to a mounted `PVC` or to S3.
- Cannot mount two volumes: mount directories must be unique. Give each volume a distinct path.
- Out of space: the `PVC` exceeded the tenant quota. Request more capacity via your distributor or account owner.
