Creating a volume
Creation is asynchronous.POST /v1/volumes answers 202 with the volume
in creating; poll GET /v1/volumes/{volume_id} until status becomes
available or error.
- Console
- API
- CLI
- Go
Go to Storage → Volumes and choose Create Volume. Give it a
Name, leave Source on Blank volume, then set Size (GB) and
pick a Tier — SSD or NVMe. The Tags card takes the same
key/value pairs the API does.The size field tells you the IO allowance the volume will get as you type,
because size and tier decide it together.
unique within your account
Matches
^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$. It appears in the CRN, so it
has to be URL-safe. A duplicate name is 409 VOLUME_NAME_EXISTS.1–16384
required
The ceiling matches what a single block device is capped at elsewhere in the
industry. It is a per-volume sanity bound, not your quota — aggregate usage
is gated separately.
ssd | nvme
required
See below.
GET /v1/volume-types lists exactly what you may create on.Volume types
GET /v1/volume-types lists what you can provision on. The tier decides the
IO ceiling your volume gets, and that ceiling scales with size rather than
being flat — so the performance tracks what you paid for.
ssd
12 IOPS and 0.25 MiB/s per GB. Balanced cost against throughput.Floor 300 IOPS / 25 MiB/s, ceiling 16,000 IOPS / 250 MiB/s.
nvme
30 IOPS and 0.5 MiB/s per GB. Highest IOPS, lowest latency.Floor 1,000 IOPS / 50 MiB/s, ceiling 32,000 IOPS / 500 MiB/s.
The floors exist so a small volume is still usable, and the ceilings exist so
one large volume cannot consume a meaningful fraction of the tier on its own.
A single guest issuing enough concurrent IO can otherwise reach a
double-digit percentage of everything the tier serves.
Attaching to an instance
Attachment is a compute operation — the device binding, the guest hot-plug and the boot order all live on the instance side:- Console
- API
- CLI
- Go
Open the volume from Storage → Volumes and choose Attach to
instance. Pick the Instance; Device name, Mount path and
Filesystem are optional. Leaving Device name blank assigns the next
available name, and setting a Mount path mounts the volume there inside
the guest — formatting it first only if it is blank.
available to in_use, and detaching puts it back to
available. See compute for the device slots, mount options and the
detach call.
What happens when the instance is deleted
Each attachment carries adelete_on_termination flag, and the default differs
by how the volume got there:
PATCH /v1/instances/{instance_id}/volumes/{volume_id} changes the flag on an
existing attachment. Set it deliberately on anything holding data you care
about — the boot volume default is the one that deletes.
In the console the flag is a Delete on termination switch in the
instance’s list of attached volumes, not on the volume’s own page. It
belongs to the attachment, so that is where it lives.
The boot disk itself cannot be detached: unplugging it would take the guest’s
root filesystem with it, so the call is refused. Everything a boot volume cannot
do — extend included — follows from that.
Growing a volume
- Console
- API
- CLI
- Go
Open the volume and choose Extend, or use the Extend row action on
Storage → Volumes. The Extend Volume dialog shows Current Size
and takes a New Size (GB).
202 with the volume in extending and returns to
available at the new size. new_size_gb must be strictly greater than the
current size; anything else is 400 VOLUME_SIZE_INVALID.
Growing the volume does not grow the filesystem inside it. Once the volume is
bigger the guest sees the new size on its next device rescan, and expanding the
partition and filesystem is yours to do in the guest.
Deleting a volume
DELETE /v1/volumes/{volume_id} answers 202, flips the row to deleting
and tears the volume down asynchronously. Poll until the volume disappears.
Two refusals to know about:
409 VOLUME_IN_USE
409 VOLUME_IN_USE
The volume is attached. Detach it from the instance first. Delete is also
refused during the transient states —
creating, extending, deleting —
so a second operation cannot race the first.409 VOLUME_HAS_SNAPSHOTS
409 VOLUME_HAS_SNAPSHOTS
A volume that still has snapshots will not delete, because those snapshots
are children of the volume’s data and removing the parent underneath them
is not possible. Delete the snapshots first, then the volume.This is a clean refusal rather than a partial teardown, so nothing is lost
by trying.