Skip to main content

Volumes

Volumes

A volume is the actual unit of storage StorONE presents to the outside world — as a block device (iSCSI, Fibre Channel, NVMeOF), a file share, or an object store. Every volume lives inside an application and is built from the underlying drive pools using StorONE's own erasure coding (vRAID).

Before creating a volume you'll need:

  • An existing application to create it in (see Applications).
  • At least one drive pool with enough free capacity. Drive pools are managed under Inventory > Resources — see Resources.

Creating a volume

Volume creation has a lot of options, but only a handful are required. Everything else lets you opt into a specific feature — an upper performance tier, encryption, striping across multiple pools, and so on — and can be skipped for a straightforward volume.

The basics: name, capacity, and pool

Every volume needs an application, a name, a capacity, and a drive pool to live on, along with the erasure-coding fragment counts for that pool:

  • N — the number of data fragments each write is split into. Must be a power of two (1, 2, 4, 8, ...).
  • K — the number of parity fragments written alongside the data fragments. This is how many simultaneous drive failures the volume can tolerate before data is at risk. Higher K means more resilience at the cost of more capacity overhead.

Metadata pool

By default, volume metadata is stored on the same pool as the data. If you have a separate, faster (typically SSD) pool available, you can point the volume's metadata at it instead — metadata access patterns are small and random, so putting metadata on flash noticeably improves overall responsiveness for volumes that otherwise live on spinning disk.

Upper tier (autotiering)

A volume can optionally have an upper (faster) tier in addition to its base pool. All writes land on the upper tier first; StorONE evacuates data down to the lower tier once the upper tier's pinned size is exceeded. Configuring an upper tier requires its own pool and fragment counts (--tierN/--tierK), a size, and a pinned size — the amount of data the upper tier tries to keep resident before evacuating the coldest data down.

Two more settings control how the upper tier behaves day to day:

  • Tier mode — whether the upper tier is used for writes only, or also serves reads of data that lives on the lower tier.
  • Tier policy role — whether StorONE's pool-wide tiering policy is allowed to automatically resize this volume's upper tier (and its pinned size) as conditions change, rather than you managing the size manually.

Tiering is a big enough topic that it has its own chapter — see Tiering for how pool-wide policies and sizing suggestions work.

Consistency group

A consistency group (CG) is a set of volumes that are always snapshotted together, so a database and its transaction log (for example) stay consistent with each other in every snapshot. StorONE creates a new CG automatically for every volume unless you tell it to join an existing one — either by naming another volume already in the CG you want (--groupedVolume) or by CG ID directly (--cgid, which you can find via applications volumes list --consistencyGroups).

A volume's CG can't be changed after creation, so decide this up front.

Encryption

A volume can be created encrypted with a key you supply. This can only be done at creation time — you can't encrypt an existing volume after the fact. All volumes sharing a consistency group share the same encryption key. If you lose the key, the data is unrecoverable, so StorONE offers to store a recovery copy of it (encrypted) on your cloud relay server — see the Encryption chapter for details.

Sector size

Sector size is 512b or 4K. If the volume will be used as VMware ESXi block storage (a VMFS datastore), use 512b — VMware doesn't support 4K sector block storage. For most other uses, 4K performs better and is the default.

vRAID+ (striping across multiple pools)

If a single pool doesn't have enough drives or capacity for what you need, you can stripe the volume across additional pools by listing more pools with --stripedPools (and, if you're using a separate metadata pool, --stripedMetadataPools). This is how you build volumes larger or faster than any single pool can provide on its own.

Snapshot capacity and space reclamation

  • Snapshot capacity threshold is a soft limit: when your snapshots' combined size passes this value, your configured notification targets are alerted. It doesn't block anything on its own — there's no hard limit.
  • Space reclamation (UNMAP) is on by default, meaning freed blocks are reported back to the pool as soon as the host tells StorONE they're free. You can disable it at creation time if you have a specific performance reason to; note that once disabled, freed space isn't reclaimed until you next run the file-system trim command.

Using the web interface

  1. Open Application Volumes > Applications, select the application, and click Create Volume (or open Application Volumes > Volumes > Create and pick the application there).
  2. Fill in the sections you need:
    • Application and Volume — the application and the new volume's name.
    • Pools and Capacity — capacity, pool, N, K, snapshot capacity, sector size, space reclamation.
    • Metadata (optional) — a separate metadata pool and its N/K.
    • Tiering / Tiering Advanced Options (optional) — upper tier pool, size, pinned size, N, K, mode, and policy role.
    • Consistency Group (optional) — join an existing CG by volume or CG ID.
    • Encryption (optional) — encryption key and whether to save a recovery copy.
    • vRAID+ (optional) — additional pools to stripe across.
  3. Confirm to create the volume.

Using the CLI

applications volumes create --application=<name>
    --volume=<name>
    --capacity=<capacity>
    --pool=<name> --n=<n> --k=<k>
   [(--metadataPool=<name> --metadataN=<n> --metadataK=<k>)]
   [(--tierPool=<name> --tierSize=<tierCapacity> --tierPinnedSize=<tierCapacity> --tierN=<n> --tierK=<k>)]
   [--tierMode=<name> --tierPolicyRole=<name>]
   [--groupedVolume=<name>|--cgid=<numbers>|(--encryptionKey=<encryptionKey> [--saveEncryptedRecoveryKey])]
   [--sectorSize=<sectorSize>]
   [--stripedPools=<name...> [--stripedMetadataPools=<name...>]]
   [--snapshotCapacity=<capacity>]
   [--disableSpaceReclamation]
   [--force]
Option Description
--application=<name> The application to create the volume in.
--volume=<name> Volume name.
--capacity=<capacity> The volume's capacity. A number with a unit — GB, GiB, TB, TiB, and so on. Single-letter units (G, T, ...) follow the system's configured capacity-unit preference (binary or decimal — see Settings).
--pool=<name> The drive pool to create the volume on.
--n=<n> The data fragments of the volume.
--k=<k> The redundancy fragments of the volume.
--metadataPool=<name> The drive pool to create the volume metadata on.
--metadataN=<n> / --metadataK=<k> Data/redundancy fragments for the metadata.
--tierPool=<name> The pool of the upper tier.
--tierSize=<tierCapacity> The size of the upper (higher-performing) tier.
--tierPinnedSize=<tierCapacity> The size the upper tier attempts to keep resident before evacuating the coldest data to the lower tier.
--tierN=<n> / --tierK=<k> Data/redundancy fragments for the upper tier.
--tierMode=<name> Whether the upper tier is used for writes only, or also receives data read from the lower tier.
--tierPolicyRole=<name> Whether the pool's tier policy may automatically resize this volume's upper tier (and pinned size).
--groupedVolume=<name> Join the consistency group of an existing volume.
--cgid=<numbers> Join a specific consistency group by ID.
--encryptionKey=<key> Encrypt the volume using the supplied key.
--saveEncryptedRecoveryKey Save an asymmetrically-encrypted recovery copy of the key.
--sectorSize=<sectorSize> 512b or 4K (see above).
--stripedPools=<name...> Additional pools to stripe the volume across.
--stripedMetadataPools=<name...> Additional metadata pools for the striped volume.
--snapshotCapacity=<capacity> Snapshot capacity threshold.
--disableSpaceReclamation Disable space reclamation (UNMAP) on this volume.
--force Skip the confirmation prompt.

Examples

Create a simple 2 TB volume named videos on the training application, on the HDD-1 pool with 8 data and 2 redundancy fragments:

applications volumes create --application training --volume videos --capacity 2TB --pool HDD-1 --n 8 --k 2

Create the same volume with an SSD upper tier for better performance, tiered to keep 100 GB resident before evacuating cold data down:

applications volumes create --application training --volume videos --capacity 2TB --pool HDD-1 --n 8 --k 2 --tierPool SSD-1 --tierN 4 --tierK 2 --tierSize 500GB --tierPinnedSize 100GB

Create an encrypted volume and save a recovery copy of the key:

applications volumes create --application finance --volume ledgers --capacity 500GB --pool SSD-1 --n 4 --k 2 --encryptionKey "correct-horse-battery-staple" --saveEncryptedRecoveryKey

Editing a volume

Only a subset of a volume's settings can be changed after creation — the pool, N/K, and metadata configuration are fixed for the life of the volume. What you can change is its name, capacity, snapshot capacity threshold, and (if it has one) its upper tier's size, pinned size, mode, and policy role.

Using the web interface

  1. Open Application Volumes > Volumes, select the volume, and click Edit.
  2. Update the fields you need under Volume Selection and, if the volume has an upper tier, Tiering / Tiering Advanced Options.
  3. Confirm the change.

Using the CLI

applications volumes edit --application=<name> --volume=<name>
   [--newname=<name>]
   [--capacity=<capacity>]
   [--snapshotCapacity=<capacity>]
   [--tierSize=<tierCapacity> --tierPinnedSize=<tierCapacity> --tierMode=<name> --tierPolicyRole=<name>]
   [--force]
Option Description
--application=<name> The application the volume belongs to.
--volume=<name> The volume to edit.
--newname=<name> The new name of the volume.
--capacity=<capacity> The volume's new capacity. Note: if the volume has a file system, it must be clean (unmounted cleanly / not in an inconsistent state) before it can be resized.
--snapshotCapacity=<capacity> Snapshot capacity threshold.
--tierSize=<tierCapacity> The size of the upper (higher-performing) tier.
--tierPinnedSize=<tierCapacity> The size the upper tier attempts to keep resident before evacuating cold data.
--tierMode=<name> Whether the upper tier is used for writes only, or also receives data read from the lower tier.
--tierPolicyRole=<name> Whether the pool's tier policy may automatically resize this volume's upper tier (and pinned size).
--force Skip the confirmation prompt.

Examples

Rename archives to archives-2024:

applications volumes edit --application emails --volume archives --newname archives-2024

Grow the archives volume to 3 TB:

applications volumes edit --application emails --volume archives --capacity 3TB

Increase the upper tier's pinned size to 200 GB:

applications volumes edit --application emails --volume archives --tierPinnedSize 200GB

Listing volumes

Using the web interface

Open Application Volumes > Volumes. Use the toolbar to filter by application/volume and to toggle which additional details are shown (details, consistency groups, snapshots, connectivity, capacity, performance).

Using the CLI

applications volumes list [--application=<name> --volume=<name>] [--details] [--consistencyGroups] [--snapshots] [--blockConnectivity] [--fileConnectivity] [--capacity] [--performance]
Option Description
--application=<name> Filter by application name.
--volume=<name> Filter by volume name.
--details Show volume details.
--consistencyGroups Show consistency groups.
--snapshots Show volume snapshots.
--blockConnectivity Show block connectivity.
--fileConnectivity Show file connectivity.
--capacity Show capacity statistics.
--performance Show performance statistics.

Examples

List every volume:

applications volumes list

List volumes in the emails application along with their consistency group IDs (useful before creating a new volume that should join one):

applications volumes list --application emails --consistencyGroups

Deleting a volume

Deleting a volume that's part of an object store, or part of a striped object store, requires extra care — deleting one stripe of a striped object store removes all the other stripes with it, since they're only useful together. StorONE's confirmation prompt tells you which case you're in before you proceed.

Using the web interface

  1. Open Application Volumes > Volumes, select the volume, and click Delete.
  2. Confirm the deletion — read the confirmation message carefully if the volume is an object store.

Using the CLI

applications volumes delete --application=<name> --volume=<name> [--force]
Option Description
--application=<name> The application.
--volume=<name> The volume to delete.
--force Skip the confirmation prompt.

Examples

Delete the speed volume from the archive application:

applications volumes delete --application archive --volume speed

Delete it without a confirmation prompt:

applications volumes delete --application archive --volume speed --force

See also: Applications · Tiering · Encryption · Recycle Bin (recovering a deleted volume) · Resources (managing the drive pools volumes are built on)