Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
NVMECONTROL(8)		     System Manager's Manual		  NVMECONTROL(8)

NAME
     nvmecontrol -- NVM Express control utility

SYNOPSIS
     nvmecontrol devlist [-h]
     nvmecontrol identify [-v] [-x] [-n nsid] <device-id | namespace-id>
     nvmecontrol perftest <-n num_threads> <-o read|write> [-p]
		 <-s size_in_bytes> <-t time_in_sec> <namespace-id>
     nvmecontrol reset <device-id>
     nvmecontrol logpage <-p page_id> [-x] [-v vendor-string] [-b] [-f LSP]
		 [-i LSI] [-r] <device-id | namespace-id>
     nvmecontrol ns active <device-id>
     nvmecontrol ns allocated <device-id>
     nvmecontrol ns attach <-n nsid> <-c cntid> <device-id>
     nvmecontrol ns attached <-n nsid> <device-id>
     nvmecontrol ns controllers <device-id>
     nvmecontrol ns create <-s nsze> [-c ncap] [-f lbaf] [-m mset] [-n nmic]
		 [-p pi] [-l pil] [-L flbas] [-d dps] <device-id>
     nvmecontrol ns delete <-n nsid> <device-id>
     nvmecontrol ns detach <-n nsid> <-c cntid> <device-id>
     nvmecontrol ns identify [-v] [-x] <-n nsid> <device-id>
     nvmecontrol nsid <device-id | namespace-id>
     nvmecontrol resv acquire <-c crkey> [-p prkey] <-t rtype> <-a racqa>
		 <namespace-id>
     nvmecontrol resv register [-i] [-c crkey] <-k nrkey> <-r rrega> [-p cptpl]
		 <namespace-id>
     nvmecontrol resv release <-c crkey> <-t rtype> <-a rrela> <namespace-id>
     nvmecontrol resv report [-e] [-v] [-x] <namespace-id>
     nvmecontrol firmware [-s slot] [-f path_to_firmware] [-a] <device-id>
     nvmecontrol format [-f fmt] [-m mset] [-p pi] [-l pil] [-E] [-C]
		 <device-id | namespace-id>
     nvmecontrol sanitize <-a sanact> [-c owpass] [-d] [-p ovrpat] [-r] [-I]
		 [-U] <device-id>
     nvmecontrol power [-l] [-p -power_state] [-w -workload_hint]
     nvmecontrol selftest <-c code> <device-id | namespace-id>
     nvmecontrol wdc cap-diag [-o -path_template] <device-id>
     nvmecontrol wdc drive-log [-o -path_template] <device-id>
     nvmecontrol wdc get-crash-dump [-o -path_template] <device-id>
     nvmecontrol admin-passthru [args] <device-id>
     nvmecontrol io-passthru [args] <namespace-id>
     nvmecontrol discover [-v] [-t transport] [-q HostNQN]
     nvmecontrol connect [-FGg] [-c cntl-id] [-i queues] [-k seconds]
		 [-l seconds] [-r seconds] [-t transport] [-q HostNQN]
		 [-Q entries] <address> <SubNQN>
     nvmecontrol connect-all [-FGg] [-i queues] [-k seconds] [-l seconds]
		 [-r seconds] [-t transport] [-q HostNQN] [-Q entries] <address>
     nvmecontrol disconnect <device-id | namespace-id | SubNQN>
     nvmecontrol reconnect <device-id>
     nvmecontrol reconnect [-FGg] [-i queues] [-k seconds] [-l seconds]
		 [-r seconds] [-t transport] [-q HostNQN] [-Q entries]
		 <device-id> <address>
     nvmecontrol telemetry-log -O output-file [-d data-area] <device-id>

DESCRIPTION
     NVM  Express (NVMe) is a storage protocol standard for SSDs and other high-
     speed storage devices over PCI Express as well as	remote	storage  devices
     accessed via a network fabric.

   devlist
     List  all	NVMe  controllers  and namespaces along with their device nodes.
     With  the	-h  argument,  use  unit  suffixes:  Byte,  Kibibyte,  Mebibyte,
     Gibibyte,	Tebibyte and Pebibyte (based on powers of 1024) when showing the
     disk space.  By default, uses Mebibyte.

   identify
     The   identify   commands	 reports   information	  from	  the	 drive's
     IDENTIFY_CONTROLLER    if	 a   device-id	 is   specified.    It	 reports
     IDENTIFY_NAMESPACE data if a namespace-id is  specified.	When  used  with
     disk  names,  the IDENTIFY_NAMESPACE data is reported, unless the namespace
     nsid is overridden with the -n flag.  Then that  namespace's  data  is  re-
     ported, if it exists.  The command accepts the following parameters:

     -n      The  namespace  <nsid>  to  use instead of the namespace associated
	     with  the	device.   A  nsid  of  "0"  is	used  to  retrieve   the
	     IDENTIFY_CONTROLLER data associated with that drive.

   logpage
     The logpage command knows how to print log pages of various types.  It also
     knows  about  vendor  specific log pages from HGST/WDC, Samsung, Micron and
     Intel.  Note that some vendors use the same log page numbers for  different
     data.

     Page 0x01	Drive Error Log
     Page 0x02	Health/SMART Data
     Page 0x03	Firmware Information
     Page 0x04	Changed Namespace List
     Page 0x05	Commands Supported and Effects
     Page 0x06	Device Self-test
     Page 0x80	Reservation Notification
     Page 0x81	Sanitize Status
     Page 0xc1	Advanced SMART information (WDC/HGST)
     Page 0xc1	Read latency stats (Intel)
     Page 0xc2	Write latency stats (Intel)
     Page 0xc5	Temperature stats (Intel)
     Page 0xca	Advanced SMART information (Intel)
     Page 0xca	Extended SMART information (Samsung)
     Page 0xca	Vendor Unique SMART information (Micron)

     Specifying  -v  help  will list all valid vendors and pages.  -x will print
     the page as hex.  -b will print the binary data for the page.  -s will  set
     Log  Specific Field.  -i will set Log Specific Identifier.  -r will set Re-
     tain Asynchronous Event.

   ns
     Various namespace management commands.  If  namespace  management	is  sup-
     ported  by  device,  allow list, create and delete namespaces, list, attach
     and detach controllers to namespaces.  Each NVM device consists of  one  or
     more  NVM	subsystems.  Each NVM subsystem has one or more NVM ports.  Each
     NVM port is attached to one or more NVM controllers (though  typically  1).
     Each NVM controller is attached to one or more namespaces.

     After a namespace is created, it is considered "allocated".  All namespaces
     that  have not been created are unallocated.  An allocated namespace may be
     active or inactive.  An active namespace is attached to the controller  and
     may  be interacted with.  A namespace can move from active to inactive when
     detached.	An allocated namespace may be  deleted	to  become  unallocated.
     For  more	details  on  the nuances of NVM namespaces, please see section 2
     Theory of Operation and section 3 NVM Express Architecture  of  the  latest
     NVM standard.

   ns active
     Provide  a  list  of  active  namespace  identifiers for the givne NVM con-
     troller.

   ns allocated
     Provide a list of allocated namespace identifiers for the	givne  NVM  con-
     troller.

   ns attach
     Attach  an  nsid to a controller.	The primary controller is used if one is
     not specified.

   ns attached
     Provide a list of controllers attached to a nsid.	 If  only  a  nvme  con-
     troller argument is provided, a nsid must also be specified.

   ns controllers
     Provide a list of all controllers in the NVM subsystem.

   ns create
     Creates a new namespace.

   ns delete
     Delete a namespace.  It must be currently inactive.

   ns detach
     Detach a namespace from a controller.  The namespace will become inaccessi-
     ble, but its contents will remain if it is activated again.

   ns identify
     Print detailed information about the namespace.

   nsid
     Reports  the  namespace  id  and  controller  device  associated  with  the
     <namespace-id> or <device-id> argument.

   resv acquire
     Acquire or preempt namespace reservation, using specified parameters:

     -a      Acquire action:
	     0	     Acquire
	     1	     Preempt
	     2	     Preempt and abort

     -c      Current reservation key.

     -p      Preempt reservation key.

     -t      Reservation type:
	     1	     Write Exclusive
	     2	     Exclusive Access
	     3	     Write Exclusive - Registrants Only
	     4	     Exclusive Access - Registrants Only
	     5	     Write Exclusive - All Registrants
	     6	     Exclusive Access - All Registrants

   resv register
     Register, unregister or replace reservation key,  using  specified  parame-
     ters:

     -c      Current reservation key.

     -k      New reservation key.

     -r      Register action:
	     0	     Register
	     1	     Unregister
	     2	     Replace

     -i      Ignore Existing Key

     -p      Change Persist Through Power Loss State:
	     0	     No change to PTPL state
	     2	     Set  PTPL state to a0a.  Reservations are released and reg-
		     istrants are cleared on a power on.
	     3	     Set PTPL state to a1a.  Reservations and  registrants  per-
		     sist across a power loss.

   resv release
     Release or clear reservation, using specified parameters:

     -c      Current reservation key.

     -t      Reservation type.

     -a      Release action:
	     0	     Release
	     1	     Clean

   resv report
     Print reservation status, using specified parameters:

     -x      Print reservation status in hex.

     -e      Use Extended Data Structure.

   format
     Format  either  specified	namespace,  or	all namespaces of specified con-
     troller, using specified parameters:

     -f fmt    The index fmt of the parameters to use.	LBA Format #, as  speci-
	       fied  in  the  identification of the namespace using "nvmecontrol
	       identify" command with a namespace specified maps this index into
	       these parameters.

     -m mset   Metadata Setting.  mset
	       0       do not transfer metadata with LBA information
	       1       Transfer the metadata as part of the extended LBA  infor-
		       mation.

     -p pi     Protection Information.
	       0       Protection Information not enabled.
	       1       Type 1 information protection enabled.
	       2       Type 2 information protection enabled.
	       3       Type 3 information protection enabled.

     -l pil    Protection Information Location.
	       0       Transfer  the  protection metadata as the last N bytes of
		       the transfer.
	       1       Transfer the protection metadata as the first N bytes  of
		       the transfer.

     -E        Enables	User Data Erase during format.	All users data is erased
	       and subsequent reads are indeterminate.	The drive may  implement
	       this  as a cryptographic erase or it may physically erase the un-
	       derlying media.

     -C        Enables Cryptographic Erase during  format.   All  user	data  is
	       erased  cryptographically by deleting the encryption key, render-
	       ing it unintelligible.

     When  formatting  specific namespace, existing values are used as defaults.
     When formatting all namespaces, all parameters should be  specified.   Some
     controllers  may  not  support  formatting or erasing specific or all name-
     spaces.  The nvme(4) driver does not currently support metadata and protec-
     tion information transfers.

   sanitize
     Sanitize NVM subsystem of specified controller, using specified parameters:

     -a operation
	     Specify the sanitize operation to perform.

	     overwrite	       Perform an overwrite operation by writing a  user
			       supplied  data  pattern to the device one or more
			       times.  The pattern is given by the -p  argument.
			       The number of times is given by the -c argument.

	     block	       Perform	a  block  erase  operation.  All the de-
			       vice's blocks are set to a vendor defined  value,
			       typically zero.

	     crypto	       Perform a cryptographic erase operation.  The en-
			       cryption  keys are changed to prevent the decryp-
			       tion of the data.

	     exitfailure       Exits a previously failed sanitize operation.   A
			       failed  sanitize  operation can only be exited if
			       it was run in the unrestricted  completion  mode,
			       as provided by the -U argument.

	     1, 2, 3, 4        nvme-cli  compatible -a values for "exitfailure",
			       "block", "overwrite", and "crypto" respectively.

     -c passes
	     The number of passes  when  performing  an  `overwrite'  operation.
	     Valid values are between 1 and 16.  The default is 1.

     -d      No Deallocate After Sanitize.

     -I      When  performing  an `overwrite' operation, the pattern is inverted
	     between consecutive passes.

     -p pattern
	     32 bits of pattern to use when performing an `overwrite' operation.
	     The pattern is repeated as needed to fill each block.

     -U      Perform the sanitize in the unrestricted completion mode.	 If  the
	     operation	fails, it can later be exited with the `exitfailure' op-
	     eration.

     -r      Run in "report only" mode.  This will report status on  a	sanitize
	     that is already running on the drive.

   power
     Manage the power modes of the NVMe controller.

     -l      List all supported power modes.

     -p mode
	     Set the power mode to mode.  This must be a mode listed with the
		   nvmecontrol power -l
	     command.

     -w hint
	     Set the workload hint for automatic power mode control.
	     0	     No workload hint is provided.
	     1	     Extended  idle  period  workload.	The device is often idle
		     for minutes at a time.  A burst of write commands comes  in
		     over a period of seconds.	Then the device returns to being
		     idle.
	     2	     Heavy  sequential	writes.   A  huge  number  of sequential
		     writes will be submitted, filling the submission queues.
	     Other   All other values are reserved and have no standard meaning.
	     Please see the "NVM Subsystem Workloads" section  of  the	relevant
	     NVM Express Base Standard for details.

   selftest
     Start the specified device self-test:

     -c code
	     Specify the device self-test command code.  Common codes are:
	     0x1     Start a short device self-test operation
	     0x2     Start an extended device self-test operation
	     0xe     Start a vendor specific device self-test operation
	     0xf     Abort the device self-test operation

   wdc
     The various wdc command retrieve log data from the wdc/hgst drives.  The -o
     flag specifies a path template to use to output the files.  Each file takes
     the  path	template (which defaults to nothing), appends the drive's serial
     number and the type of dump it is followed by .bin.   These  logs	must  be
     sent  to the vendor for analysis.	This tool only provides a way to extract
     them.

   passthru
     The "admin-passthru" and "io-passthru" commands send NVMe commands  to  ei-
     ther the administrative or the data part of the device.  These commands are
     expected  to  be compatible with nvme-cli.  Please see the NVM Express Base
     Standard for details.

     -o --opcode opcode
		       Opcode to send.

     -2 --cdw2 value   32-bit value for CDW2.

     -3 --cdw3 value   32-bit value for CDW3.

     -4 --cdw10 value  32-bit value for CDW10.

     -5 --cdw11 value  32-bit value for CDW11.

     -6 --cdw12 value  32-bit value for CDW12.

     -7 --cdw13 value  32-bit value for CDW13.

     -8 --cdw14 value  32-bit value for CDW14.

     -9 --cdw15 value  32-bit value for CDW15.

     -l --data-len     Length of the data for I/O (bytes).

     -m --metadata-len
		       Length of the metadata segment for command (bytes).  This
		       is ignored and not implemented in nvme(4).

     -f --flags        Nvme command flags.

     -n --namespace-id
		       Namespace ID for command (Ignored).

     -p --prefill      Value to prefill payload with.

     -b --raw-binary   Output in binary format (otherwise a  hex  dump	is  pro-
		       duced).

     -d --dry-run      Do  not	actually execute the command, but perform sanity
		       checks on it.

     -r --read	       Command reads data from the device.

     -s --show-command
		       Show all the command values on stdout.

     -w --write        Command writes data to the device.

     Send arbitrary commands to the device.  Can be used to extract vendor  spe-
     cific  logs.  Transfers to/from the device possible, but limited to MAXPHYS
     bytes.  Commands either read data or write  it,  but  not	both.	Commands
     needing metadata are not supported by the nvme(4) drive.

   discover
     List the remote controllers advertised by a remote Discovery Controller:

     -t transport
	     Transport to use.	The default is tcp.

     -q HostNQN
	     NVMe  Qualified  Name  to	use for this host.  By default an NQN is
	     auto-generated from the current host's UUID.

     -v      Display the IDENTIFY_CONTROLLER data for the Discovery Controller.

   connect
     Establish an association with the I/O controller named SubNQN  at	address.
     The address must include a port.

     An  admin queue pair and one or more I/O queue pairs are created and handed
     off to the kernel to create a new controller device.

     -c cntl-id
	     Remote controller ID to request:

	     dynamic
		     Request a dynamic controller ID for controllers  using  the
		     dynamic controller model.	This is the default.

	     static  Request  a  dynamic controller ID for controllers using the
		     static controller model.

	     number  Request a specific controller ID for controllers using  the
		     static controller model.

     -F      Request submission queue flow control.  By default submission queue
	     flow control is disabled unless the remote controller requires it.

     -g      Enable TCP PDU header digests.

     -G      Enable TCP PDU data digests.

     -i queues
	     Number of I/O queue pairs to create.  The default is 1.

     -k seconds
	     Keep Alive timer duration in seconds.  The default is 120.

     -l seconds
	     Controller Loss timer duration in seconds.  The default is 600.

	     This  timer  starts  when	an association is lost with a remote I/O
	     controller and is cancelled when a new association is  established.
	     If  the timer expires, the controller device is deleted.  A setting
	     of zero disables this timer.

     -r seconds
	     Reconnect timer duration in seconds.  The default is 10.

	     When an association is lost with a remote I/O controller, the  con-
	     troller device will request reconnection via periodic devctl(4) no-
	     tifications  until  either  a new association is established or the
	     controller device is deleted.  This timer sets the interval between
	     each devctl(4) notification.  Note that the first	notification  is
	     triggered	immediately  after an association is lost.  A setting of
	     zero disables this timer.

     -t transport
	     Transport to use.	The default is tcp.

     -q HostNQN
	     NVMe Qualified Name to use for this host.	By  default  an  NQN  is
	     auto-generated from the current host's UUID.

     -Q entries
	     Number of entries in each I/O queue.  The default is the minimum of
	     128 or the maximum queue size reported by the MQES field of the re-
	     mote host's CAP property.

   connect-all
     Query  the Discovery Controller at address and establish an association for
     each advertised I/O controller.  The -t flag determines the transport  used
     for  the  initial association with the Discovery Controller and defaults to
     tcp.  All other flags are used to control properties of each I/O assocation
     as described above for the connect command.

   disconnect
     Delete the controller device associated with a remote  I/O  controller  in-
     cluding any active association and open queues.

   reconnect
     Reestablish  an  association  for the remote I/O controller associated with
     device-id.  If an address is not provided, the resolved  address  and  set-
     tings  from  the  previous association are used to establish a new associa-
     tion.  If an address is provided, the supplied  address  and  command  line
     flags  are  used to establish a new association.  In this case, the address
     must include a port and the flags have the same meaning for the new associ-
     ation as described above for the connect command.

   telemetry-log
     Extract the telemetry log associated with device-id,  using  the  specified
     parameters:

     -O output-file
	     Output file for the data.	This parameter is mandatory.

     -d data-area
	     The data area is either 1, 2 or 3.

DEVICE NAMES
     Where  <namespace-id>  is required, you can use either the nvmeXnsY device,
     or the disk device such as ndaZ or nvdZ.  The leading /dev/ may be omitted.
     Where <device-id> is required, you can use either the nvmeX device, or  the
     disk  device  such  as  ndaZ  or  nvdZ.  For commands that take an optional
     <nsid> you can use it to get information on other namespaces, or  to  query
     the drive itself.	A <nsid> of "0" means query the drive itself.

FABRICS TRANSPORTS
     The following NVM Express over Fabrics transports are supported for access-
     ing remote controllers:

     tcp     TCP transport

NETWORK ADDRESSES
     Network  addresses for remote controllers can use one of the following for-
     mats:

     *	 [IPv6 address] :port

     *	 IPv4 address :port

     *	 hostname:port

     *	 [IPv6 address]

     *	 IPv6 address

     *	 IPv4 address

     *	 hostname

     If a port is not provided, a default value is used if possible.

EXAMPLES
	   nvmecontrol devlist

     Display a list of NVMe controllers and namespaces along with  their  device
     nodes.

	   nvmecontrol identify nvme0
	   nvmecontrol identify -n 0 nvd0

     Display a human-readable summary of the nvme0 IDENTIFY_CONTROLLER data.  In
     this example, nvd0 is connected to nvme0.

	   nvmecontrol identify -x -v nvme0ns1
	   nvmecontrol identify -x -v -n 1 nvme0

     Display  an hexadecimal dump of the nvme0 IDENTIFY_NAMESPACE data for name-
     space 1.

	   nvmecontrol perftest -n 32 -o read -s 512 -t 30 nvme0ns1

     Run a performance test on nvme0ns1 using 32 kernel threads for 30	seconds.
     Each thread will issue a single 512 byte read command.  Results are printed
     to stdout when 30 seconds expires.

	   nvmecontrol reset nvme0
	   nvmecontrol reset nda4

     Perform a controller-level reset of the nvme0 controller.	In this example,
     nda4 is wired to nvme0.

	   nvmecontrol logpage -p 1 nvme0

     Display  a  human-readable summary of the nvme0 controller's Error Informa-
     tion Log.	Log pages defined by the NVMe specification include Error Infor-
     mation Log (ID=1), SMART/Health Information Log (ID=2), and  Firmware  Slot
     Log (ID=3).

	   nvmecontrol logpage -p 0xc1 -v wdc nvme0

     Display a human-readable summary of the nvme0's wdc-specific advanced SMART
     data.

	   nvmecontrol logpage -p 1 -x nvme0

     Display a hexadecimal dump of the nvme0 controller's Error Information Log.

	   nvmecontrol logpage -p 0xcb -b nvme0 > /tmp/page-cb.bin

     Print  the contents of vendor specific page 0xcb as binary data on standard
     out.  Redirect it to a temporary file.

	   nvmecontrol firmware -s 2 -f /tmp/nvme_firmware nvme0

     Download the firmware image contained in "/tmp/nvme_firmware" to slot 2  of
     the nvme0 controller, but do not activate the image.

	   nvmecontrol firmware -s 4 -a nvme0

     Activate the firmware in slot 4 of the nvme0 controller on the next reset.

	   nvmecontrol firmware -s 7 -f /tmp/nvme_firmware -a nvme0

     Download  the firmware image contained in "/tmp/nvme_firmware" to slot 7 of
     the nvme0 controller and activate it on the next reset.

	   nvmecontrol power -l nvme0

     List all the current power modes.

	   nvmecontrol power -p 3 nvme0

     Set the current power mode.

	   nvmecontrol power nvme0

     Get the current power mode.

	   nvmecontrol identify -n 0 nda0

     Identify the drive data associated with the nda0 device.  The corresponding
     nvmeX devices is used automatically.

	   nvmecontrol identify nda0

     Get the namespace parameters associated with the nda0 device.   The  corre-
     sponding nvmeXnsY device is used automatically.

	   nvmecontrol format -f 2 -m 0 -p 0 -l 0 -C nvme2

     Format  all  the name spaces on nvme2 using parameters from "LBA Format #2"
     with no metadata or protection data  using  cryptographic	erase.	 If  the
     "nvmecontrol identify -n 1 nvme2" command ended with

     LBA Format #00: Data Size:   512  Metadata Size:	  0  Performance: Good
     LBA Format #01: Data Size:   512  Metadata Size:	  8  Performance: Good
     LBA Format #02: Data Size:  4096  Metadata Size:	  0  Performance: Good
     LBA Format #03: Data Size:  4096  Metadata Size:	  8  Performance: Good
     LBA Format #04: Data Size:  4096  Metadata Size:	 64  Performance: Good

     then  this  would	give  a 4k data format for at least namespace 1, with no
     metadata.

DYNAMIC LOADING
     The directories /lib/nvmecontrol and /usr/local/lib/nvmecontrol are scanned
     for any .so files.  These files are loaded.  The members of the top  linker
     set are added to the top-level commands.  The members of the logpage linker
     set are added to the logpage parsers.

SEE ALSO
     The  NVM  Express Base Specification, https://nvmexpress.org/wp-content/up-
     loads/NVM-Express-1_4-2019.06.10-Ratified.pdf, June 10, 2019.

HISTORY
     The nvmecontrol utility appeared in FreeBSD 9.2.

AUTHORS
     nvmecontrol was developed by Intel and originally	written  by  Jim  Harris
     <jimharris@FreeBSD.org>.

     This man page was written by Jim Harris <jimharris@FreeBSD.org>.

FreeBSD ports 15.quarterly	February 20, 2026		  NVMECONTROL(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=nvmecontrol&sektion=8&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help