nvme-cli: Make 'list' more useful
The original 'list' subcommand was a bit of an ad-hoc development. Not
a whole lot of forethought was made toward subsystems, multipathing,
multi-namespace capabilities.
Those more complicated topologies we see today have become difficult
for users to visualize and understand the relationships among many
devices co-existing in the same, and 'list' has not kept up with these
complications.
As newer kernels provide more information for user space to discover,
provide a more verbose option to list this information while maintaining
backward compatibility for kernels that do not provide nvme subsystem
suppport.
The following examples are using the column format, however I find the
json output more satisfying.
The old way (no verbose options):
# nvme list
Node SN Model Namespace Usage Format FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1 PHLE7200015N6P4BGN-1
7335943:ICDPC5ED2ORA6.4T 1 3.20 TB / 3.20 TB 512 B + 0 B QDV1RD07
/dev/nvme1n1 PHLE7200015N6P4BGN-2
7335943:ICDPC5ED2ORA6.4T 1 3.20 TB / 3.20 TB 512 B + 0 B QDV1RD03
/dev/nvme2n1 CVFT50850022400GGN INTEL SSDPE2MD400G4 1 400.09 GB / 400.09 GB 4 KiB + 0 B 8DV101J0
/dev/nvme3n1 CVMD4215002W1P6DGN INTEL SSDPEDME012T4 1 1.20 TB / 1.20 TB 4 KiB + 0 B 8DV101B0
/dev/nvme4n1
e559e5e004175109 Linux 1 3.20 TB / 3.20 TB 512 B + 0 B 5.3.0-rc
/dev/nvme4n2
e559e5e004175109 Linux 2 3.20 TB / 3.20 TB 512 B + 0 B 5.3.0-rc
/dev/nvme5n1 FUMB5256000J280A INTEL SSDPED1D140GA 1 140.04 GB / 140.04 GB 512 B + 0 B
E40A0208
And with the new 'verbose' flag:
# nvme list -v
NVM Express Subsystems
Subsystem Subsystem-NQN Controllers
---------------- ------------------------------------------------------------------------------------------------ ----------------
nvme-subsys0 nqn.2014.08.org.nvmexpress:8086108ePHLE7200015N6P4BGN-
17335943:ICDPC5ED2ORA6.4T nvme1
nvme-subsys1 nqn.2014.08.org.nvmexpress:8086108ePHLE7200015N6P4BGN-
27335943:ICDPC5ED2ORA6.4T nvme2
nvme-subsys2 nqn.2014.08.org.nvmexpress:80868086CVFT50850022400GGN INTEL SSDPE2MD400G4 nvme0
nvme-subsys3 nqn.2014.08.org.nvmexpress:80868086CVMD4215002W1P6DGN INTEL SSDPEDME012T4 nvme3
nvme-subsys4 keith-loopback-testnqn nvme4, nvme5
nvme-subsys5 nqn.2014.08.org.nvmexpress:80868086FUMB5256000J280A INTEL SSDPED1D140GA nvme6
NVM Express Controllers
Device SN MN FR TxPort Address Subsystem Namespaces
-------- -------------------- ---------------------------------------- -------- ------ -------------- ------------ ----------------
nvme1 PHLE7200015N6P4BGN-1
7335943:ICDPC5ED2ORA6.4T QDV1RD07 pcie 0000:88:00.0 nvme-subsys0 nvme0n1
nvme2 PHLE7200015N6P4BGN-2
7335943:ICDPC5ED2ORA6.4T QDV1RD03 pcie 0000:89:00.0 nvme-subsys1 nvme1n1
nvme0 CVFT50850022400GGN INTEL SSDPE2MD400G4 8DV101J0 pcie 0000:5e:00.0 nvme-subsys2 nvme2n1
nvme3 CVMD4215002W1P6DGN INTEL SSDPEDME012T4 8DV101B0 pcie 0000:d8:00.0 nvme-subsys3 nvme3n1
nvme4
e559e5e004175109 Linux 5.3.0-rc loop nvme-subsys4 nvme4n1, nvme4n2
nvme5
e559e5e004175109 Linux 5.3.0-rc loop nvme-subsys4 nvme4n1, nvme4n2
nvme6 FUMB5256000J280A INTEL SSDPED1D140GA
E40A0208 pcie 10001:01:00.0 nvme-subsys5 nvme5n1
NVM Express Namespaces
Device NSID Usage Format Controllers
------------ -------- -------------------------- ---------------- ----------------
nvme0n1 1 3.20 TB / 3.20 TB 512 B + 0 B nvme1
nvme1n1 1 3.20 TB / 3.20 TB 512 B + 0 B nvme2
nvme2n1 1 400.09 GB / 400.09 GB 4 KiB + 0 B nvme0
nvme3n1 1 1.20 TB / 1.20 TB 4 KiB + 0 B nvme3
nvme4n1 1 3.20 TB / 3.20 TB 512 B + 0 B nvme4, nvme5
nvme4n2 2 3.20 TB / 3.20 TB 512 B + 0 B nvme4, nvme5
nvme5n1 1 140.04 GB / 140.04 GB 512 B + 0 B nvme6
Signed-off-by: Keith Busch <kbusch@kernel.org>