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

# Storage Tiers

> Configure multi-tier storage in XSDS by mapping device class pools to Cinder volume types, enabling workload-appropriate media selection for NVMe, SSD, and HDD tiers.

## Overview

Multi-tier storage routes different workload classes to appropriate device media
through volume types in the block storage service and pool configurations in XSDS.
Tier configuration is managed through XDeploy's Storage Tiers panel, which
auto-generates the required pool, CRUSH rule, and block storage backend configuration.

<Warning>
  **Administrator Access Required** — This operation requires the `admin` role. Contact your
  Xloud administrator if you do not have sufficient permissions.
</Warning>

<Tip>
  **XDeploy GUI** — Storage tier detection, CRUSH rule creation, and pool configuration can be performed through the [XSDS Storage](/deployment/xsds) interface under the **Storage Tiers** tab. Click **Detect Tiers** to automatically discover device classes. No manual file editing required.
</Tip>

<Note>
  **Prerequisites**

  * Administrator credentials with the `admin` role
  * Device class CRUSH rules created for each tier (see [CRUSH Maps](/services/sds/admin-guide/crush-maps))
  * Access to **XDeploy** (`https://connect.<your-domain>`)
</Note>

***

## Tier Overview

| Tier | Device Class | Pool                | Volume Type | Use Case                          |
| ---- | ------------ | ------------------- | ----------- | --------------------------------- |
| NVMe | `nvme`       | `volumes-nvme`      | `ceph-nvme` | Databases, OLTP, latency-critical |
| SSD  | `ssd`        | `volumes` (default) | `ceph-ssd`  | General-purpose, web, application |
| HDD  | `hdd`        | `volumes-hdd`       | `ceph-hdd`  | Backup, archive, big data         |

***

## Configuring Tiers via XDeploy

<Steps titleSize="h3">
  <Step title="Open Storage Tiers panel" icon="layers">
    Navigate to **XDeploy → Configuration → Storage Tiers**.

    The panel displays detected device classes in the cluster and lets you define
    which tiers to expose as volume types.
  </Step>

  <Step title="Add a new tier" icon="plus">
    Click **Add Tier** and configure:

    | Field            | Description                                                               |
    | ---------------- | ------------------------------------------------------------------------- |
    | **Tier Name**    | Display name (e.g., `NVMe Performance`)                                   |
    | **Device Class** | Physical media class: `nvme`, `ssd`, or `hdd`                             |
    | **Pool Name**    | Name for the storage pool (e.g., `volumes-nvme`)                          |
    | **Volume Type**  | Cinder volume type name exposed to users (e.g., `ceph-nvme`)              |
    | **Default**      | Whether this tier is the default for new volumes without an explicit type |

    <Tip>
      Set the fastest available tier as the default volume type. Users who don't
      specify a type explicitly receive the best performance tier.
    </Tip>
  </Step>

  <Step title="Apply configuration" icon="check">
    Click **Apply**. XDeploy automatically:

    1. Creates the pool with the correct CRUSH rule for the device class
    2. Registers the Cinder backend pointing to the new pool
    3. Creates the volume type with appropriate extra specs
    4. Updates the `_50_ceph_tiers.yml` configuration file

    <Check>New volume type appears in `openstack volume type list` and is available to tenants.</Check>
  </Step>
</Steps>

***

## Manual Tier Configuration

For environments where XDeploy is not managing tier configuration, configure tiers manually.

<Tabs>
  <Tab title="Create Pool and Rule" icon="database">
    ```bash title="Create CRUSH rule for NVMe" theme={null}
    ceph osd crush rule create-replicated \
      replicated_rule_nvme default host nvme
    ```

    ```bash title="Create NVMe-backed pool" theme={null}
    ceph osd pool create volumes-nvme 128 128 replicated
    ceph osd pool set volumes-nvme size 3
    ceph osd pool set volumes-nvme min_size 2
    ceph osd pool set volumes-nvme crush_rule replicated_rule_nvme
    ceph osd pool application enable volumes-nvme rbd
    ```
  </Tab>

  <Tab title="Register Cinder Backend" icon="settings">
    Add the new backend to your Cinder configuration (managed by XDeploy via
    `globals.d/_50_ceph_tiers.yml`):

    ```yaml title="/etc/xavs/globals.d/_50_ceph_tiers.yml" theme={null}
    cinder_ceph_backends:
      - name: ceph-ssd
        pool: volumes
        device_class: ssd
      - name: ceph-nvme
        pool: volumes-nvme
        device_class: nvme
      - name: rbd-1
        pool: volumes

    ceph_default_volume_type: ceph-nvme
    ```

    Then deploy the block storage configuration:

    ```bash title="Deploy Cinder configuration" theme={null}
    xavs-ansible deploy -t cinder
    ```
  </Tab>
</Tabs>

***

## Verifying Tier Configuration

<Tabs>
  <Tab title="Check Volume Types" icon="list">
    ```bash title="List all volume types" theme={null}
    openstack volume type list
    ```

    ```bash title="Show volume type extra specs" theme={null}
    openstack volume type show ceph-nvme -c extra_specs
    ```

    The `volume_backend_name` extra spec should match the Cinder backend name.
  </Tab>

  <Tab title="Test Volume Creation" icon="flask-conical">
    ```bash title="Create a test volume on the NVMe tier" theme={null}
    openstack volume create \
      --size 10 \
      --type ceph-nvme \
      test-nvme-volume
    ```

    ```bash title="Verify it reaches AVAILABLE status" theme={null}
    openstack volume show test-nvme-volume -c status
    ```

    ```bash title="Clean up test volume" theme={null}
    openstack volume delete test-nvme-volume
    ```

    <Check>Volume reaches `available` status — the tier is correctly configured end-to-end.</Check>
  </Tab>
</Tabs>

***

## Next Steps

<CardGroup cols={2}>
  <Card title="CRUSH Maps" href="/services/sds/admin-guide/crush-maps" color="#197560">
    Configure device class rules that route each tier to the correct physical media
  </Card>

  <Card title="Pool Management" href="/services/sds/admin-guide/pool-management" color="#197560">
    Manage the pools backing each storage tier
  </Card>

  <Card title="Capacity Planning" href="/services/sds/admin-guide/capacity-planning" color="#197560">
    Monitor per-tier utilization and plan expansion
  </Card>

  <Card title="Block Storage — Volume Types" href="/services/storage/volume-types-admin" color="#197560">
    Advanced Cinder volume type configuration for QoS and backend selection
  </Card>
</CardGroup>
