NVME-LIST-SUBSYS(1)

✨ NVME-LIST-SUBSYS ✨

okay bestie, so you know how the nvme command has a whole pile of subcommands and this is the list-subsys one β€” the one that's basically the "who's who" of your NVMe subsystems? Yeah. That's this page. It lives in section 1 of the manual, and it's giving main character energy for the whole nvme-user suite. πŸ’…


🌸 NAME 🌸

nvme-list-subsys β€” literally the command that lists, like, all the NVMe subsystems. no cap. πŸ¦‹


⭐ SYNOPSIS ⭐

nvme [<global-options>] list-subsys <device>

πŸ’– DESCRIPTION πŸ’–

So the way this works: it goes and scans the sysfs tree looking for NVM Express subsystems, and then it hands you back the controllers for those subsystems plus some pertinent info about them. Honestly very demure, very mindful. πŸŽ€

And if you pass it a device? Then it's like, ok focus, and it prints out only the values for the controllers and subsystems that actually lead to that device. iykyk. πŸ”₯


πŸ‘‘ OPTIONS πŸ‘‘

πŸ’œ GLOBAL OPTIONS πŸ’œ

These ones are defined up at the top-level nvme command, but listen β€” they're totally available to this subcommand too. Sharing is caring. 🫢

  • --dry-run β€” prints out the command that would be executed, but does not actually execute it. window shopping, basically. πŸ›οΈ
  • --no-ioctl-probing β€” turns off probing for 64-bit IOCTL support. bye felicia to that check. πŸ‘‹
  • --no-retries β€” disables the retry logic on transient errors. one shot, one opportunity. 😭
  • -o <fmt>, --output-format=<fmt> β€” sets the reporting format to normal, tabular, json, or binary. and important: only one output format at a time, bestie. don't be greedy. πŸ™ˆ
  • --output-format-version=<version> β€” picks the output format version. version 1 uses the original field naming, while version 2 (which is the default) gives you more consistent and script-friendly field names. any other version? rejected. ghosted. πŸ’€
  • --quiet β€” suppresses informational messages. errors are still reported, and heads up: --quiet cancels any --verbose for the library log level. they cannot coexist, it's messy. 😀
  • --set-options=<key=value>[,<key=value>...] β€” sets libnvme library options for this invocation. the supported keys are force-4k, mi-probe-enabled, test-base-dir and test-sysfs-dir. mix and match, it's cute. ✨
  • --timeout=<ms> β€” sets the timeout for the command in milliseconds. infinite or -1 waits without a time limit (0xffffffff). girl will wait forever. πŸ’€
  • -v, --verbose β€” increases the level of detail in the output. and you can specify it multiple times to further increase verbosity. stack it, queen. πŸ‘‘
side note: these options can also be set as machine-wide defaults in nvme-cli.conf(5). and a command-line flag always overrides the file. no exceptions, periodt. πŸ’…

πŸ¦‹ EXAMPLES πŸ¦‹

okay first, the classic. just run it, no frills:

root@host[1]# nvme list-subsys
nvme-subsys0 - NQN=nvmf-test
\
 +- nvme0 rdma traddr=1.1.1.3,trsvcid=4420,host_traddr=1.1.1.1
 +- nvme1 rdma traddr=1.1.1.3,trsvcid=4420,host_traddr=1.1.1.2
nvme-subsys1 - NQN=nvmf-test2
\
 +- nvme2 rdma traddr=1.1.1.3,trsvcid=4420,host_traddr=1.1.1.2
 +- nvme3 rdma traddr=1.1.1.3,trsvcid=4420,host_traddr=1.1.1.1

and now the same thing but make it JSON, because we're feeling script-y today:

root@host[1]# nvme list-subsys -o json
{
  "Subsystems" : [
    {
      "Name" : "nvme-subsys0",
      "NQN" : "nvmf-test"
    },
    {
      "Paths" : [
        {
          "Name" : "nvme0",
          "Transport" : "rdma",
          "Address" : "traddr=1.1.1.3,trsvcid=4420,host_traddr=1.1.1.1",
          "AddressDetails" : {
            "traddr" : "1.1.1.3",
            "host_traddr" : "1.1.1.1",
            "trsvcid" : "4420"
          }
        },
        {
          "Name" : "nvme1",
          "Transport" : "rdma",
          "Address" : "traddr=1.1.1.3,trsvcid=4420,host_traddr=1.1.1.2",
          "AddressDetails" : {
            "traddr" : "1.1.1.3",
            "host_traddr" : "1.1.1.2",
            "trsvcid" : "4420"
          }
        }
      ]
    },
    {
      "Name" : "nvme-subsys1",
      "NQN" : "nvmf-test2"
    },
    {
      "Paths" : [
        {
          "Name" : "nvme2",
          "Transport" : "rdma",
          "Address" : "traddr=1.1.1.3,trsvcid=4420,host_traddr=1.1.1.2",
          "AddressDetails" : {
            "traddr" : "1.1.1.3",
            "host_traddr" : "1.1.1.2",
            "trsvcid" : "4420"
          }
        },
        {
          "Name" : "nvme3",
          "Transport" : "rdma",
          "Address" : "traddr=1.1.1.3,trsvcid=4420,host_traddr=1.1.1.1",
          "AddressDetails" : {
            "traddr" : "1.1.1.3",
            "host_traddr" : "1.1.1.1",
            "trsvcid" : "4420"
          }
        }
      ]
    }
  ]
}

🌈 NVME 🌈

yep, it's part of the nvme-user</> suite. family. πŸ‘‘


πŸ“ NOTES πŸ“

  1. root@host mailto:root@host

and that's the whole page, bestie! πŸ’– this gem is from the NVMe manual, dated 10/30/2026, and it's filed under NVME-LIST-SUBSYS(1) β€” go forth and list those subsystems, you absolute icon. πŸ§šβ€β™€οΈβœ¨
πŸ“¦ where this page comes from