XtremIO (xmcli) – Creating Initiator Groups and Mapping LUNs

1. Open an SSH session to the XtremIO Management Station
Firstly we need to open an SSH connection to the XtremIO Management Station (XMS), in this case I used putty to connect directly onto the XMS Virtual Machine. The second login prompt after ‘xmsadmin’ is required to access the xmcli> session.
The XMCLI session prompt appears allowing you to run the required commands. Utilizing ‘?’ within the console will provide a list of available options.

2. Create the Initiator Group Parent Folder
In order to keep Clusters organizied it is good practice to create a root Folder for each cluster in a multi-cluster configuration. In this example we will use the cluster name “VDICluster” as the folder name. Note: all the user defined values require parenthesis “…”

add-folder caption=”VDICluster” folder-type=ig parent-folder-id=”/”

Once created the folder appears in the Initiator Groups pane:

3. Create Initiator Groups and add their associated Host Initiators
Create the IG and assign to the parent folder “VDICluster”:
add-initiator-group ig-name=”VB001_ESXI01″ parent-folder-id=”/VDICluster”

Add the ESXi HBA’s to the relevant IG:
add-initiator ig-id=”VB001_ESXI01″ initiator-name=”VB001_ESXI01-HBA0″ port-address=”20:00:00:25:xx:xx:xx:6F”
add-initiator ig-id=”VB001_ESXI01″ initiator-name=”VB001_ESXI01-HBA1″ port-address=”20:00:00:25:xx:xx:xx:6F”

add-initiator-group ig-name=”VB001_ESXI02″ parent-folder-id=”/VDICluster”
add-initiator ig-id=”VB001_ESXI02″ initiator-name=”VB001_ESXI02-HBA0″ port-address=”20:00:00:25:xx:xx:xx:7F”
add-initiator ig-id=”VB001_ESXI02″ initiator-name=”VB001_ESXI02-HBA1″ port-address=”20:00:00:25:xx:xx:xx:7F”


Initiator Group Validation:

4. Create Parent Folders for the Boot and DATA LUNs
add-folder caption=”VDICluster_BOOT” folder-type=vol parent-folder-id=”/”
add-folder caption=”VDICluster_DATA” folder-type=vol parent-folder-id=”/”

5. Create BOOT LUNs for both ESXi Hosts (20Gig Example)
add-volume alignment-offset=0 lb-size=512 vol-name=”ESXI01-BOOT” vol-size=”20g” parent-folder-id=”/VDICluster_BOOT”
add-volume alignment-offset=0 lb-size=512 vol-name=”ESXI02-BOOT” vol-size=”20g” parent-folder-id=”/VDICluster_BOOT”

6. Map the Individual Boot LUNs to the ESXi Hosts using HLU 0
This presents “ESXI01-BOOT” to the ESXi Host “VB001_ESXI01” as LUN 0:
map-lun vol-id=”ESXI01-BOOT” ig-id=”VB001_ESXI01″ lun=0

This presents “ESXI02-BOOT” to the ESXi Host “VB001_ESXI02” as LUN 0:
map-lun vol-id=”ESXI02-BOOT” ig-id=”VB001_ESXI02″ lun=0

7. Create two shared DATA LUNs (2TB Example)
This creates 2X 2TB LUNs named Datastore01&02 and enables VAAI-TP alerts:
add-volume alignment-offset=0 lb-size=512 vol-name=”Datastore01″ vol-size=”2048g” vaai-tp-alerts=enabled parent-folder-id=”/VDICluster_DATA”
add-volume alignment-offset=0 lb-size=512 vol-name=”Datastore02″ vol-size=”2048g” vaai-tp-alerts=enabled parent-folder-id=”/VDICluster_DATA”

8. Map the two DATA LUNs to both ESXi Cluster hosts using HLU1&2
map-lun vol-id=”Datastore01″ ig-id=”VB001_ESXI01″ lun=1
map-lun vol-id=”Datastore01″ ig-id=”VB001_ESXI02″ lun=1
map-lun vol-id=”Datastore02″ ig-id=”VB001_ESXI01″ lun=2
map-lun vol-id=”Datastore02″ ig-id=”VB001_ESXI02″ lun=2

Note: You will receive a prompt when adding the shared datastore’s to the second host: Are you sure you want to create additional LUN mapping for Volume Datastore01? (Yes/No): Yes This is something to be aware of when creating scripts to map a volume(s) to multiple hosts.

Validate the LUN Configuration:
show-volume vol-id=”Datastore01″
show-volume vol-id=”Datastore02″



  1. Thanks for the useful summary. I thought I’d share the following PowerCLI code which will generate the commands for steps 1-3 for all clusters in vCenter:

    $vmclusters = get-cluster
    foreach ($cluster in $vmclusters) {
    Write-Host “add-folder caption=””$($cluster.Name)”” folder-type=ig parent-folder-id=””/”””
    $VMHosts = $cluster | Get-VMHost
    foreach ($VMHost in $VMHosts) {
    Write-Host “add-initiator-group ig-name=””$($VMHost.Name)”” parent-folder-id=””/$($cluster.Name)”””
    $hbas = $VMHost | Get-VMHostHba -Type FibreChannel
    foreach ($hba in $hbas) {
    $pwwn = ((“{0:x}” -f $hba.PortWorldWideName) -split “(..)” | Where {$_}) -join “:”
    Write-Host “add-initiator ig-id=””$($vmhost.Name)”” initiator-name=””$($vmhost.Name)_$($hba.Device)”” port-address=””$pwwn”””

  2. Hello David,

    Thanks for the useful info, I see that we are using HLU and for the ALU field we are just mentioning a name unlike a lun id in VNX or VMAX in addition to the name field/attribute. Will the xtreme io be creating any lun id internally, if yes is there an option to check the ALU.
    Thanks in advance


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s