| NVMEADM(8) | Maintenance Commands and Procedures | NVMEADM(8) |
nvmeadm — NVMe
administration utility
nvmeadm |
-h [command] |
nvmeadm |
[-dv] list
[-c | -L]
[-p -o
field[,...]]
[ctl[/ns][,...]] |
nvmeadm |
[-dv] identify
[-C | -c |
-d | [-a]
-n] ctl[/ns][,...] |
nvmeadm |
[-dv]
identify-controller [-C |
-c | [-a]
-n] ctl[,...] |
nvmeadm |
[-dv] identify-namespace
[-c | -d]
ctl/ns[,...] |
nvmeadm |
[-dv] list-logpages
[-a] [-H]
[-o field[,...]
[-p]] [-s
scope[,...]] ctl[/ns][,...]
[logpage...] |
nvmeadm |
[-dv] get-logpage
[-O output-file |
-x | -p
-o field[,...]
[-H]] ctl[/ns][,...]
logpage [filter...] |
nvmeadm |
[-dv] print-logpage
-f file
[-x | -p
-o field[,...]
[-H]] logpage
[filter...] |
nvmeadm |
[-dv] list-features
[-a] [-H]
[-o field[,...]
[-p]] ctl[/ns][,...]
[feature...] |
nvmeadm |
[-dv] get-features
ctl[/ns][,...]
[feature-list] |
nvmeadm |
[-dv] set-feature
[-s] [-v
value] [--cdw12
cdw12] [--cdw13
cdw13] [--cdw15
cdw15] [-l
length -i
file] [-I
impact[,...]]
ctl feature |
nvmeadm |
[-dv] format
ctl[/ns] [lba-format] |
nvmeadm |
[-dv] secure-erase
[-c] ctl[/ns] |
nvmeadm |
[-dv] create-namespace
-b block-size |
-f flbas
[-c cap]
[-n nmic]
[-t type]
ctl size |
nvmeadm |
[-dv] delete-namespace
ctl/ns |
nvmeadm |
[-dv] attach-namespace
ctl/ns |
nvmeadm |
[-dv] detach-namespace
ctl/ns |
nvmeadm |
[-dv] attach
ctl[/ns] |
nvmeadm |
[-dv] detach
ctl[/ns] |
nvmeadm |
[-dv] list-firmware
ctl |
nvmeadm |
[-dv] load-firmware
ctl firmware-file
[offset] |
nvmeadm |
[-dv] commit-firmware
ctl slot |
nvmeadm |
[-dv] activate-firmware
ctl slot |
nvmeadm |
[-dv] measure-phyeye
-o output
[-Q good |
better | best]
ctl |
nvmeadm |
[-dv] report-phyeye
-f file
[-l lane]
[-e eye]
[-m mode] |
nvmeadm |
[-dv] vendor-cmd
-O opcode
[-n nsid]
[--cdw12 cdw12]
[--cdw13 cdw13]
[--cdw14 cdw14]
[--cdw15 cdw15]
[-l length
[-i file |
-o file]]
[-L lock]
[-I
impact[,...]]
[-t timeout]
ctl[/ns] |
nvmeadm |
[-dv] ocp/error-inject
[-l lat_us]
[-n nreads]
ctl error |
nvmeadm |
[-dv] sandisk/hwrev
ctl |
nvmeadm |
[-dv] sandisk/pci-eye
-l lane
-o output
ctl |
nvmeadm |
[-dv] wdc/e6dump
-o output
ctl |
nvmeadm |
[-dv] wdc/resize
-s size |
-g ctl |
nvmeadm |
[-dv] wdc/clear-assert
ctl |
nvmeadm |
[-dv] wdc/inject-assert
ctl |
The nvmeadm utility can be used to
enumerate the NVMe controllers and their namespaces, query hardware
information from a NVMe controller or namespace, and to format or
secure-erase a NVMe controller or namespace.
The information returned by the hardware is printed by
nvmeadm in a human-readable form were applicable.
Generally all 0-based counts are normalized and values may be converted to
human-readable units such as MB (megabytes), W (watts), or C (degrees
Celsius).
The following options are supported:
nvmeadm expects the following kinds of
arguments:
nvmeadm understands. See section
COMMANDS.identify command. The namespace ID is a positive
non-zero decimal number. For commands that don't change the device state
multiple controllers and namespaces can be specified as a comma-separated
list.
The list of controllers and namespaces present in the system
can be queried with the list command without any
arguments.
get-logpage
and print-logpage command. Valid names are listed
in the discussion of the get-logpage command
below. Log pages both the system and controller support can be determined
with the list-logpages command.The matching behavior varies between parsable and non-parsable output. Consider the filter “eom.od.pefp”. This prints the Printable Eye Field Present member, from the Optional Data Present Field, from the EOM Header that is part of the phyeye log page. In non-parsable mode, the filter “eom” would match the entire contents of the EOM header. However, in parsable mode, only an exact match fires to ensure that the contents are stable across changes to the specification which add members to reserved fields.
When using filters, the program will exit non-zero if any filter does not match.
get-features command. Feature names can be
specified in upper or lower case. All features can be specified either by
a short name listed below or by the full name that the specification
uses.format command. The list of supported LBA formats
on a namespace can be retrieved with the nvmeadm
identify command.load-firmware command.For more information on the differences between these, please see the NVMe specification.
This is used by the create-namespace
command.
commit-firmware command, and subsequently
activated with the activate-firmware command.
Slots and their contents can be printed using the
nvmeadm list-firmware
command.nvmeadm list
[-c | -L]
[-p -o
field[,...]]
[ctl[/ns][,...]]-v option to
nvmeadm, all possible namespaces of the
controllers will be listed.
The nvmeadm
list command supports the following options:
-c-L-p-o option.-o
field[,...]The following fields can be specified when using the parsable form:
In addition, the following fields can be specified when
listing namespaces, not using the -c option:
nvmeadm operations.data+meta’. For example, a 4K
formatted namespace with no metadata sectors would be shown as
‘4096+0’. A 512-byte formatted
namespace with 16 bytes of metadata (perhaps for end-to-end data
protection) would be formatted as
‘4096+16’.format subcommand.When using the -c or
-L option to list controllers, the following
additional fields are supported:
When using the -L option, the
following additional fields are supported:
nvmeadm
identify-controller [-C |
-c | [-a]
-n] ctl[,...]By default, a relevant subset of the "IDENTIFY CONTROLLER" data structure is printed. The full data structure is only printed when verbose output is requested.
The following options can be used to print other "IDENTIFY" information:
-C-a-n option to print the
list allocated namespace identifiers. Can only be specified together
with the -n option.-c-nnvmeadm identify-namespace
[-c | -d]
ctl/ns[,...]By default, a relevant subset of the "IDENTIFY NAMESPACE" data structure is printed. The full data structure is only printed when verbose output is requested.
The following options can be used to print other "IDENTIFY" information:
nvmeadm identify
[-C | -c |
-d | [-a]
-n] ctl[/ns][,...]identify-controller and
identify-namespace commands, prints the same
information about the specified controllers and/or namespaces, depending
on whether a controller or a namespace was specified.
For a description of the various optional flags refer to the
above description of the identify-controller and
identify-namespace commands.
nvmeadm [-dv]
list-logpages [-a]
[-H] [-o
field[,...] [-p]]
[-s scope[,...]]
ctl[/ns][,...] [logpage...]The nvmeadm
list-logpages command supports the following
options:
-a-H-o
field[,...]-p-o option.-s
scope[,...]The following fields are supported:
get-logpage command.
This is a shortened form from the NVMe or vendor-specific
documentation.get-logpage
command to get the log.The list-logpages command supports a
series of operands which can be used to filter the list of log pages
that information is printed out about. Each
logpage operand is the name of a log page. Only
matching log pages will be printed and if no log pages match a given
operand argument or not log pages are printed at all (which can happen
due to a log being unsupported) then the command will generate an
error.
nvmeadm get-logpage
-O output-file |
-x |
-p
-o field[,...]
[-H] ctl[/ns][,...]
logpage [filter...]The nvmeadm
get-logpage command supports the following
options:
-H-O
output-file-o
field[,...]-p-o option.-x-x
option.The following fields are supported:
nvmeadm.Most log pages are only available on a per-controller basis. For an explanation of the contents of the log pages refer to the description of the "GET LOGPAGE" admin command in the NVMe specification.
One or more filter operands may be supplied to a subset of log pages. These filters will limit the fields that are printed in both parsable and human-readable mode. Log pages the system does not know how to decode are printed in a hexadecimal dump and filters are not supported.
Known log pages are:
-O option be specified.measure-phyeye and
report-phyeye commands for specialized
subcommands dedicated to this.The following vendor-specific log pages are supported. Not all
devices from a vendor support every log page. Use the
list-logpages command to determine which are
supported for a given device and whether they operate on a controller or
namespace.
nvmeadm print-logpage
-f file
[-x | -p
-o field[,...]
[-H]] logpage
[filter...]get-logpage command retrieves an individual log
page from a device, the print-logpage instead
reads log page data from an input file file, but
otherwise provides the same decoding and filtering capabilities. This
allows a log page to be interpreted multiple times without asking for the
controller for a fresh copy and allows log pages from remote hosts to be
processed locally. To capture the binary log file use
nvmeadm get-logpage
-O.
The nvmeadm
print-logpage command supports the following
options:
-f
file-H-o
field[,...]-p-o option.-x-x option.The print-logpage command supports the
same fields, filters, and log page names as the
get-logpage command. See
Examples.
nvmeadm list-features
[-a] [-H]
[-o field[,...]
[-p]] ctl[/ns][,...]
[feature[,...]]The nvmeadm
list-features command supports the following
options:
-a-H-o
field[,...]-p-o option.The following fields are supported:
The list-features command supports a
series of operands which can be used to filter the list of features that
information is printed out about. Each feature
operand is either the short name or the specification's name for a given
feature. In addition, the numeric feature ID can also be used as a
filter. If no features match a given operand or no features are printed
at all then the command will generate an error.
nvmeadm get-features
ctl[/ns][,...]
[feature-list]| FULL NAME | SHORT NAME | CONTROLLER/NAMESPACE |
| Arbitration | arb | controller |
| Power Management | pm | controller |
| LBA Range Type | range | namespace |
| Temperature Threshold | temp | controller |
| Error Recovery | errec | controller |
| Volatile Write Cache | cache | controller |
| Number of Queues | queues | controller |
| Interrupt Coalescing | coalescing | controller |
| Interrupt Vector Configuration | vector | controller |
| Write Atomicity | atomicity | controller |
| Asynchronous Event Configuration | event | controller |
| Autonomous Power State Transition | apst | controller |
| Software Progress Marker | progress | controller |
| Host Behavior Support | hostsup | controller |
| OCP Error Injection | ocp/errinj | nvm |
| OCP PLP Failure Mode | ocp/plpfail | nvm |
| OCP PLP Health Check Interval | ocp/plphealth | nvm |
For an explanation of the individual features refer to the description of the "SET FEATURES" admin command in the NVMe specification.
nvmeadm set-feature
[-s] [-v
value | --cdw11
cdw11] [--cdw12
cdw12] [--cdw13
cdw13] [--cdw15
cdw15] [-l
length -i
file] [-I
impact[,...]]
ctl featurenvmeadm
list-features. If the value of
feature is not known to the system, it will be
parsed as a feature identifier and used if it is within the NVMe
vendor-specific feature range [0xc0, 0xff]. This may be specified in
either decimal or hexadecimal.
Each feature has its own required fields. This is generally at
least one of a 32-bit value in cdw11 and an optional data object. When
specifying the optional data object, both an input file
(-i) and its length (-l)
must be specified. The list of fields that are required to set a feature
may be discovered by using the “set-in” field with
nvmeadm
list-features.
The set-feature command supports the
following options:
-s-v,
--cdw11 valueIf no value is specified, this field will be set to 0 in the command.
--cdw12,
-2 cdw12If no value is specified, this field will be set to 0 in the command.
--cdw13,
-3 cdw13If no value is specified, this field will be set to 0 in the command.
--cdw15,
-5 cdw15If no value is specified, this field will be set to 0 in the command.
-i,
--input file-l is specified. If the input
file, file, is shorter than the length specified
with -l, then the remaining data will be
filled with 0s.-l,
--length length-i.-I,
--impact
impact[,...]nvmeadm format
ctl[/ns] [lba-format]nvmeadm
detach and subsequent
nvmeadm attach of the
specified namespace(s), which will cause a changed LBA format to be
detected. If no LBA format is specified the LBA format currently used by
the namespace will be used. When formatting all namespaces without
specifying a LBA format the LBA format of namespace 1 will be used. A list
of LBA formats supported by a namespace can be queried with the
nvmeadm identify command.
Note that not all devices support formatting individual or all namespaces, or support formatting at all.
LBA formats using a non-zero metadata size are not supported
by nvmeadm or
nvme(4D).
The list of supported LBA formats on a namespace can be
retrieved with the nvmeadm
identify command.
nvmeadm secure-erase
[-c] ctl[/ns]-c will cause a cryptographic erase instead
of a normal erase. This command implies a nvmeadm
detach and nvmeadm
attach of the specified namespace(s).
Note that not all devices support erasing individual or all namespaces, or support erasing at all.
nvmeadm
create-namespace -b
block-size |
-f
flbas [-c
cap] [-n
nmic] [-t
type] ctl
sizeattach-namespace, and to the block device
framework (blkdev(4D)),
attach, to provide I/O capabilities.
By default, a newly created namespace:
-t option.-c
option to specify a value less than the size
argument. Note, the controller may not support thin provisioning.-n
option.When creating a namespace, one must specify what formatted LBA
index to use. This index may be specified directly with the
-f option or instead the target block size may
be specified with the -b option. If
-b is specified, then the command will search
for a namespace with that block size, with no metdata section, and with
the highest relative performance and use that. Available LBA format
options may be listed by printing the Common Namespace Identification
values through the identify-controller option
with the -C option.
The create-namespace command supports
the following options:
-b
block-size-f option.
block-size allow a binary prefix to be specified
as per the description of the size operand.-c
cap-f
flbas-n
nmic-t
typenvmeadm delete-namespace
ctl/nsTo delete a namespace, the namespace must already be detached
from all controllers through the
detach-namespace command.
Upon deleting a namespace, all information that was contained in the namespace will be lost.
nvmeadm attach-namespace
ctl/nsattach
command.nvmeadm detach-namespace
ctl/nsdetach command. When detached, the namespace
transitions from active to allocated in the controller. Data in the
namespace remains valid; however, not all commands will function against
the namespace and I/O may not be performed to it.nvmeadm attach
ctl[/ns]nvmeadm detach command.
It is not an error to attach a namespace that is already attached, any such request will be silently ignored.
nvmeadm detach
ctl[/ns]It is not an error to detach a namespace that is already detached, any such request will be silently ignored.
nvmeadm list-firmware
ctlnvmeadm
get-logpage ctl
firmware command.nvmeadm load-firmware
ctl firmware-file
[offset]nvmeadm commit-firmware
ctl slotload-firmware command to
slot.nvmeadm activate-firmware
ctl slotnvmeadm measure-phyeye
-o output
[-Q good |
better | best]
ctlreport-phyeye and
print-logpage commands.
The quality of the log page may be one of “good”, “better”, or “best”, which are levels described by the NVMe over PCIe Transport Specification. The higher the quality, the longer the measurement will take, but the more accurate it will be.
When the measurement is initiated, no additional administrative commands will be allowed on the device, though any active blkdev(4D) devices will still be active. It is recommended I/O be quiesced during the entire measurement period. The command will wait for the device's recommended time, potentially 5-10 minutes, before it queries the device for completeness.
The following options are supported:
nvmeadm report-phyeye
-f file
[-l lane]
[-e eye]
[-m mode]The following options are supported:
-f
filemeasure-phyeye command.-l
lane-e
eye-m
modenvmeadm vendor-cmd
-O opcode
[-n nsid]
[--cdw12 cdw12]
[--cdw13 cdw13]
[--cdw14 cdw14]
[--cdw15 cdw15]
[-l length
[-i file |
-o file]]
[-L lock]
[-I
impact[,...]]
[-t timeout]
ctl[/ns]The command may be run against either a controller or a namespace. When a namespace is specified, its namespace id is included in the command.
A command may optionally request that data be sent to the
controller as an input to the command (-i), or
returned by the controller as an output from the command
(-o). There is no support in the standard
protocol for both an arbitrary sized data input and output. The length
of the input is specified by the -l flag, which
indicates a size in bytes that must be a multiple of 4 (commands operate
in units of uint32_t). Data is either read from or
output to a file. The maximum input or output data size provided by the
system is 16 MiB.
When the command completes, it will print out the results of the command and the value of the completion command dword 0.
The following arguments are supported:
-O,
--opcode opcode-n,
--nsid nsidIf no namespace ID is specified, this field will be set to 0 in the command.
--cdw12,
-2 cdw12If no value is specified, this field will be set to 0 in the command.
--cdw13,
-3 cdw13If no value is specified, this field will be set to 0 in the command.
--cdw14,
-4 cdw14If no value is specified, this field will be set to 0 in the command.
--cdw15,
-5 cdw15If no value is specified, this field will be set to 0 in the command.
-l,
--length length-i or -o must be
specified to indicate the direction of the data transfer and the
source or destination of the data.-i,
--input file-l is specified. If the input
file, file, is shorter than the length specified
with -l, then the remaining data will be
filled with 0s.-o,
--output file-l is specified.-L,
---lock lock-I,
--impact
impact[,...]-t,
--timeout timeoutnvmeadm ocp/error-inject
[-l lat_us]
[-r nreads]
ctl errorThe error operand identifies the class of error to inject. Errors are identified either by name and are listed below. In addition, one may use the numeric identifier of an error in either decimal or hexadecimal. The following errors and events are supported:
The following options are supported:
-l
lat_us-r
nreadsnvmeadm sandisk/hwrev
ctlnvmeadm sandisk/pci-eye
-l lane
-o output
ctlnvmeadm wdc/e6dump
-o output
ctlnvmeadm wdc/resize
-s size |
-g
ctlThe following options are supported:
-g-s
sizeWhen performing a resize all data and namespace will be erased! All namespaces must be detached prior to issuing this.
nvmeadm [-dv]
wdc/clear-assert ctlwdc/e6dump command. This command should only be
used if instructed to do so as part of a troubleshooting process.nvmeadm [-dv]
wdc/inject-assert ctlThe nvmeadm utility exits 0 on
success, and >0 if an error occurs.
# nvmeadm list nvme1: model: INTEL SSDPEDMD800G4, serial: CVFT4134001R800CGN, FW rev: 8DV10049, NVMe v1.0 nvme1/1 (c1t1d0): Size = 763097 MB, Capacity = 763097 MB, Used = 763097 MB nvme4: model: SAMSUNG MZVPV128HDGM-00000, serial: S1XVNYAGA00640, FW rev: BXW7300Q, NVMe v1.1 nvme4/1 (c2t2d0): Size = 122104 MB, Capacity = 122104 MB, Used = 5127 MB
# nvmeadm identify nvme4/1
nvme4/1: Identify Namespace
Namespace Capabilities and Features
Namespace Size: 122104MB
Namespace Capacity: 122104MB
Namespace Utilization: 5127MB
Namespace Features
Thin Provisioning: unsupported
Number of LBA Formats: 1
Formatted LBA Size
LBA Format: 1
Extended Data LBA: no
Metadata Capabilities
Extended Data LBA: unsupported
Separate Metadata: unsupported
End-to-End Data Protection Capabilities
Protection Information Type 1: unsupported
Protection Information Type 2: unsupported
Protection Information Type 3: unsupported
Protection Information first: unsupported
Protection Information last: unsupported
End-to-End Data Protection Settings
Protection Information: disabled
Protection Information in Metadata: last 8 bytes
LBA Format 1
Metadata Size: 0 bytes
LBA Data Size: 512 bytes
Relative Performance: Best
# nvmeadm -v get-logpage nvme4/1 health
nvme4/1: SMART/Health Information
Critical Warnings
Available Space: OK
Temperature: OK
Device Reliability: OK
Media: OK
Volatile Memory Backup: OK
Temperature: 37C
Available Spare Capacity: 100%
Available Spare Threshold: 10%
Device Life Used: 0%
Data Read: 0GB
Data Written: 64GB
Read Commands: 52907
Write Commands: 567874
Controller Busy: 1min
Power Cycles: 6
Power On: 141h
Unsafe Shutdowns: 1
Uncorrectable Media Errors: 0
Errors Logged: 1
# nvmeadm get-features nvme0,nvme4 event,power
nvme0: Get Features
Asynchronous Event Configuration
Available Space below threshold: disabled
Temperature above threshold: disabled
Device Reliability compromised: disabled
Media read-only: disabled
Power Management
Power State: 0
nvme4: Get Features
Asynchronous Event Configuration
Available Space below threshold: disabled
Temperature above threshold: disabled
Device Reliability compromised: disabled
Media read-only: disabled
Volatile Memory Backup failed: disabled
Power Management
Power State: 0
# nvmeadm list-firmware nvme3 nvme3: Firmware Slot Information Active Firmware Slot: 4 Next Firmware Slot: 4 Firmware Revision for Slot 1: KNGND110 (read-only) Firmware Revision for Slot 2: KNGND110 Firmware Revision for Slot 3: KNGND110 Firmware Revision for Slot 4: KNGND112 Firmware Revision for Slot 5: KNGND110 # nvmeadm -v load-firmware nvme3 KNGND113.bin 1740544 bytes downloaded. # nvmeadm -v commit-firmware nvme3 5 Firmware committed to slot 5. # nvmeadm -v activate-firmware nvme3 5 Slot 5 activated: NVM subsystem reset required - power cycle your system. # nvmeadm list-firmware nvme3 nvme3: Firmware Slot Information Active Firmware Slot: 4 Next Firmware Slot: 5 Firmware Revision for Slot 1: KNGND110 (read-only) Firmware Revision for Slot 2: KNGND110 Firmware Revision for Slot 3: KNGND110 Firmware Revision for Slot 4: KNGND112 Firmware Revision for Slot 5: KNGND113
# nvmeadm list-logpages nvme8
DEVICE NAME SCOPE FIELDS DESC
nvme8 error controller rae Error information
nvme8 health controller, rae SMART / Health information
namespace
nvme8 firmware nvm -- Firmware Slot Information
nvme8 changens controller rae changed namespaces
nvme8 wdc/eol nvm -- EOL
nvme8 wdc/devmgmt controller, -- Device Manageability
namespace
nvme8 wdc/pciesi controller lsp PCIe Signal Integrity
nvme8 wdc/power controller -- Power Samples
nvme8 wdc/temp controller -- Temperature Samples
nvme8 wdc/fwact controller -- Firmware Activation
nvme8 wdc/ccds controller -- CCDS Build Information
# nvmeadm list-logpages -p -o name,impl nvme8 firmware
firmware:yes
# nvmeadm print-logpage -f eye.out phyeye
EOM Header
Log Identifier: 0x19
EOM In Progress: completed (0x2)
Header Size: 0x40
Result Size: 0x1aa40
EOM Data Generation Number: 0x7
Log Revision: 0x1
Optional Data Present: 0x3
|--> Printable Eye Field Present: present (0x1)
|--> Eye Data Field Present: present (0x1)
Lanes: 0x4
Eyes Per Lane: 0x1
Log Specific Parameter Field Copy: 0x6
|--> Printable Eye Field Present: 0x6
Link Information: 0x4
|--> Measurement Link Speed: 0x4
Log Specific Identifier Copy: 0x0
Descriptor Size: 0x6a80
Number of Descriptors: 0x4
Maximum Top Bottom: 0x100
Maximum Left Right: 0x1a
Estimated Time for Good Quality: 0x96
Estimated Time for Better Quality: 0xf0
Estimated Time for Best Quality: 0x168
EOM Lane Descriptor 0
Measurement Status: 0x1
|--> Measurement Successful: yes (0x1)
Lane: 0x0
Eye: 0x1
Top: 0x38
Bottom: 0x38
Left: 0xb
Right: 0xe
Number of Rows: 0x200
Number of Columns: 0x35
EOM Lane Descriptor 1
Measurement Status: 0x1
|--> Measurement Successful: yes (0x1)
Lane: 0x1
Eye: 0x1
Top: 0x34
Bottom: 0x30
Left: 0xa
Right: 0x10
Number of Rows: 0x200
Number of Columns: 0x35
EOM Lane Descriptor 2
Measurement Status: 0x1
|--> Measurement Successful: yes (0x1)
Lane: 0x2
Eye: 0x1
Top: 0x30
Bottom: 0x2c
Left: 0xa
Right: 0xf
Number of Rows: 0x200
Number of Columns: 0x35
EOM Lane Descriptor 3
Measurement Status: 0x1
|--> Measurement Successful: yes (0x1)
Lane: 0x3
Eye: 0x1
Top: 0x38
Bottom: 0x34
Left: 0xb
Right: 0xe
Number of Rows: 0x200
Number of Columns: 0x35
Filters can then be used to limit this output. In human readable mode, a filter will include all of its parent headings to make it clear where something is. Additionally a filter that is not a leaf, matches all of its children.
# nvmeadm print-logpage -f eye.out phyeye eom.odp eld2.ln
EOM Header
Optional Data Present: 0x3
|--> Printable Eye Field Present: present (0x1)
|--> Eye Data Field Present: present (0x1)
EOM Lane Descriptor 2
Lane: 0x2
In machine parsable mode, filters only match their exact value:
# nvmeadm print-logpage -f eye.out -Hpo short,value phyeye eom.eomip eom.eomip:0x2
# nvmeadm measure-phyeye -o eye.out -Q best nvme9
device indicates a minimum 360 second wait for best quality phyeye measurement
360/360 seconds elapsed
phyeye successfully written to eye.out
# nvmeadm report-phyeye -f eye.out -m eye-data -l 3
Lane 3, Eye 1: Eye Data
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 25 00 00 00 37 25 00 00 ff 00 00 00 38 53 00 00 | %...7%......8S..
10: 38 53 00 00 48 00 00 00 46 00 00 00 46 00 00 00 | 8S..H...F...F...
20: 42 00 00 00 42 00 00 00 eb 00 00 00 c7 00 00 00 | B...B...........
30: 0f 01 00 00 24 01 00 00 38 26 00 00 a0 00 00 00 | ....$...8&......
40: e0 00 00 00 20 0d 00 00 20 0d 00 00 40 00 00 00 | .... ... ...@...
50: 05 11 00 00 5f 08 00 00 41 08 00 00 80 08 00 00 | ...._...A.......
The command line interface of nvmeadm is
Evolving.
The output of nvmeadm is
Not-an-Interface
and may change any time.
The short names used by various filters are Committed.
Open Compute Project, Datacenter NVMe SSD Specification, Version 2.7, January 8, 2026.
| July 11, 2026 | OmniOS |