nvme-cli常用指令


https://blog.csdn.net/weixin_40343504/article/details/82386024

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 格式化硬盤

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)

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。


1.detach
dmesg -c
nvme detach-ns /dev/nvme0 -n 1 -c 0
nvme delete-ns /dev/nvme0 -n 1
nvme reset /dev/nvme0

2.創建
**#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 0

nvme create-ns /dev/nvme0 -s 975175680 -c 975175680 -f 0 -d 0 -m 0 #第二個創建的必須
nvme attach-ns /dev/nvme0 -n 2 -c 0

nvme reset /dev/nve0
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 VDV10152

3,刪除
nvme detach-ns /dev/nvme0 -n 1 -c 0
nvme detach-ns /dev/nvme0 -n 2 -c 0

nvme delete-ns /dev/nvme0 -n 1
nvme delete-ns /dev/nvme0 -n 2

4.恢復
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/nvme0

nvme list
[root@localhost Muti-namespace_Test]# nvme list

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
b.fio進行讀寫一定的數據
c.fio結束后再次執行nvme intel smart-log-add /dev/nvme0n1讀取smart-log信息
d.計算

盤進入穩態后進行隨機寫得到DWPD的值更為准確

————————————————
版權聲明:本文為CSDN博主「Rudy,Zhao」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_40343504/article/details/82386024


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM