One of the important things that a storage vendor must do is ensure that the volumes they are presenting to individual servers can be uniquely identified. If a volume (or a disk as a host would see it) is unable to be uniquely identified, this could cause some serious problems down the road.
The way in which we achieve this goal with NVMe-oF based volumes is by using a Namespace Globally Unique Identifier (NGUID) for every volume presented to a host.
For the Pure Storage FlashArray an NGUID is broken into 3 parts:
- Identifier Extension (First 7 bytes of the FlashArray ID)
- IEEE Company_id (Pure Storage unique ID)
- Vendor Specific Extention Identifier (Last 5 bytes of the FlashArray volume)
Furthermore, unlike SCSI (whose identifier starts with naa), the identifier for the NVMe disk will start with "eui" (meaning, Extended Unique Identifier):
[root@andy:~] esxcli nvme namespace list Name Controller Number Namespace ID Block Size Capacity in MB ------------------------------------ ----------------- ------------ ---------- -------------- eui.003b7b308d98f94224a9375e00018816 260 100374 512 205824
With our eui now available, we can break it down into its respective parts to verify whether or not this is a Pure Storage based namespace:
1. The first 8 bytes of the string will be the begin with "00" and then the first 7 bytes of the FlashArray ID (as reported from the 'purearray list' output):
If we look at our FlashArray ID it reports the following (highlighting the first 7 bytes, not including the hyphens):
root@sn1-x50r2-e05-31-ct0:~# purearray list Name ID OS Version sn1-x50r2-e05-31 3b7b308d-98f9-425e-87a1-3e57ada49658 Purity//FA 5.3.4
2. The next 3 bytes of the string are the Unique Company ID for Pure Storage (24a937):
If you see "24a937", as highlighted above, in bytes [8 - 10] then that is a Pure Storage backed namespace.
NOTE: It is bytes 8,9,10 if you are starting count from "0", if starting count from "1" it is bytes 9,10,11.
3. Lastly, the remaining 5 bytes will be the unique identifier of the individual volume on the FlashArray:
If we grep for those last 5 bytes on the FlashArray, we get our volume of interest:
root@sn1-x50r2-e05-31-ct0:~# purevol list |grep -i 5e00018816 nvme-of-vol14 201G - 2019-12-05 16:28:46 PST 3B7B308D98F9425E00018816
So that NVMe namespace on the ESXi host coincides with "nvme-of-vol14" on the Pure Storage FlashArray.
This concept is the same as using the Network Addressing Authority (NAA) identifier when utilizing SCSI as the underlying protocol. For information on how to identify Pure Storage LUNs using SCSI as the underlying protocol you can review: VMware vSphere: ESXi Host Troubleshooting.