linux查磁盘wwn需区分设备类型:fc hba卡用/sys/class/fc_host/host*/port_name查wwpn;后端lun用lsscsi -g --scsi_id -s获取真实存储id;nvme用nvme id-ctrl查eui-64;云盘查/dev/disk/by-id/下wwn-或scsi-链接。

Linux下查磁盘WWN号,不能只依赖一个命令——不同设备类型(FC HBA卡、SAS/SATA LUN、NVMe、虚拟盘)的WWN来源完全不同,强行套用 lsscsi 或 cat /sys/class/fc_host/host*/port_name 很可能返回空或错值。
查FC HBA卡自身的WWPN/WWNN
这是主机侧光纤通道卡的端口标识,用于SAN交换机 zoning。它不随挂载的LUN变化,只属于HBA硬件本身。
-
/sys/class/fc_host/host*/port_name是最通用的方式,输出形如0x210000e08b907955,注意前缀0x是十六进制标记,实际WWPN就是后面16位(去掉0x后共16个字符) - 老系统(如RHEL4/SLES9)可能需读
/proc/scsi/qla2xxx/*并 grepadapter-port,但路径和字段名因驱动版本差异大,cat /proc/scsi/qla2xxx/0 | head -20先看结构更稳妥 - 别混淆
port_name(WWPN)和node_name(WWNN):前者是端口级唯一ID,后者是整张HBA卡的节点ID;多数存储配置只认WWPN - 如果
ls /sys/class/fc_host/为空,说明系统没识别到FC HBA(驱动未加载、卡未插稳、BIOS中FC选项关闭)
查后端物理LUN的WWN(即存储阵列分配的设备ID)
这才是你在多路径配置、存储划LUN、灾备映射时真正要确认的“这块盘是谁家的”。它和HBA无关,是存储侧写入的SCSI INQUIRY响应。
-
lsscsi -g --scsi_id -s是首选:其中--scsi_id强制触发SCSI Inquiry获取ID_SERIAL_SHORT,对EMC、IBM、HPE等主流阵列稳定有效;输出中类似36000144000000010e00e0d0d1db7b2c9的长串就是LUN WWN - 替代方案:
udevadm info --query=all --name=/dev/sdX | grep ID_SERIAL,但部分虚拟化环境(如VMware)会伪造ID_SERIAL,而ID_SERIAL_SHORT更接近真实SCSI VPD page 0x83数据 - 慎用
scsi_id -g -u -s /block/sdX:RHEL/CentOS 7+ 默认已弃用该命令,且依赖sg3_utils包是否安装;新版推荐直接走 udev 或 lsscsi - 注意:
/dev/sdX必须是直连的块设备路径,不能是 multipath 设备(如/dev/mapper/mpatha),否则查到的是多路径层的伪ID
查NVMe或云盘这类非SCSI设备的“类WWN”标识
NVMe没有传统WWN概念,但云厂商或企业SSD常提供类似用途的唯一ID,需换逻辑获取。
- NVMe盘用
nvme id-ctrl /dev/nvme0n1 | grep -i "sn\|ieee"查序列号(SN)或IEEE EUI-64;EUI-64格式(如001b440011223344)可当作等效WWN使用 - 云硬盘(如阿里云ESSD、腾讯云CBS)在
/dev/disk/by-id/下有带wwn-0x...或scsi-36...前缀的软链接,执行ls -l /dev/disk/by-id/ | grep -E "(wwn|scsi)-"即可对应到/dev/sdX - 虚拟机内看到的
/dev/sda如果是virtio-blk,lsscsi通常不显示WWN,此时应以宿主机提供的磁盘ID为准,而非Guest内解析
常见错误现象与验证要点
拿到一串ID后,必须交叉验证它是否真能定位到物理设备,否则配置多路径或存储zone时会出问题。
- 输出是
0x10000090fa2a6b98这种带0x前缀的16进制?→ 它是HBA卡WWPN,不是LUN的;LUN WWN一般无前缀,长度为32或33位(如6000c292ee2fbbcab535bea8370249bb) -
lsscsi输出里某行WWN字段为空或显示-?→ 该LUN可能未启用SCSI-3 Persistent Reservation,或存储端禁用了VPD page 0x83,需联系存储管理员确认 - 同一块物理盘,在不同服务器上查出两个WWN?→ 检查是否用了多路径软件(如 device-mapper-multipath),
mpathconf --show确认;真实LUN WWN不会变,变的只是主机侧看到的路径名 - 脚本中硬编码
/sys/class/fc_host/host0/port_name?→ 主机重启或HBA插槽变更后host0可能变成host4,应遍历/sys/class/fc_host/host*/port_name并用readlink /sys/class/fc_host/host*/device关联PCI地址防错
最易被忽略的一点:WWN本身不携带拓扑信息。你拿到 36000144000000010e00e0d0d1db7b2c9,仍需结合 lsscsi -t 看它的 transport 类型(fc/sas/ata),以及 ls -l /sys/block/sdX/device 看它归属哪个 hostX,才能完整还原“哪块HBA卡、通过哪条路径、连到了哪个LUN”。











