NVMe management command line interface
1.下载地址
https://github.com/linux-nvme/nvme-cli
2.安装
unzip nvme-cli-master.zip
cd nvme-cli-master.zip
make && make install

/dev/nvme1 nvme1为主控
/dev/nvme1n1 nvme1n1为NVMe硬盘名称
/dev/nvme1n1p1 硬盘nvme1n1的分区
3.常用指令
1)nvme format -s 1 /dev/nvme1n1 格式化硬盘(secure erase drives)

nvme format /dev/nvme1n1 -n 1 -l 1 4k对齐
nvme format /dev/nvme1n1 -n 1 -l 0 恢复初始状态512
nvme format /dev/nvme1n1 -l 0 Optane device Units512

参数详情请参考:http://www.pudn.com/Download/item/id/3180638.html

2)nvme smart-log /dev/nvme0n1 读取硬盘nvme0n1的smart信息

部分其他参数详解参考:https://www.percona.com/blog/2017/02/09/using-nvme-command-line-tools-to-check-nvme-flash-health/
3)nvme升/降固件版本

nvme reset /dev/nvme1 重置硬盘(NVMe硬盘固件版本进行upgrade/downgrading后要进行reset后才能effective,如果不重置主控需reboot 系统)

4)OP(Over-Provisioning)
为什么要进行OP,请参考:https://blog.csdn.net/weixin_40343504/article/details/83145713

nvme admin-passthru /dev/nvme0 -o 0x9 --cdw10=0xc1 --cdw11=0x2000000 --cdw12=0x0

OP to GB
1.The decimal value of LBA is (X * 1000 * 1000 * 1000 / 512), then convert it to Hex Value.
2. Put the Hex Value to cdw11
3. If the Hex Value over 0xFFFFFFFF, put the high overflow digits to cdw 12.
4. Example:
⦁ 3200 GB
⦁ Decimal value is 6,250,000,000 and Hex Value is 0x174876E80
The value for cdw12 should be 0x1 and for cdw11 is 0x74876E80.
⦁ 2000 GB
⦁ Decimal value is 3,906,250,000 and Hex Value is 0xE8D4A510
The value for cdw12 should be 0x0 and for cdw11 is 0xE8D4A510.
⦁ 4000 GB
⦁ 7,814,037,168 // 0x1 D1C0 BEB0
⦁ 7200 GB - 0x3 4630 B8A0
6400 GB - 0x2 E90E DD00
例一:

例二:
原容量OPed到3.4T
[root@localhost nvme-cli-master]# nvme admin-passthru /dev/nvme9n1 -o 0x9 --cdw10=0xc1 --cdw11=0x18BCFE568 --cdw12=0x1
NVMe command result:00000000

5)nvme-cli 创建namespaces
什么是Namespace?
简单地说,namespace是对用户空间的逻辑划分,就是把用户空间这块大披萨划分开,大家各吃各的。那么大披萨长什么样呢?划成一片片儿披萨又什么样呢?我们知道,跟其他传统的存储设备一样,非易失性存储器也是可以格式化为逻辑块的,每个逻辑块都有自己的地址,俗称logical block address,简称LBA,我们就是通过LBA来吃披萨(读写IO)的。逻辑地址长相很普通,是从0,1,2….直到最大块地址。
逻辑块地址计算是有讲究的,严格依据JEDEC218A里面定义的逻辑块与容量关系公式。比如4KiB一个逻辑块的话, 500G就需要2646 + 244188 * 500 = 122096646个逻辑地址了,这些逻辑块就组成了namespace(512B一块逻辑块的话,500G就需要21168+1953504*500=976773168个逻辑地址)。那么一块SSD是否可以划分为多个namespace来供不同的应用场景使用呢?答案是肯定的。

例如:创建一个500G和一个465G的namaspaces

检查SSD上剩余空间是否足够创建目标namespace。使用Identify命令查看unvmcap的值可知剩余可分配容量,单位是Byte。

#进行以下步骤前请务必确保自己的SSD支持NS
#一般大厂才会有进行NS的需求,请和你的厂商确保SSD支持。
#个人的盘不建议尝试进行NS操作
1.detach
nvme detach-ns /dev/nvme0 -n 1 -c 0
nvme delete-ns /dev/nvme0 -n 1
nvme reset /dev/nvme02.创建
**#1953125000 = 1,000,000,000,000/512 = 1,953,125,000 (1TB)**
nvme create-ns /dev/nvme0 -s 976562500 -c 976562500 -f 0 -d 0 -m 0
nvme attach-ns /dev/nvme0 -n 1 -c 0nvme create-ns /dev/nvme0 -s 975175680 -c 975175680 -f 0 -d 0 -m 0  #第二个创建的必须
nvme attach-ns /dev/nvme0 -n 2 -c 0nvme reset /dev/nvme0
nvme list
[root@localhost Muti-namespace_Test]# nvme list
Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     XXXXXX   XXXXX                      1         500.36  GB / 500.36  GB    512   B +  0 B   VDV10152
/dev/nvme0n2     XXXXXX   XXXXX                      2         499.29  GB / 499.29  GB    512   B +  0 B   VDV101523,删除
nvme detach-ns /dev/nvme0 -n 1 -c 0
nvme detach-ns /dev/nvme0 -n 2 -c 0nvme delete-ns /dev/nvme0 -n 1
nvme delete-ns /dev/nvme0 -n 24.恢复
nvme create-ns /dev/nvme0 -s 1000204886016 -c 1000204886016 -f 0 -d 0 -m 0  #1000204886016是通过“nvme id-ctrl /dev/nvme0n1 | grep tnvmcap”抓取并除以512
nvme attach-ns /dev/nvme0 -n 1 -c 0
nvme reset /dev/nvme0nvme list
[root@localhost Muti-namespace_Test]# nvme list

4.PCIe硬盘寿命计算
可以通过nvme-cli读取PCIe硬盘smart信息,进行进行计算硬盘的Endurance、DWPD(Drive Writes Per Day)。
建议寿命测试仅企业级可能有必要,个人没必要进行此项操作。
a.测试前读取硬盘smart-log信息

[root@localhost nvme-cli-master]# nvme intel smart-log-add /dev/nvme0n1
Additional Smart Log for NVME device:nvme0n1 namespace-id:ffffffff
key                               normalized raw
program_fail_count              :   0%       0
erase_fail_count                :   0%       0
wear_leveling                   :   0%       min: 0, max: 0, avg: 0
end_to_end_error_detection_count: 100%       159
crc_error_count                 : 100%       25963
timed_workload_media_wear       : 100%       0.000%
timed_workload_host_reads       : 100%       8%
timed_workload_timer            : 100%       120864 min
thermal_throttle_status         : 100%       0%, cnt: 1
retry_buffer_overflow_count     : 100%       0
pll_lock_loss_count             : 100%       0
nand_bytes_written              :   0%       sectors: 0
host_bytes_written              : 100%       sectors: 26008485

b.fio进行读写一定的数据
c.fio结束后再次执行nvme intel smart-log-add /dev/nvme0n1读取smart-log信息
d.计算

盘进入稳态后进行随机写得到DWPD的值更为准确

nvme-cli常用指令相关推荐

  1. hdparm nvme cli tool

    hdparm 常用指令: nvme 常用指令 4K 对齐指令 使用nvme cli 对盘进行OP nvme format nvme format -s 1 /dev/xxxx nvme FW upda ...

  2. 80×86汇编常用指令

    80×86汇编常用指令 一.数据传送指令 1. 通用数据传送指令 简写 英文全称 执行操作 MOV move 传送 MOVSX move with sign-extend 带符号扩展传送 MOVZX ...

  3. Ubuntu的基本用法:常用指令,控制流程和重定向

    常用指令 接下来我将举例阐述以下常用的基本指令: /!\ 记住要正确的按照下面写的输入,后面还得带上回车键! 查询文件列表 dud@shadowplay:~ $ ls file1.txt file2. ...

  4. Debug常用指令和DOSBox使用步骤

    Debug是Dos系统中著名的调试程序,也可以运行在Windows系统实模下. 优点: 使用Debug程序,可以查看CPU各种寄存器的内容,内存的情况,并且在机器指令级跟踪程序的运行. DosBox: ...

  5. ubuntu中常用指令

    常用指令 清空命令行 Ctrl+L Conda 创建虚拟环境 conda create -n 虚拟环境名称 python=3.7.10 查看虚拟环境列表 conda info --envs 激活虚拟环 ...

  6. anaconda常用指令,更新查看添加下载源等

    记录一下anaconda命令行常用指令,方便查阅,会不定期更新~ 检查conda版本 conda --version Anaconda更新 # conda conda update conda # a ...

  7. Imagemagick常用指令

    https://www.imagemagick.org/script/index.php  Imagemagick常用指令 (ImageMagick--蓝天白云) (ImageMagick官网) (其 ...

  8. 【ZZ】Linux常用指令

    linux常用指令 - 个人文章 - SegmentFault 思否 https://segmentfault.com/a/1190000011068772 查看目录下有什么文件信息 ls //lis ...

  9. ImageMagick常用指令详解

    Imagemagick常用指令 (ImageMagick--蓝天白云) (ImageMagick官网) (其他比较有价值的IM参考) (图片自动旋转的前端实现方案) convert 转换图像格式和大小 ...

最新文章

  1. 数字信号处理中卷积的计算
  2. PHP抽象类abstract关键字
  3. Keyboard驱动介绍
  4. (转)ZwQuerySystemInformation枚举内核模块及简单应用
  5. 重装Windows10系统(Win10系统)
  6. mina的HTTP性能测试
  7. lua mysql 事务_为什么在 Redis 实现 Lua 脚本事务?-阿里云开发者社区
  8. linux批量命令换行,Linux 下的这些高效指令,是你快速入门运维的神器
  9. Java 堆和栈的区别,还傻傻分不清?
  10. 余额宝不是吸血鬼,银行才是
  11. java 正则表达式 tab_JAVA 正则表达式 (超详细)
  12. php 京东 联盟 链接,京东联盟推广链接在微信上如何直接跳转接入到京东小程序下单购买?...
  13. fastadmin保持用户登陆状态
  14. (二十三)八部众(2)
  15. 2022-2028全球与中国业务流程管理(BPM)服务市场现状及未来发展趋势
  16. [组合] UOJ#308. 【UNR #2】UOJ拯救计划
  17. java版mc复制tnt,教程/方块和物品复制
  18. 23,verilog之参数parameter介绍
  19. 怎么去掉微博图片中的水印,照片水印怎么去掉
  20. 企业会员邮件群发解决方案

热门文章

  1. 2013年3月《Testing Experience》电子杂志下载
  2. 社区专家谈12306
  3. UE4中Pak文件的读取规则
  4. git文件共享_与Git共享文件
  5. Burp抓不了或者抓不全本地的包
  6. WRFDA教程:3DVar同化卫星辐射率资料
  7. linux man 中文 mac,技术|MAC 系统中显示中文MAN手册
  8. 微信小程序 lookup 联表查询
  9. Python 利用opencv给白底照片换色,全网唯一
  10. Php 波场离线签名 Tron离线签名