<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://k2.ixota.com/index.php?action=history&amp;feed=atom&amp;title=NVMe%2Fnvme-cli</id>
	<title>NVMe/nvme-cli - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://k2.ixota.com/index.php?action=history&amp;feed=atom&amp;title=NVMe%2Fnvme-cli"/>
	<link rel="alternate" type="text/html" href="https://k2.ixota.com/index.php?title=NVMe/nvme-cli&amp;action=history"/>
	<updated>2026-06-26T16:26:03Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.33.1</generator>
	<entry>
		<id>https://k2.ixota.com/index.php?title=NVMe/nvme-cli&amp;diff=6472&amp;oldid=prev</id>
		<title>Kenneth: /* Build and install */</title>
		<link rel="alternate" type="text/html" href="https://k2.ixota.com/index.php?title=NVMe/nvme-cli&amp;diff=6472&amp;oldid=prev"/>
		<updated>2023-10-25T17:46:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Build and install&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== nvme-cli ==&lt;br /&gt;
&lt;br /&gt;
nvme-cli - NVMe management command line interface. &lt;br /&gt;
&lt;br /&gt;
GitHub - linux-nvme/nvme-cli: NVMe management command line interface. - https://github.com/linux-nvme/nvme-cli&lt;br /&gt;
&lt;br /&gt;
== Build and Install ==&lt;br /&gt;
&lt;br /&gt;
NOTE: As of version 2.0, Meson (and submodule libnvme) are included, and build became much more complicated.  Version 1.16 was the last pre-Meson build.&lt;br /&gt;
&lt;br /&gt;
 # Ubuntu:&lt;br /&gt;
 apt-get install gcc make libudev-dev git pkg-config libsystemd-dev&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/.src ; cd ~/.src&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/linux-nvme/nvme-cli nvme-cli&lt;br /&gt;
&lt;br /&gt;
 cd nvme-cli&lt;br /&gt;
 #git checkout v1.8.1&lt;br /&gt;
 #git checkout v1.10.1&lt;br /&gt;
 #git checkout v1.12&lt;br /&gt;
 git checkout v1.16   # &amp;lt;--- recommended version!&lt;br /&gt;
 make clean&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
If you want to install to an alternative path:&lt;br /&gt;
 # which will end up with the binary in /otherdir/usr/sbin/&lt;br /&gt;
 make install DESTDIR=/otherdir&lt;br /&gt;
 or&lt;br /&gt;
 # which will end up with the binary in /otherdir/sbin/&lt;br /&gt;
 make install PREFIX=/otherdir&lt;br /&gt;
&lt;br /&gt;
Remove old, and install new:&lt;br /&gt;
 rm -f `which nvme`  # remove previous version, as 1.8.1 installed in a different location&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
 nvme --version&lt;br /&gt;
&lt;br /&gt;
 nvme --help&lt;br /&gt;
 nvme list&lt;br /&gt;
&lt;br /&gt;
== Build and Install v2 ==&lt;br /&gt;
&lt;br /&gt;
NOTE: As of version 2.0, Meson (and submodule libnvme) are included, and build became much more complicated.  Version 1.16 was the last pre-Meson build.&lt;br /&gt;
&lt;br /&gt;
 # Ubuntu:&lt;br /&gt;
  # apt-get install gcc make libudev-dev git pkg-config libsystemd-dev&lt;br /&gt;
  sudo apt-get -y -qq install build-essential&lt;br /&gt;
  sudo apt-get -y -qq install git-all git-daemon-sysvinit&lt;br /&gt;
  sudo apt-get -y -qq install pkg-config&lt;br /&gt;
  sudo apt-get -y -qq install cmake    &lt;br /&gt;
  sudo apt-get -y -qq install uuid uuid-dev&lt;br /&gt;
  sudo apt-get -y -qq install libjson-c-dev&lt;br /&gt;
  sudo apt-get -y -qq install python3-pip&lt;br /&gt;
  sudo apt-get -y -qq install libpam-dev	&lt;br /&gt;
  sudo apt-get -y -qq install libcap-ng-dev&lt;br /&gt;
  sudo apt-get -y -qq install libssl-dev&lt;br /&gt;
  sudo dpkg --purge meson&lt;br /&gt;
  pip3 install meson&lt;br /&gt;
&lt;br /&gt;
 # Redhat:&lt;br /&gt;
  sudo yum group install -y -q &amp;quot;Development Tools&amp;quot;&lt;br /&gt;
  sudo yum install -y -q python3-pip&lt;br /&gt;
  sudo yum install -y -q libuuid libuuid-devel&lt;br /&gt;
  sudo yum install -y -q json-c-devel&lt;br /&gt;
  sudo yum install -y -q pam-devel&lt;br /&gt;
  sudo yum install -y -q libcap-ng-devel&lt;br /&gt;
  sudo pip3 install meson&lt;br /&gt;
  sudo pip3 install ninja==1.8.2&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/.src ; cd ~/.src&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/linux-nvme/libnvme libnvme&lt;br /&gt;
&lt;br /&gt;
 cd libnvme&lt;br /&gt;
 # git master&lt;br /&gt;
 # git checkout v1.6&lt;br /&gt;
 # ### Note: subprojects/libnvme.wrap in nvme-cli specifies which version to checkout:&lt;br /&gt;
 git checkout b25dc6102bc000ff4c8061e6448cfb4c034eaed6    # (a 1.6 version)&lt;br /&gt;
&lt;br /&gt;
 # To build:&lt;br /&gt;
 meson .build&lt;br /&gt;
 ninja -C .build&lt;br /&gt;
&lt;br /&gt;
 # To Install:&lt;br /&gt;
 meson install -C .build&lt;br /&gt;
&lt;br /&gt;
NOTE: There is a Makefile wrapper for meson for backwards compatiblily:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/linux-nvme/nvme-cli nvme-cli&lt;br /&gt;
&lt;br /&gt;
 cd nvme-cli&lt;br /&gt;
 # git master&lt;br /&gt;
 git checkout v2.2   # &amp;lt;--- recommended version!&lt;br /&gt;
&lt;br /&gt;
 # Build dependency subprojects&lt;br /&gt;
 meson setup .build&lt;br /&gt;
 meson subprojects update&lt;br /&gt;
 ninja -C .build&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
If you want to install to an alternative path:&lt;br /&gt;
 # which will end up with the binary in /otherdir/usr/sbin/&lt;br /&gt;
 make install DESTDIR=/otherdir&lt;br /&gt;
 or&lt;br /&gt;
 # which will end up with the binary in /otherdir/sbin/&lt;br /&gt;
 make install PREFIX=/otherdir&lt;br /&gt;
&lt;br /&gt;
Remove old, and install new:&lt;br /&gt;
 rm -f `which nvme`  # remove previous version, as 1.8.1 installed in a different location&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
 nvme --version&lt;br /&gt;
&lt;br /&gt;
 nvme --help&lt;br /&gt;
 nvme list&lt;br /&gt;
&lt;br /&gt;
== Build and install with additional WDC vendor specific functionality ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/wdc-tools/nvme-cli.git wdc-nvme-cli&lt;br /&gt;
cd wdc-nvme-cli&lt;br /&gt;
make clean&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Useful Commands ==&lt;br /&gt;
&lt;br /&gt;
List NVME devices:&lt;br /&gt;
&lt;br /&gt;
 sudo nvme list&lt;br /&gt;
&lt;br /&gt;
== Capture WDC E6 Log ==&lt;br /&gt;
&lt;br /&gt;
 nvme wdc cap-diag /dev/nvme0 -o e6.bin&lt;br /&gt;
 nvme wdc vs-internal-log /dev/nvme0 -o e6.bin&lt;br /&gt;
&lt;br /&gt;
== Read Example ==&lt;br /&gt;
&lt;br /&gt;
nvme read:&lt;br /&gt;
 --start-block=&amp;lt;NUM&amp;gt;, -s &amp;lt;NUM&amp;gt;&lt;br /&gt;
 --block-count=&amp;lt;NUM&amp;gt;, -c &amp;lt;NUM&amp;gt;&lt;br /&gt;
 --data-size=&amp;lt;NUM&amp;gt;, -z &amp;lt;NUM&amp;gt;&lt;br /&gt;
 --data=&amp;lt;FILE&amp;gt;, -d &amp;lt;FILE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pass or fail result:&lt;br /&gt;
&lt;br /&gt;
 # read lba 1 -&amp;gt; lba 2&lt;br /&gt;
 sudo nvme read /dev/nvme0n1 -s 1 -c 0 -z 4096&lt;br /&gt;
     read: Success&lt;br /&gt;
&lt;br /&gt;
Read to file:&lt;br /&gt;
&lt;br /&gt;
 # read lba 1 -&amp;gt; lba 2&lt;br /&gt;
 sudo nvme read /dev/nvme0n1 -s 1 -c 0 -z 4096 -d read.img&lt;br /&gt;
     read: Success&lt;br /&gt;
&lt;br /&gt;
== Write Example ==&lt;br /&gt;
&lt;br /&gt;
nvme write:&lt;br /&gt;
 --start-block=&amp;lt;NUM&amp;gt;, -s &amp;lt;NUM&amp;gt;&lt;br /&gt;
 --block-count=&amp;lt;NUM&amp;gt;, -c &amp;lt;NUM&amp;gt;&lt;br /&gt;
 --data-size=&amp;lt;NUM&amp;gt;, -z &amp;lt;NUM&amp;gt;&lt;br /&gt;
 --data=&amp;lt;FILE&amp;gt;, -d &amp;lt;FILE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Write data:&lt;br /&gt;
&lt;br /&gt;
 # write lba 1 -&amp;gt; lba 2&lt;br /&gt;
 sudo nvme write /dev/nvme0n1 -s 1 -c 0 -z 4096 -d write.img&lt;br /&gt;
     read: Success&lt;br /&gt;
&lt;br /&gt;
== Read Write Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# write 4k random data file&lt;br /&gt;
dd if=/dev/urandom of=write_data.img bs=4k count=1&lt;br /&gt;
&lt;br /&gt;
# write 4k random data file to nvme device at first block&lt;br /&gt;
sudo nvme write /dev/nvme0n1 -s 1 -c 0 -z 4096 -d write_data.img&lt;br /&gt;
&lt;br /&gt;
# read 4k random data file from nvme device at first block&lt;br /&gt;
sudo nvme read /dev/nvme0n1 -s 1 -c 0 -z 4096 -d read_data.img&lt;br /&gt;
&lt;br /&gt;
# checksum both (should match)&lt;br /&gt;
md5sum write_data.img read_data.img&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
4k or 512 format may or may not be the default, so check the LBA Format options first:&lt;br /&gt;
&lt;br /&gt;
List LBA Format Options:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo nvme id-ns -H /dev/nvme0n1&lt;br /&gt;
...&lt;br /&gt;
LBA Format  0 : Metadata Size: 0   bytes - Data Size: 4096 bytes - Relative Performance&lt;br /&gt;
: 0 Best (in use)&lt;br /&gt;
LBA Format  1 : Metadata Size: 0   bytes - Data Size: 512 bytes - Relative Performance:&lt;br /&gt;
 0 Best&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Format with chosen LBA Format option:&lt;br /&gt;
 # default LBA format&lt;br /&gt;
 $ sudo nvme format /dev/nvme0n1&lt;br /&gt;
 $ sudo nvme format /dev/nvme0n1 --lbaf=0&lt;br /&gt;
&lt;br /&gt;
 # LBA format option 1&lt;br /&gt;
 $ sudo nvme format /dev/nvme0n1 --lbaf=1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo nvme id-ns /dev/nvme0n1&lt;br /&gt;
lbaf  0 : ms:0   lbads:12 rp:0 (in use)&lt;br /&gt;
lbaf  1 : ms:0   lbads:9  rp:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ms:0 = metadata size is 2^0 = 0&lt;br /&gt;
lbads 12 = LBA size = 2^12 = 4096&lt;br /&gt;
lbads 12 = LBA size = 2^9 = 512&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Activate Firmware ==&lt;br /&gt;
&lt;br /&gt;
 $ sudo nvme fw-download /dev/nvme0 -f firmware_image.vpkg&lt;br /&gt;
 $ sudo nvme fw-activate /dev/nvme0 --action 1 --slot 1&lt;br /&gt;
 $ sudo nvme reset /dev/nvme0&lt;br /&gt;
&lt;br /&gt;
== SMART Log ==&lt;br /&gt;
&lt;br /&gt;
 nvme smart-log /dev/nvme0&lt;br /&gt;
&lt;br /&gt;
additional smart log:&lt;br /&gt;
&lt;br /&gt;
 nvme smart-log-add /dev/nvme0&lt;br /&gt;
&lt;br /&gt;
=== Temperature ===&lt;br /&gt;
&lt;br /&gt;
 nvme smart-log /dev/nvme0 | grep &amp;quot;^temperature&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Unmap ==&lt;br /&gt;
&lt;br /&gt;
There is a Dataset Management Deallocate command (UNMAP) in nvme-cli:&lt;br /&gt;
 sudo nvme dsm /dev/nvme0n1 -d -s 0x1bf0ea00 -b 0xff&lt;br /&gt;
&lt;br /&gt;
 nvme dsm /dev/nvme0n1 -d -s 0x100000 -b 0x80000&lt;br /&gt;
 0x80000 blocks, starting at 0x100000.&lt;br /&gt;
 -s and -b can be , separated lists to do multiple ranges&lt;br /&gt;
&lt;br /&gt;
== Name Spaces ==&lt;br /&gt;
&lt;br /&gt;
=== Delete Name Space ===&lt;br /&gt;
&lt;br /&gt;
 nvme delete-ns /dev/nvme0 -n 0&lt;br /&gt;
&lt;br /&gt;
=== Create Name Space ===&lt;br /&gt;
&lt;br /&gt;
 nvme create-ns /dev/nvme0 ...&lt;br /&gt;
&lt;br /&gt;
=== Attach Name Space ===&lt;br /&gt;
&lt;br /&gt;
 nvme attach-ns /dev/nvme0 -n 0 -c 0&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# ls /dev/nvme*&lt;br /&gt;
/dev/nvme0  /dev/nvme0n1  /dev/nvme1&lt;br /&gt;
&lt;br /&gt;
root@lmt-ci-8049:~# nvme list&lt;br /&gt;
Node             SN                   Model                                    Namespace Usage                      Format           FW Rev&lt;br /&gt;
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------&lt;br /&gt;
/dev/nvme0n1     203351900009         SomeDriveXXX                             1           0.00   B /   1.92  TB      4 KiB +  0 B   0000780&lt;br /&gt;
&lt;br /&gt;
root@lmt-ci-8049:~# nvme delete-ns /dev/nvme0 -n 1&lt;br /&gt;
delete-ns: Success, deleted nsid:1&lt;br /&gt;
&lt;br /&gt;
root@lmt-ci-8049:~# nvme create-ns /dev/nvme0 -s 0x1024 -c 0x1024 -f 0 -d 0 -m 1&lt;br /&gt;
create-ns: Success, created nsid:1&lt;br /&gt;
&lt;br /&gt;
root@lmt-ci-8049:~# nvme create-ns /dev/nvme1 -s 0x1024 -c 0x1024 -f 0 -d 0 -m 1&lt;br /&gt;
create-ns: Success, created nsid:2&lt;br /&gt;
&lt;br /&gt;
root@lmt-ci-8049:~# nvme attach-ns /dev/nvme0 -n 1 -c 0&lt;br /&gt;
attach-ns: Success, nsid:1&lt;br /&gt;
&lt;br /&gt;
root@lmt-ci-8049:~# nvme attach-ns /dev/nvme1 -n 2 -c 1&lt;br /&gt;
attach-ns: Success, nsid:2&lt;br /&gt;
&lt;br /&gt;
root@lmt-ci-8049:~# nvme list&lt;br /&gt;
Node             SN                   Model                                    Namespace Usage                      Format           FW Rev&lt;br /&gt;
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------&lt;br /&gt;
/dev/nvme0n1     20335190000X         SomeDriveXXX                             1           0.00   B /  16.92  MB      4 KiB +  0 B   0000780&lt;br /&gt;
/dev/nvme0n2     20335190000X         SomeDriveXXX                             2           0.00   B /  16.92  MB      4 KiB +  0 B   0000780&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== keywords ==&lt;br /&gt;
&lt;br /&gt;
nvme nvme-cli NVME CLI&lt;/div&gt;</summary>
		<author><name>Kenneth</name></author>
		
	</entry>
</feed>