Accessing NVMe volumes for virtual device targets (DM-MP devices)
For RHEL 7 and SLES 12, I/O is directed to virtual device targets by the Linux host. DM-MP manages the physical paths underlying these virtual targets.
Virtual devices are I/O targets
Make sure you are running I/O only to the virtual devices created by DM-MP and not to the physical device paths. If you are running I/O to the physical paths, DM-MP cannot manage a failover event and the I/O fails.
You can access these block devices through the dm device or the symlink in /dev/mapper, for example:
/dev/dm-1
/dev/mapper/eui.00001bc7593b7f5f00a0980000af4462
Example
The following example output from the nvme list command shows the host node name and its correlation with the namespace ID.
NODE SN MODEL NAMESPACE
/dev/nvme1n1 021648023072 Lenovo DE-Series 10
/dev/nvme1n2 021648023072 Lenovo DE-Series 11
/dev/nvme1n3 021648023072 Lenovo DE-Series 12
/dev/nvme1n4 021648023072 Lenovo DE-Series 13
/dev/nvme2n1 021648023151 Lenovo DE-Series 10
/dev/nvme2n2 021648023151 Lenovo DE-Series 11
/dev/nvme2n3 021648023151 Lenovo DE-Series 12
/dev/nvme2n4 021648023151 Lenovo DE-Series 13
Column | Description |
---|---|
Node | The node name includes two parts:
|
Namespace | The Namespace column lists the namespace ID (NSID), which is the identifier from the storage array perspective. |
In the following multipath -ll output, the optimized paths are shown with a prio value of 50, while the non-optimized paths are shown with a prio value of 10.
The Linux operating system routes I/O to the path group that is shown as status=active, while the path groups listed as status=enabled are available for failover.
eui.00001bc7593b7f500a0980000af4462 dm-0 NVME,Lenovo DE-Series
size=15G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| `- #:#:#:# nvme1n1 259:5 active ready running
`-+- policy='service-time 0' prio=10 status=enabled
`- #:#:#:# nvme2n1 259:9 active ready running
eui.00001bc7593b7f5f00a0980000af4462 dm-0 NVME,Lenovo DE-Series
size=15G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=0 status=enabled
| `- #:#:#:# nvme1n1 259:5 failed faulty running
`-+- policy='service-time 0' prio=10 status=active
`- #:#:#:# nvme2n1 259:9 active ready running
Line item | Description |
---|---|
policy='service-time 0' prio=50 status=active | This line and the following line show that nvme1n1, which is the namespace with an NSID of 10, is optimized on the path with a prio value of 50 and a status value of active. This namespace is owned by controller A. |
policy='service-time 0' prio=10 status=enabled | This line shows the failover path for namespace 10, with a prio value of 10 and a status value of enabled. I/O is not being directed to the namespace on this path at the moment. This namespace is owned by controller B. |
policy='service-time 0' prio=0 status=enabled | This example shows multipath -ll output from a different point in time, while controller A is rebooting. The path to namespace 10 is shown as failed faulty running with a prio value of 0 and a status value of enabled. |
policy='service-time 0' prio=10 status=active | Note that the active path refers to nvme2, so the I/O is being directed on this path to controller B. |