Search the docs

Admin CLI Workflow to Connect NVMe-oF Enclosures

Connect an NVMe-oF enclosure to a DSX node by using the Admin CLI on the Anvil, the Hammerspace metadata and management node.

  1. Find the name of the DSX node that will own the enclosure:

    Command:

    node-list

    In the output, the DSX nodes show Product node type: DSX.

  2. Read the DSX node’s host NQN, and add it to the array’s host access configuration so that the array presents the intended namespaces to that node. The host NQN identifies the DSX node to the array. It is not a password.

    Command:

    node-list --name <dsx-node-name>

    The host NQN is on the line NVMe-oF host NQN:. In the Management GUI, it is the Host NQN field on the NVMe-oF Config tab that opens when you edit the DSX node on the Storage Systems tab of the Infrastructure page.

    Expected output (trimmed):

    Name:                          dsx.example.com
    Type:                          Product
    Product node type:             DSX
    Internal ID:                   1073741832
    ID:                            4cdae232-a7de-501a-ad2a-1e90457a0f98
    HW state:                      OK
    Node state:                    MANAGED
    Node mode:                     ONLINE
    Management IP:                 192.0.2.21/20
    SW version:                    5.2.14-1266
    S3 auth signing type:          Default
    Vendor:                        VMware, Inc.
    Product name:                  VMware Virtual Platform
    Serial number:                 8d8c7b0f9c31
    Firmware version:              None
    NVMe-oF host NQN:              nqn.2014-08.org.nvmexpress:uuid:63422d42-6bd4-a136-5617-8d8c7b0f9c31
    Created:                       2026-09-27 23:23:16 UTC
    Modified:                      2026-09-27 23:42:38 UTC
    Components:
                             Type:                    Hdd
                             ID:                      5f2e0a0f-323c-4172-82cc-7ecb0d592698
                             Name:                    /dev/sdc
                             State:                   OK
    
    <Additional output removed for brevity>
  3. Add the enclosure to the DSX node, with the array’s discovery address as the target. To connect all of the subsystems that the DSX node discovers at the same time, add --connect-all:

    Command:

    nvmeof-config --enclosure-add --dsx-name <dsx-node-name> --target <target-address> --connect-all

    Give every address that the array presents the subsystems on, by repeating --target for each one, when you add the enclosure. Each address becomes a path to each subsystem found there, and multipathing is enabled when a subsystem has more than one. An address that you add to the enclosure later is not connected to subsystems that are already connected; see NVMe-oF Limitations and Operating Guidance. A target is identified by its address; giving the same address again with a different port does not add a target.

    You can use --dsx-id <dsx-node-id> instead of --dsx-name. Leave out --connect-all to add the enclosure without connecting anything yet. The command discovers and connects before it returns, which can take a few minutes; its output shows every subsystem found, with State: CONNECTED on each address that was connected.

    Expected output (two subsystems, two targets, trimmed):

    Type:                    Nvme-of Enclosure
    ID:                      b157dd67-abf8-4327-97ba-b51ac236fc5a
    Name:                    dsx.example.com::nvmeof-b157dd67-abf8-4327-97ba-b51ac236fc5a
    Node:                    dsx.example.com
    Node host NQN:           nqn.2014-08.org.nvmexpress:uuid:63422d42-6bd4-a136-5617-8d8c7b0f9c31
    NVMe-oF config:          Queue depth:             64
                             IO queue pairs:          64
                             I/O policy:              QUEUE_DEPTH
                             Transport:               TCP
                             Target port:             8009
                             Controller loss timeout: -1
    Discovery targets:
                             Address:                 192.0.2.31
                             Port:                    8009
                             Transport:               TCP
    
                             Address:                 192.0.2.32
                             Port:                    8009
                             Transport:               TCP
    Subsystems:
                             Type:                    Nvme-of Subsystem
                             ID:                      40b94f39-4bb2-5fd5-a353-f3afaac1d095
                             Subsystem NQN:           nqn.2026-09.com.example:docs-subsys2
                             Namespaces:
                                                      [Namespace ID: 1, Size: 4.2GB, Sector size: 4096, Model: Docs Lab NVMe Target, Serial: DOCSLAB00000002, Namespace unique ID: bef19a80-60dd-b2bd-30a3-4965b79d3e20, Connected: true]
                                                      [Namespace ID: 2, Size: 4.2GB, Sector size: 4096, Model: Docs Lab NVMe Target, Serial: DOCSLAB00000002, Namespace unique ID: bef19a80-60dd-b2bd-30a3-4965b79d3e20-2, Connected: true]
                             Transport addresses:
                                                      [Address: 192.0.2.32, Port: 8009, Transport: TCP, State: CONNECTED]
                                                      [Address: 192.0.2.31, Port: 8009, Transport: TCP, State: CONNECTED]
    
                             Type:                    Nvme-of Subsystem
                             ID:                      8e1b8ba6-a027-5539-98e9-0bcee62a28c5
                             Subsystem NQN:           nqn.2026-09.com.example:docs-subsys1
                             Namespaces:
                                                      [Namespace ID: 1, Size: 4.2GB, Sector size: 4096, Model: Docs Lab NVMe Target, Serial: DOCSLAB00000001, Namespace unique ID: c9eedb06-110b-552b-beaa-1cd7e38ae394, Connected: true]
                                                      [Namespace ID: 2, Size: 4.2GB, Sector size: 4096, Model: Docs Lab NVMe Target, Serial: DOCSLAB00000001, Namespace unique ID: c9eedb06-110b-552b-beaa-1cd7e38ae394-2, Connected: true]
                             Transport addresses:
                                                      [Address: 192.0.2.32, Port: 8009, Transport: TCP, State: CONNECTED]
                                                      [Address: 192.0.2.31, Port: 8009, Transport: TCP, State: CONNECTED]

    On builds earlier than 5.2.12-P3, --connect-all given together with --target connects nothing. On those builds, add the enclosure first, and then connect the subsystems as a separate command (step 5).

  4. Find the enclosure’s name. An enclosure added from the Admin CLI is named after the DSX node, followed by ::nvmeof- and a unique ID. This is so even if you give --enclosure-name with --enclosure-add: the name you give is ignored.

    Command:

    nvmeof-config --list

    Expected output:

    total 1
    Type:                    Nvme-of Enclosure
    ID:                      b157dd67-abf8-4327-97ba-b51ac236fc5a
    Name:                    dsx.example.com::nvmeof-b157dd67-abf8-4327-97ba-b51ac236fc5a
    Node:                    dsx.example.com
    Node host NQN:           nqn.2014-08.org.nvmexpress:uuid:63422d42-6bd4-a136-5617-8d8c7b0f9c31
  5. If you did not use --connect-all, connect the subsystems you want:

    Command:

    nvmeof-config --enclosure-name <enclosure-name> --connect-nqn <subsystem-nqn>

    Connecting a subsystem that the DSX node did not discover succeeds but connects nothing.

    Run this command after the enclosure has been added. If you give --connect-nqn with --enclosure-add instead, and another enclosure on the DSX node already uses the same target address, the subsystem is discovered but not connected (State: DISCOVERED); run this command to connect it.

  6. Find the device path of each connected namespace. The DSX node’s drive list shows every connected namespace as an Nvme-of Drive with its device path.

    Command:

    drive-list --node-name <dsx-node-name>

    Expected output (trimmed to the NVMe-oF drives):

    total 10
    Type:                    Hdd
    ID:                      5f2e0a0f-323c-4172-82cc-7ecb0d592698
    Name:                    /dev/sdc
    State:                   OK
    
    Type:                    Hdd
    ID:                      87de74f9-d96f-4c6d-8c2b-f0e520872076
    Name:                    /dev/dm-1
    State:                   OK
    
    Type:                    Hdd
    ID:                      90b0f905-07f6-4469-9d16-9b4df73994d4
    Name:                    /dev/dm-2
    State:                   OK
    
    Type:                    Hdd
    ID:                      960b144f-33ac-4c82-8336-f038d47f5c01
    Name:                    /dev/dm-0
    State:                   OK
    
    Type:                    Hdd
    ID:                      e17fa6e5-abb1-4d8a-a831-44f6951f60b9
    Name:                    /dev/sdb
    State:                   OK
    
    Type:                    Hdd
    ID:                      e553917a-c252-4b26-a910-785dc31c1015
    Name:                    /dev/sda
    State:                   OK
    
    Type:                    Nvme-of Drive
    ID:                      29f32ef8-896b-5689-9b17-96a6bcbf0e2a
    Name:                    /dev/nvme0n1
    State:                   OK
    Capacity:                4.2GB
    Serial number:           29f32ef8-896b-5689-9b17-96a6bcbf0e2a
    
    Type:                    Nvme-of Drive
    ID:                      4412c29a-ffd7-5961-a4c0-61a8b509e0c5
    Name:                    /dev/nvme2n1
    State:                   OK
    Capacity:                4.2GB
    Serial number:           4412c29a-ffd7-5961-a4c0-61a8b509e0c5
    
    Type:                    Nvme-of Drive
    ID:                      863571b4-59f2-5e51-9e30-4c2534ee9981
    Name:                    /dev/nvme2n2
    State:                   OK
    Capacity:                4.2GB
    Serial number:           863571b4-59f2-5e51-9e30-4c2534ee9981
    
    Type:                    Nvme-of Drive
    ID:                      88073fd2-9dcf-5fab-952a-08abbabcab63
    Name:                    /dev/nvme0n2
    State:                   OK
    Capacity:                4.2GB
    Serial number:           88073fd2-9dcf-5fab-952a-08abbabcab63

    Read the device path right before you use it. Device paths such as /dev/nvme0n1 are assigned by the DSX node’s kernel and can change when a subsystem is disconnected and reconnected.

  7. Create a logical volume on a namespace, and then add it to Hammerspace as a storage volume. The logical volume’s name is in the output of the first command.

    Command:

    logical-volume-create --node-name <dsx-node-name> --device-path <device-path>

    Expected output:

    Type:                    Logical Volume
    ID:                      eea406dd-ddb8-4416-886f-61f6ebcf09ce
    Name:                    /hsvol2
    Exported path:           /hsvol2
    Addresses:
                             [IP: 192.0.2.21/20, Port: 3049, NetId: tcp, NodeNum: 0]
    Node:                    dsx.example.com
    Usage:                   DS
    Reserved:                false
    Filesystem type:         XFS
    Capacity:                [Total: 4.2GB]
    Hardware:
                             [Type: Nvme-of Drive, ID: 29f32ef8-896b-5689-9b17-96a6bcbf0e2a, Name: /dev/nvme0n1, State: OK]
    volume-add --node-name <dsx-node-name> --logical-volume-name <logical-volume-name> --name <volume-name>

    The Management GUI does both in one flow; see Adding an NVMe-oF Enclosure and Subsystems.

  8. To remove the namespaces of a disconnected or removed subsystem from the DSX node’s inventory, refresh the node:

    Command:

    node-refresh --name <dsx-node-name> --reconcile-components