OpenNebula Datastore on FlashArray Quick Start Guide

OpenNebula

Audience
Public
Source Type
Documentation

OpenNebula's Everpure SAN Datastore provides production-ready, native integration with FlashArray block storage, enabling end-to-end control of volumes, snapshots, and clones directly from OpenNebula—from initial provisioning through cleanup. Host connectivity is fully automated using Everpure's host and host group model, with robust iSCSI and multipath handling, and all communication with the array is secured via authenticated HTTPS calls to the FlashArray REST API. The Everpure SAN Datastore driver is included with OpenNebula Enterprise Edition (EE).

Benefits

OpenNebula's native Everpure driver brings FlashArray's consistent performance and always-thin, metadata-driven architecture directly into your cloud. Snapshots and clones are created instantly with zero-copy operations, so even large environments with deep snapshot histories maintain predictable latency and steady IOPS for VM disks, without the latency penalties typical of host-side copy-on-write solutions.

  • Full lifecycle control. Create, clone, resize, rename, and delete FlashArray volumes directly from OpenNebula, without manual array-side operations.

  • Instant, thin snapshots and clones. Everpure's metadata-only snapshots enable immediate, zero-copy cloning for both persistent and non-persistent VMs, minimizing capacity overhead.

  • Latency-stable I/O path. FlashArray keeps read/write latency flat even with long snapshot chains. Multipath iSCSI is configured automatically per Host for resilient connectivity.

  • Synchronous REST orchestration. Operations use the FlashArray's synchronous REST API with explicit error handling and safe sequencing for volume, snapshot, and host mapping tasks.

  • Incremental SAN-snapshot backups. Block-level incremental backups are driven by comparing FlashArray snapshot pairs via raw device attachment—no in-guest backup agents are required.

  • HTTPS control path. All FlashArray communication uses authenticated, encrypted HTTPS REST calls.

  • Simplified Host-group mappings. Host and Host-group mappings use deterministic LUN IDs and predictable multipath layouts, enabling safe, concurrent attach/detach operations across Hosts.

Feature Supportability

Supported features with FlashArray

  • Zero-Copy Volume Clone. Everpure clones are metadata-only and complete instantly.

  • Snapshot (manual). Created and deleted directly from OpenNebula; mapped 1:1 to FlashArray snapshots.

  • Snapshot restore. Volume overwrite-from-snapshot supported via the REST API.

  • Incremental backups (SAN snapshot diff). Utilizes FlashArray Volume Diff API to gather block differences, then copies the data.

  • Host management. Hosts are automatically created and mapped to as needed.

  • Multi-path I/O. Fully orchestrated; automatic detection, resize, and removal of maps.

  • Data encryption (at-rest). Supported transparently by the array (always-on AES-XTS); not managed by OpenNebula.

Unsupported Features with FlashArray

Note: This integration targets block-level provisioning for OpenNebula environments. It does not expose replication, asynchronous protection groups, or VMware-exclusive workflows (e.g., vVols or VAAI primitives).

The following functionality is not supported:

  • Snapshot retention/policies. FlashArray snapshot schedules are available on the array, but OpenNebula does not manage array-side policies. Snapshots created via this integration remain under OpenNebula's control.

  • QoS policy groups. Not currently exposed through the datastore driver.

  • SVM DR / MetroCluster. Supported by FlashArray, but not orchestrated by OpenNebula.

  • Protection Groups / ActiveCluster. Planned for future releases; can be managed externally on the FlashArray.

  • Bandwidth / IOPS limits. FlashArray supports QoS, but these controls are not integrated into the datastore driver.

  • Deduplication & compression metrics. Calculated internally by FlashArray; not displayed or consumed by OpenNebula.

  • Per-volume encryption toggling. FlashArray encryption is always-on and appliance-managed; no OpenNebula API exposure.

Setup FlashArray & OpenNebula Connection

OpenNebula runs the set of datastore and transfer manager driver to register an existing Everpure FlashArray SAN. This set utilizes the Everpure FlashArray API to create volumes which are treated as a Virtual Machine disk utilizing the iSCSI interface. Both the "Image" and "System" datastores must use the same Everpure array and identical datastore configurations. This is because volumes are either clones or renamed depending on the image persistence type. Persistent images are renamed to the System datastore, while non-persistent images are cloned.

Refer to Configuring Linux Host for iSCSI with FlashArray and the iSCSI Setup with FlashArray blog post for helpful information on iSCSI configuration and best practices.

Follow these steps:

  1. Verify iSCSI Service Connections

    • On the FlashArray GUI, go to Settings > Network > Connectors.

    • Ensure the iSCSI connectors are enabled and note their IP addresses.

  2. Create an API User

    • In the FlashArray System Manager, go to Settings > Access > Users.

    • Create a new user with the Storage Admin role. This role should provide enough permissions for OpenNebula.

    • Create an API token for this user and note the API key. Leave the expiration date blank to create an indefinite API key.

Front-end Only Setup

The Front-end requires network access to the Everpure FlashArray API endpoint.

  1. API Access. Ensure network connectivity to the Everpure FlashArray API interface. The datastore will be in an ERROR state if the API is not accessible or cannot be monitored properly.

Front-end & Node Setup

Everpure FlashArray drivers automatically manage FlashArray Host objects based on each OpenNebula Host's hostname. As a prerequisite, you only need to discover the iSCSI targets on each Host and configure multipath for each Host and front-end. Once that is in place, the driver will automatically log in to the required iSCSI sessions when the first volume is attached to a given front-end or Host.

Perform the following steps from the OpenNebula host.

  1. iSCSI: Discover the iSCSI targets on the Hosts using the following command:

    iscsiadm -m discovery -t sendtargets -p <target_ip>   # for each iSCSI target IP from the FlashArray
  2. Persistent iSCSI Configuration:

    • Set node.startup = automatic in /etc/iscsi/iscsid.conf.

    • Ensure iscsid is started with systemctl status iscsid.

    • Enable iscsid with systemctl enable iscsid.

  3. Multi-path Configuration: Update /etc/multipath.conf to something like:

    defaults {
             polling_interval       10
     }
    
    
     devices {
         device {
             vendor                      "NVME"
             product                     "Pure Storage FlashArray"
             path_selector               "queue-length 0"
             path_grouping_policy        group_by_prio
             prio                        ana
             failback                    immediate
             fast_io_fail_tmo            10
             user_friendly_names         no
             no_path_retry               0
             features                    0
             dev_loss_tmo                60
         }
         device {
             vendor                   "PURE"
             product                  "FlashArray"
             path_selector            "service-time 0"
             hardware_handler         "1 alua"
             path_grouping_policy     group_by_prio
             prio                     alua
             failback                 immediate
             path_checker             tur
             fast_io_fail_tmo         10
             user_friendly_names      no
             no_path_retry            0
             features                 0
             dev_loss_tmo             600
         }
     }
    

Create the System Datastore

You'll create the System datastore as "purefa" (Everpure FlashArray) for instant cloning/moving capabilities. Start by creating the datastore template. Then create the datastore from the template.

Template parameters

All template parameters are Required unless noted as Optional.

Attribute Description/Value
NAME The datastore name.
TYPE "SYSTEM_DS"
TM_MAD "purefa"
DISK_TYPE "BLOCK"
PUREFA_HOST The FlashArray API IP address.
PUREFA_API_TOKEN The API Token key.
PUREFA_TARGET The iSCSI Target name.
PUREFA_VERSION (Optional) The FlashArray Version.
PUREFA_SUFFIX (Optional) Suffix to append to all volume names.

Sample template

$ cat purefa_system.ds

NAME              = "purefa_system"
TYPE              = "SYSTEM_DS"
DISK_TYPE         = "BLOCK"
TM_MAD            = "purefa"
PUREFA_HOST       = "10.1.234.56"
PUREFA_API_TOKEN  = "01234567-89ab-cdef-0123-456789abcdef"
PUREFA_TARGET     = "iqn.1993-08.org.ubuntu:01:1234"

Create the "System" datastore

Run the following command and specify the datastore name defined in the system datastore template. In this example, the datastore name is purefa_system:

$ onedatastore create purefa_system.ds

The datastore ID will be returned in the output like this:

ID: 101

Create the Image Datastore

Like with the System datastore, you'll create the Image datastore as "purefa" (Everpure FlashArray) for instant cloning/moving capabilities. Start by creating the datastore template. Then create the datastore from the template.

Template parameters

All template parameters are Required unless noted as Optional.

Attribute Description/Value
NAME The datastore name.
TYPE "IMAGE_DS"
DS_MAD "purefa"
TM_MAD "purefa"
DISK_TYPE "BLOCK"
PUREFA_HOST The FlashArray API IP address.
PUREFA_API_TOKEN The API Token key.
PUREFA_TARGET The iSCSI Target name.
PUREFA_VERSION (Optional) The FlashArray Version.
PUREFA_SUFFIX (Optional) Suffix to append to all volume names.

Sample template

$ cat purefa_image.ds

NAME              = "purefa_image"
TYPE              = "IMAGE_DS"
DISK_TYPE         = "BLOCK"
DS_MAD            = "purefa"
TM_MAD            = "purefa"
PUREFA_HOST       = "10.1.234.56"
PUREFA_API_TOKEN  = "01234567-89ab-cdef-0123-456789abcdef"
PUREFA_TARGET     = "iqn.1993-08.org.ubuntu:01:1234"

Create the "Image" datastore

To create the image datastore, run the following command and specify the datastore name defined in the image datastore template. In this example, the datastore name is purefa_image:

$ onedatastore create purefa_image.ds

The datastore ID will be returned in the output like this:

ID: 102

Datastore Architecture Details

  • Images: Stored as a single Volume in Everpure FlashArray

  • Naming Convention:

    • Image datastore: one_<datastore_id>_<image_id>

    • System datastore: one_<vm_id>_disk_<disk_id>

  • Operations:

    • Non‐persistent: Clone

    • Persistent: Rename

Hosts are automatically created in the FlashArray using API, with a name generated from the hostname.

Warning: Do NOT change the hostname of your Hosts unless you have 0 VMs deployed to that Host.

Symbolic links from the System datastore will be created for each Virtual Machine on its Host once the Volumes have been mapped.

Backup Process

Both Full and Incremental backups are supported by Everpure FlashArray.
  • Full Backups: A snapshot of the Volume containing the VM disk is taken and attached to the Host, where it is converted into a QCOW2 image and uploaded to the backup datastore.

  • Incremental Backups: Created using the Volume Difference feature of the FlashArray. This returns a list of block offsets and lengths which have changed since a target snapshot. This list is then used to create a sparse QCOW2 format file which is uploaded to the backup datastore.

Note: You can configure the block size (Default and minimum 4096 B / 4 KB ) for incremental backups by modifying the file at /var/tmp/one/etc/tm/san/backup.conf
Warning: The incremental backup feature of the FlashArray requires the nbd kernel module to be loaded and the nbdfuse package to be installed on all OpenNebula nodes.

System Considerations

Occasionally, under network interruptions or if a volume is deleted directly from the FlashArray, the iSCSI connection may drop or fail. This can cause the system to hang on a sync command, which in turn may lead to OpenNebula operation failures on the affected Host. Although the driver is designed to manage these issues automatically, it's important to be aware of these potential iSCSI connection challenges.

Note: This behavior stems from the inherent complexities of iSCSI connections and is not exclusive to OpenNebula or Everpure.

Customer should contact the OpenNebula Support Team to assist in this cleanup; however, here are a few advanced tips to clean these up:

Important:

The following steps should be directed by OpenNebula Support

  • If you have extra devices from failures leftover, run:

    rescan_scsi_bus.sh -r -m
  • If an entire multipath setup remains, run:

    multipath -f <multipath_device>
    Note: Be very careful to target the correct multipath device.

If devices persist, follow these steps:

  1. Run dmsetup ls --tree or lsblk to see which mapped devices remain. You may see devices not attached to a mapper entry in lsblk.

  2. For each such device (not your root device), run:

    echo 1 > /sys/bus/scsi/devices/sdX/device/delete

    where sdX is the device name.

  3. Once those devices are gone, remove leftover mapper entries:

    dmsetup remove /dev/mapper/<device_name>
  4. If removal fails:

    • Check usage:

      fuser -v $(realpath /dev/mapper/<device_name>)
    • If it's being used as swap:

      swapoff /dev/mapper/<device_name>
      dmsetup remove /dev/mapper/<device_name>
    • If another process holds it, kill the process and retry:

      dmsetup remove /dev/mapper/<device_name>
    • If you can't kill the process or nothing shows up:

      dmsetup suspend /dev/mapper/<device_name>
      dmsetup wipe_table /dev/mapper/<device_name>
      dmsetup resume /dev/mapper/<device_name>
      dmsetup remove /dev/mapper/<device_name>

This should resolve most I/O lockups caused by failed iSCSI operations. The OpenNebula Support Team should be contacted if the customer needs more assistance.