Skip to main content

Volumes

A volume is a collection of blocks presented to the operating environment as a single disk-like storage unit. In many systems, including Linux and Windows, a logical volume can span multiple physical disk drives. In the StorONE (S1) system, the underlying blocks for a volume are similarly allocated from a pool of physical disk drives.

The S1 storage engine provides the ability to customize many attributes of a volume, also called a virtual storage container (VSC). For more information, see Virtual Storage Containers.

Creating a volume

When you create a volume, you must specify an application instance for the logical volume. To list all application instances, run the applications list command. If you do not have any existing applications, you must create one before you can create a volume.

To create a volume, use the applications volumes create command.

Usage:

applications volumes create --application=<name>
    --volume=<name>
    --capacity=<capacity>
    --pool=<name> --n=<n> --k=<k>
   [(--metadataPool=<name> --metadataN=<n> --metadataK=<k>)]
   [(--tierPools=<name...> --tierN=<n...> --tierK=<k...>)]
   [(--tierSizes=<tierCapacity...> --evacuationThresholds=<thresholds...> --lowerThresholds=<thresholds...>)]
   [--groupedVolume=<name>|--cgid=<numbers>|(--encryptionKey=<encryptionKey> [--saveEncryptedRecoveryKey])]
   [--sectorSize=<sectorSize>]
   [(--stripedPools=<name...> [--stripedMetadataPools=<name...> --log2StrideSectors=<numbers>])]
   [--snapshotCapacity=<capacity>]
   [--disableSpaceReclamation]
   [--force]

Options

Due to the extensive customizability of a virtual storage container in the S1 system, the applications volumes create command has many options. To improve the readability, the following sections group the options into required and optional options, as well as subgroups based on functionality.

Required

Options and arguments Description
--application=<app_name> Specifies the application to assign the volume to. Applications are namespaces for volumes.
--volume=<vol_name> Specifies the name for the volume. Replace <vol_name> with a name of your choice. This name must be unique within the specified application.
--capacity=<capacity> Specifies the volume capacity. Replace <capacity> with a number appended with a storage unit (GB, GiB, TB, TiB, and so on).
--pool=<pool> Specifies the storage pool for the volume.
--n=<n> Specifies the number of data fragments for each write operation. Replace <n> with the number of fragments. This must be a power of two, such as 1, 2, 4, or 8.
--k=<k> Specifies number of parity fragments for each write operation. This corresponds to the number of simultaneous drive failures that the logical volume can sustain before data integrity can be compromised. StorONE recommends a value of 2 for most situations. This provides a good balance between data protection and storage overhead.

For more information on the N and K values, see Data resiliency in VSCs.

Optional

Metadata options

Options and arguments Description
--metadataPool=<pool> Specifies the metadata storage pool. Replace <pool> with a the name of the pool to use for metadata storage. For best performance, always specify an SSD pool for metadata.
--metadataN=<n> Specifies the number of data fragments for each metadata write operation. Replace <n> with the number of fragments. This must be a power of two, such as 1, 2, or 4. For best results specify a value of 1 or 2.
--metadataK=<k> Specifies number of parity fragments for each metadata write operation. This corresponds to the number of simultaneous drive failures that the logical volume can sustain before data integrity can be compromised. StorONE recommends a value of 2 for most situations. This provides a good balance between data protection and storage overhead.

Tiering options:

The following options control the tiering configuration of the volume. For more information about tiering, see Tiering.

For tiered volumes, the StorONE platform currently supports only a single upper tier.

Options and arguments Description
--tierPools=<pool> Specifies the storage pool to use for the upper tier. Replace <pool> with the name of the SSD or NVMe storage pool you want to use. All incoming writes to the virtual storage container are first written to the upper tier. When the evacuation thresholds are exceeded, the evacuation process moves blocks to the lower tier.
--tierN=<n> Specifies the number of data fragments for each upper tier write operation. Replace <n> with the number of fragments. This must be a power of two, such as 1, 2, 4, or 8.
--tierK=<k> Specifies number of parity fragments for each upper tier write operation. This corresponds to the number of simultaneous drive failures that the logical volume can sustain before data integrity can be compromised. StorONE recommends a value of 2 for most situations. This provides a good balance between data protection and storage overhead.
--tierSizes=<capacity> Specifies the capacity for the upper tier. Replace <capacity> with a number appended with a storage unit (GB, GiB, TB, TiB, and so on). This does not change the overall volume size. The tier size cannot be larger than the volume size.
--evacuationThresholds=<percent> Sets the evacuation threshold for the upper tier. When the maximum threshold is exceeded, the evacuation process moves data blocks from the upper tier to the lower tier, regardless of the idleness of the system. Replace <percent> with either a decimal representation of a percentage, or a number appended with the percent symbol (%). For example, fifty percent can be represented as either 0.5 or 50%. For most situations, a threshold of 50 to 65 percent works well.
--lowerThresholds=<percent> Sets the opportunistic evacuation threshold for the upper tier. When this threshold is exceeded, if the system is idle, the evacuation process moves data blocks from the upper tier to the lower tier. Replace <percent> with either a decimal representation of a percentage, or a number appended with the percent symbol (%). For example, ten percent can be represented as either 0.1 or 10%. For most situations, a lower threshold of 10 to 15 percent works well.

Consistency group options

A consistency group (CG) is a collection of virtual storage containers that are consistent with each other at any given point in time. This is particularly important for snapshots and recovery for applications that use multiple volumes. The most common example of this is a database that uses separate volumes for the database storage and the transaction logs. If the database and transaction logs are recovered separately and are not consistent with each other, the restored database is not usable.

The S1 system generates consistency groups automatically. You cannot create or delete consistency groups manually. When creating a new volume, you can specify an existing consistency group to join. If you do not specify an existing consistency group, the system automatically creates a new one. Because the assigned consistency group for a volume cannot be modified after creation, if you need to add a volume to a consistency group, you must create a new volume and specify the consistency group to join.

To create a volume within an existing consistency group, use either the --groupedVolume or the --cgid option.

Options and arguments Description
--groupedVolume=<name> Specify the name of an existing volume to join the consistency group containing that volume.
--cgid=<cg_id> Specify the consistency group ID to join. To see the consistency group IDs for your existing volumes, run the command applications volumes list --consistencyGroups.

Encryption options

Encrypting a volume is optional and must be handled with great care. If you lose the volume encryption key, you will lose access to the encrypted data. You can only enable encryption on a new volume. You cannot encrypt an existing volume.

The StorONE system supports both software-based encryption and self-encrypting drives (SED). When using SEDs, every time you reboot, the S1 system will prompt you for your SED key.

If you do not supply S1 with the SED key, you will not be able to use any of the volumes that use the encrypted drives. For example, if you have five different virtual storage containers using a storage pool with SEDs, and you cannot provide the S1 system with the encryption key, then you cannot use any of those five volumes.

In contrast, S1 software-based encryption allows you to encrypt on a per-volume basis, using standard AES-256 encryption. You can specify an encryption key for each volume.

Volume encryption is optional. If you enable encryption, make sure that you save the volume encryption key. You will be asked for the volume encryption key every time the system is restarted. If you do not provide the encryption key, you cannot use the volume..

To prevent losing a volume due to losing the encryption key, StorONE provides the option to store your volume encryption key safely with StorONE. If you use this option, StorONE can help you to recover a volume encryption key if needed. When you use the --saveEncryptedRecoveryKey option, the encryption key is encrypted with the StorONE public key and stored in your cloud relay database.

Options and arguments Description
--encryptionKey=<encryptionKey> Specifies the encryption key for the volume. Replace <encrptionKey> with an encryption key of your choice, and make sure you store the encryption key securely somewhere.
--saveEncryptedRecoveryKey Saves your encryption key securely in the database of your cloud relay server. Contact StorONE if you need assistance recovering this encryption key.

All volumes in a consistency group are encrypted with the same encryption key. When you create a new volume in an existing consistency group, the new volume is encrypted with the key used to encrypt the original volume.

Sector size options

If you are creating a block volume for use with VMWare ESXi, make sure to set the sector size to `512b`. VMWare block storage datastores do not support a 4K sector size.

Options and arguments Description
--sectorSize=<sectorSize> Specifies the sector size of the volume; replace <sectorsize> with either 512b or 4K. If the volume will be used as block storage for a VMWare VMFS datastore, use 512b. For most other use cases, 4K typically performs better.
--log2StrideSectors=<number> To configure a striped volume, replace <number> with the base 2 exponent for the stripe unit (chunk size) in bytes. For example, specify 20 for a 1MB chunk size (2^20 = 1048576).

Snapshots and space reclamation options

Options and arguments Description
--snapshotCapacity=<capacity> Specify the soft capacity limit on your snapshot storage. Replace <capacity> with a number appended with a storage unit (GB, GiB, TB, TiB, and so on). When snapshot storage consumption exceeds this value, the configured notification targets will receive alerts. Because this is a soft limit, no actions are taken aside from alerting. There are no hard limit settings for snapshot capacities.
--disableSpaceReclamation To disable space reclamation (UNMAP) support for the volume. This can improve performance for some volumes, but when data is deleted, the space reclamation is not reflected in the volume until you manually run the space reclamation process (using the applications filesystems fstrim run command).

Volume creation examples

  1. To create a volume videos on application instance training with a capacity of 2 TB using the pool HDD-1 with 8 data fragments and 2 parity fragments:

    applications volumes create --application training --volume videos  --capacity 2T --pools HDD-1 --n 8 --k 2 
  2. To create a volume exchange with the following configuration:

    • Application instance: --application=archives
    • Volume capacity: --capacity=100GB
    • Volume created over two pools, HR and sales, where:
      • For pool HR with n=4 data fragments and k=1 data redundancy.
      • For pool sales with n=8 data fragments and k=3 data redundancy.
    • Pools for upper tiers speed1, speed2, and speed3:
      where:
      • For upper tier pool speed1, tierN=2 data fragments and tierK=1 data redundancy with --tierSizes=10GB, with --evacuationThresholds=70% and --lowerThresholds=5%.
      • For upper tier pool speed2, tierN=16 data fragments and tierK=3 data redundancy with --tierSizes=5GB, with --evacuationThresholds=75% and --lowerThresholds=10%.
      • For upper tier pool speed3, tierN=4 data fragments and tierK=1 data redundancy, and --tierSizes=2GB, with --evacuationThresholds=80% and --lowerThresholds=15%
    • The volume is mapped to (an already existing) consistency group id 600.
    applications volumes create --application exchange --volume archives --capacity 100GB --pools HR sales --n 4 8 --k 1 3 --tierPools speed1 speed2 speed3 --tierN 2 16 4 --tierK 1 3 1 --tierSizes 10GB 5GB 2GB --evacuationThresholds 70% 75% 80% --lowerThresholds 5% 10% 15% --cgid 600   

Editing a volume

You can change the configurations of existing volumes with the applications volume edit command.

Usage

applications volumes edit --application=<app_name> --volume=<vol_name> [--newname=<new_vol_name> --capacity=<capacity> --snapshotCapacity=<capacity> --tierSizes=<tierCapacity…> --evacuationThresholds=<percentage…> --lowerThresholds=<percentage…> (--enableSpaceReclamation | --disableSpaceReclamation)]

Options

Options and arguments Description    
--application=<app_name> To specify the application instance, replace <app_name> with the name of the app instance of the volume.  
--volume=<vol_name> To specify the volume, replace <vol_name> with the name of the volume you want to edit.    
--newname=<new_vol_name> To change the name of the volume. Replace <new_vol_name> with a name of your choice.    
--capacity=<capacity> To edit volume capacity, replace <capacity> with a number appended with a storage unit (MB, GB, TB, PB).    
--snapshotCapacity=<capacity> To edit the soft capacity threshold of your snapshot storage, replace <capacity> with a number appended with a storage unit (MB, GB, TB, PB).    
--tierSizes=<tierCapacity> To edit tier cache capacity for each of the pools in the upper tiers, replace <tiercapacity> with a numerical storage unit (appended with KB, MB, GB,…) that corresponds to --tierPools.    
--evacuationThresholds=<percent…> To edit the maximum threshold for each pool in the list of upper tiers. When the maximum threshold exceeded, the volume moves data to a lower tier (previous pool in the list of upper tiers). Replace <percent…> with a list of numerical values between one and 100 (appended with %) to set the maximum threshold value of each pool in the list.    
--lowerThresholds=<percent…> To edit the minimum threshold value for each pool in the list of upper tiers. When reaching the minimum threshold, the pools stop moving data to a lower tier. Replace <percent…> with a list of numerical values (one for each volume in the tier) between one and 100, appended with % to set the minimum threshold value of each pool in the list.    
--enableSpaceReclamation To enable space reclamation (UNMAP) support for the volume.    
--disableSpaceReclamation To disable space reclamation (UNMAP) support for the volume.  

Examples

In the following examples, we edit the volume archives mapped to application instance emails.

  1. To rename the existing volume archives to active and to change its capacity to 800GB, run:

    applications volumes edit --application emails --volume archives --rename active --capacity 800GB
    
  2. To change the capacity of the existing volume archives to 3TB run:

    applications volumes edit --application emails --volume archives  --capacity 3TB  
    
  3. Assuming that the existing volume archives is tiered between three pools, consider the following list of changes:

    • Change the capacity of the volume to 10TB
    • Change tier sizes to 10GB, 4GB, and 2GB.
    • Enable space reclamation. To apply the above changes on the existing volume archives, run:
    applications volume edit --application emails --volume archives --capacity 10TB --tiersizes 10GB 4GB 2GB 
        --enableSpaceReclamation 
    

Listing volumes

To list volumes, use the applications volumes list command.

Usage:

applications volumes list [--application=<app_inst> --volume=<vol>] [--basic] [--cg] [--snapshot]
[--connectivity] [--capacity] [--fs] [--rep] [--vms]

Options:

Options and arguments Description
--application=<app_inst> To list only volumes from the specified app instance, replace <app_inst> with the application instance.
--volume=<vol> To list only the specified volume, replace <vol> with a volume name.
--basic To display only volume names and their ids.
--cg To display the volume consistency group within the context of the app instance.
--snapshot To display the point in time (PIT) (of the volume snapshots).
--connectivity To display the connectivity status of the volume.
--capacity To display volume statistics (capacity usage for User Data, Upper Tier, Retention, vRAID)
--fs To display file system information ("Mount State" and "Replication Metadata)
--rep To display information about volume replication.
--vms To display information about VMware virtual machines within the context of the app instance.

Examples

  1. To list all volumes, run:

    applications volumes list
    
  2. To list volumes from the emails application, run:

    applications volumes list --application emails
    
  3. To list only the name and id of volume SR, run:

    applications volumes list --volume SR --basic
    

Deleting a volume

To delete a volume, use the applications volumes delete command.

Usage:

applications volumes delete --application=<app_name> --volume=<vol_name> [--force]

Options:

Options and arguments Description
--application=<app_name> To specify the app instance mapped to the volume you want to delete.
--volume=<vol_name> To specify the name of the volume that you want to delete.
--force To delete without prompting for confirmation.

Examples

  1. To delete volume speed that mapped to application instance archive, run:
     applications volumes delete --application archive --volume speed 
  2. To delete volume speed that mapped to application instance archive without prompting for confirmation, run:
     applications volumes delete --application archive --volume speed --force