EMC PowerStore存储学习之一NVMe磁盘的命名规则
PowerStore的日志中经常会看到类似于/dev/nvme1n1的磁盘,在svc_diag list --show_drives中也可以看到类似这样的输出,如下图:
这里的Drives的显示都是 /dev/nvmeXnY的形式,那么这个磁盘命名规则怎么解读呢?
在Linux系统中,NVMe U.2设备(或其他NVMe设备)通过 /dev/nvmeXnY 的命名方式表示,用于标识和管理设备。这种命名方式反映了NVMe协议的控制器和命名空间(namespace)架构。以下是对 X 和 Y 的详细解释:
1. X - 控制器编号
- 定义:X 表示NVMe控制器的编号,从 0 开始递增,例如 nvme0、nvme1 等。
- 作用:每个NVMe设备(例如一块U.2 SSD)通常包含一个或多个控制器,控制器是负责与主机通信的硬件组件。Linux内核为每个检测到的NVMe控制器分配一个唯一的编号。
- 如何理解:
- 如果系统中有多个NVMe设备(例如两块U.2 SSD),它们会被分配为 nvme0、nvme1 等。
- 控制器编号是系统自动分配的,通常与设备的物理插槽或PCIe通道相关,但不一定与插槽的物理顺序严格对应。
- 例如,/dev/nvme0 表示系统中的第一个NVMe控制器,/dev/nvme1 表示第二个控制器。
- 实际例子:
- 一块U.2 NVMe SSD插入系统,系统检测到它的控制器,分配为 /dev/nvme0。
- 如果再插入一块U.2 SSD,可能被分配为 /dev/nvme1。
- 我的理解
- 这个nvmeX不是slot的number,所以要注意,这个X不是扩展柜里面的slot的顺序号。
- 这个控制器是NVMe硬盘上的控制器,不要理解为存储的控制器。一个NVMe U.2磁盘通常对应一个NVMe控制器,在Linux中表现为一个 /dev/nvmeX 设备(例如 /dev/nvme0)。
2. Y - 命名空间编号
- 定义:Y 表示NVMe控制器的命名空间编号,从 1 开始递增,例如 n1、n2 等。
- 作用:NVMe协议允许一个控制器管理多个命名空间(namespace),每个命名空间可以看作是控制器上的一个逻辑存储区域,类似于传统硬盘的分区,但更灵活。
- 如何理解:
- 命名空间是NVMe设备提供的逻辑隔离机制,允许将一块物理SSD划分为多个独立的存储区域,每个区域有自己的容量、LBA(逻辑块地址)范围等。
- 命名空间编号由设备本身定义,Linux内核根据设备报告的命名空间分配对应的 nY。
- 例如,/dev/nvme0n1 表示第一个控制器(nvme0)上的第一个命名空间(n1),/dev/nvme0n2 表示同一个控制器上的第二个命名空间。
- 实际例子:
- 一块U.2 NVMe SSD可能只有一个命名空间,命名为 /dev/nvme0n1。
- 如果SSD配置了多个命名空间(常见于企业级设备),可能会有 /dev/nvme0n1、/dev/nvme0n2 等。
- 不同控制器的命名空间是独立的,例如 /dev/nvme1n1 表示第二个控制器(nvme1)的第一个命名空间。
3. 命名空间和控制器的关系
- 一对多关系:一个NVMe控制器(nvmeX)可以支持多个命名空间(nY),但一个命名空间只能属于一个控制器。
- 用途:
- 命名空间可以用于隔离不同工作负载(例如,一个命名空间用于数据库,另一个用于日志)。
- 企业级NVMe设备常利用多命名空间来支持虚拟化或多租户环境。
- 查看方式:
- 使用 lsblk 或 nvme list 命令可以查看系统中NVMe设备的控制器和命名空间:
$ lsblk
- 使用 lsblk 或 nvme list 命令可以查看系统中NVMe设备的控制器和命名空间:
core@607MMF3-B:/ $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223.6G 0 disk
|-sda1 8:1 0 512M 0 part /boot
|-sda2 8:2 0 2M 0 part
|-sda3 8:3 0 3G 0 part /usr
|-sda4 8:4 0 3G 0 part
|-sda6 8:6 0 128M 0 part /usr/share/oem
|-sda7 8:7 0 64M 0 part
`-sda9 8:9 0 216.9G 0 part /
sdb 8:16 0 111.8G 0 disk
|-sdb1 8:17 0 1000M 0 part
|-sdb2 8:18 0 2G 0 part /var/lib/cycrcvycg
|-sdb3 8:19 0 1000M 0 part
|-sdb4 8:20 0 29.3G 0 part
`-sdb5 8:21 0 48.8G 0 part
nvme3n1 259:0 0 3.5T 0 disk
nvme2n1 259:1 0 3.5T 0 disk
nvme7n1 259:2 0 3.5T 0 disk
nvme5n1 259:3 0 7.9G 0 disk
nvme1n1 259:4 0 3.5T 0 disk
nvme6n1 259:5 0 3.5T 0 disk
nvme11n1 259:6 0 7.9G 0 disk
nvme4n1 259:8 0 3.5T 0 disk
nvme9n1 259:10 0 3.5T 0 disk
- 使用 nvme 命令查看详细信息:
$ nvme list
core@607MMF3-B:/ $ sudo nvme list
Node SN Model Namespace Usage Format FW Rev
--------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1 VXNA0NB07818 PB23F04T 1 3.84 TB / 3.84 TB 512 B + 8 B GPJ99E5Q
/dev/nvme1n1 MVNA0RA01068 P033F04T 1 3.84 TB / 3.84 TB 512 B + 0 B EPK98E5Q
/dev/nvme11n1 1A42F300D7F MTC_8GB_B 1 8.48 GB / 8.48 GB 512 B + 0 B 3.1.10.0
/dev/nvme2n1 MVNA0RA01086 P033F04T 1 3.84 TB / 3.84 TB 512 B + 0 B EPK98E5Q
/dev/nvme3n1 VXNA0NB07011 PB23F04T 1 3.84 TB / 3.84 TB 512 B + 0 B GPJ99E5Q
/dev/nvme4n1 VXNA0NB07781 PB23F04T 1 3.84 TB / 3.84 TB 512 B + 0 B GPJ99E5Q
/dev/nvme5n1 1A50F300441 MTC_8GB_B 1 8.48 GB / 8.48 GB 512 B + 0 B 3.1.10.0
/dev/nvme6n1 MVNA0RA01072 P033F04T 1 3.84 TB / 3.84 TB 512 B + 0 B EPK98E5Q
/dev/nvme7n1 MVNA0RA01091 P033F04T 1 3.84 TB / 3.84 TB 512 B + 0 B EPK98E5Q
/dev/nvme9n1 VXNA0NB07390 PB23F04T 1 3.84 TB / 3.84 TB 512 B + 0 B GPJ99E5Q
4. 常见问题解答
- 为什么没有 nvme0n0?
- NVMe协议规定命名空间从 1 开始,因此不会有 n0。
- 为什么有些设备有多个命名空间?
- 企业级NVMe设备支持多命名空间,用于逻辑隔离或优化性能。例如,一个U.2 SSD可能为不同虚拟机分配独立的命名空间。
- 如何确认设备命名?
- 使用 nvme id-ctrl /dev/nvme0 查看控制器信息,或 nvme id-ns /dev/nvme0n1 查看命名空间信息。
core@607MMF3-B:/ $ sudo nvme id-ctrl /dev/nvme2
NVME Identify Controller:
vid : 0x144d
ssvid : 0x1120
sn : MVNA0RA01086
mn : P033F04T
fr : EPK98E5Q
rab : 8
ieee : 002538
cmic : 0x3
mdts : 0
cntlid : 0x41
ver : 0x10300
rtd3r : 0xd59f80
rtd3e : 0xa7d8c0
oaes : 0x300
ctratt : 0
rrls : 0
cntrltype : 0
fguid :
crdt1 : 0
crdt2 : 0
crdt3 : 0
oacs : 0x1f
acl : 255
aerl : 15
frmw : 0x17
lpa : 0xe
elpe : 255
npss : 3
avscc : 0x1
apsta : 0
wctemp : 345
cctemp : 358
mtfa : 20
hmpre : 0
hmmin : 0
tnvmcap : 3840755982336
unvmcap : 0
rpmbs : 0
edstt : 2
dsto : 1
fwug : 255
kas : 0
hctma : 0
mntmt : 0
mxtmt : 0
sanicap : 0x3
hmminds : 0
hmmaxd : 0
nsetidmax : 0
endgidmax : 0
anatt : 0
anacap : 0
anagrpmax : 0
nanagrpid : 0
pels : 0
sqes : 0x66
cqes : 0x44
maxcmd : 768
nn : 32
oncs : 0x7f
fuses : 0
fna : 0x4
vwc : 0
awun : 0
awupf : 0
icsvscc : 1
nwpc : 0
acwu : 0
sgls : 0xf0002
mnan : 0
subnqn : nqn.1994-11.com.samsung:nvme:PM1733:2.5-inch:MVNA0RA01086
ioccsz : 0
iorcsz : 0
icdoff : 0
fcatt : 0
msdbd : 0
ofcs : 0
ps 0 : mp:25.00W operational enlat:180 exlat:180 rrt:0 rrl:0
rwt:0 rwl:0 idle_power:7.00W active_power:18.00W
ps 1 : mp:21.00W operational enlat:180 exlat:180 rrt:0 rrl:0
rwt:0 rwl:0 idle_power:7.00W active_power:18.00W
ps 2 : mp:18.00W operational enlat:180 exlat:180 rrt:1 rrl:1
rwt:1 rwl:1 idle_power:7.00W active_power:18.00W
ps 3 : mp:14.00W operational enlat:180 exlat:180 rrt:2 rrl:2
rwt:2 rwl:2 idle_power:7.00W active_power:14.00W
core@607MMF3-B:/ $ sudo nvme id-ns /dev/nvme2n1
NVME Identify Namespace 1:
nsze : 0x1bf1f72b0
ncap : 0x1bf1f72b0
nuse : 0x1bf1f72b0
nsfeat : 0
nlbaf : 4
flbas : 0
mc : 0x3
dpc : 0x17
dps : 0
nmic : 0x1
rescap : 0xff
fpi : 0x80
dlfeat : 1
nawun : 0
nawupf : 0
nacwu : 0
nabsn : 0
nabo : 0
nabspf : 0
noiob : 0
nvmcap : 3840755982336
mssrl : 0
mcl : 0
msrc : 0
anagrpid: 0
nsattr : 0
nvmsetid: 0
endgid : 0
nguid : 204d563052a010860025384100000001
eui64 : 0025389a1100c7b9
lbaf 0 : ms:0 lbads:9 rp:0x1 (in use)
lbaf 1 : ms:8 lbads:9 rp:0x2
lbaf 2 : ms:0 lbads:12 rp:0
lbaf 3 : ms:8 lbads:12 rp:0x2
lbaf 4 : ms:64 lbads:12 rp:0x2
core@607MMF3-B:/ $
总结
- X(如 nvme0、nvme1)是控制器编号,标识系统中唯一的NVMe控制器。
- Y(如 n1、n2)是命名空间编号,标识控制器上的逻辑存储区域。
- 这种命名方式清晰地反映了NVMe设备的层次结构,便于管理和操作,尤其在企业级存储环境中。