为什么控制器和 Linux 系统报告的 WWN 有所不同?

为什么控制器和 Linux 系统报告的 WWN 有所不同?

我正在设置具有大量磁盘的 ZFS 存储系统。我想使用 WWN 编号来识别设备(在 vdev_id.conf 中别名),但在尝试获取 WWN 编号时,我注意到 LSI 控制器(LSI MegaRAID SAS 9380-8e,所有磁盘均处于 JBOD 模式)报告的 WWN 与 /dev/disk/by-id 中显示的 WWN 之间存在偏移:

$ storcli64 /c0/e72/s0 show all | grep 5008472696
WWN = 5000C5008472696C
0 Active 6.0Gb/s   0x5000c5008472696d 
1 Active 6.0Gb/s   0x5000c5008472696e 

$ ll /dev/disk/by-id/wwn-0x* | grep 5008472696
/dev/disk/by-id/wwn-0x5000c5008472696f -> ../../sdn

在这组硬件(磁盘、JBOD、控制器)上,模式似乎是一致的(偏移了 3)。

我有一种“感觉”,这是由双链接引起的,但我找不到这种行为的合适解释。任何建议都将不胜感激。

编辑:

另一个例子是

WWN = 5000C50084726B78
0 Active 6.0Gb/s   0x5000c50084726b79 
1 Active 6.0Gb/s   0x5000c50084726b7a 

控制员报告0x5000c50084726b7b,这与马修给出的建议解释一致。

答案1

对于您正在使用的双端口 SAS 驱动器(多路径),您有一个传输地址和单独的端口标识符。一个 WWN,多个端口标识符。

更好的例子是检查输出:

multipath -llsscsi --wwnlsscsi --transport

喜欢:

# lsscsi --transport
[0:0:0:0]    disk    sas:0x5000c50023601236          /dev/sdb
[0:0:1:0]    disk    sas:0x5000c50023614aee          /dev/sdc
[0:0:2:0]    disk    sas:0x5000c5007772e5fe          /dev/sdd
[0:0:4:0]    disk    sas:0x5000c5002362f346          /dev/sdf

# lsscsi --wwn
[0:0:0:0]    disk                                    /dev/sdb
[0:0:1:0]    disk    0x5000c50023614aef              /dev/sdc
[0:0:2:0]    disk                                    /dev/sdd
[0:0:4:0]    disk    0x5000c5002362f347              /dev/sdf

# multipath -ll | grep 3500
35000c50023614aef dm-6 HP      ,EF0450FARMV
35000c5002362f347 dm-3 HP      ,EF0450FARMV

就您的目的而言,请使用 WWN。如果这是 ZFS,请详细说明您的控制器和 JBOD 解决方案。如果是 Linux,您应该使用 DM Multipath 并使用 DM 设备构建池。另请参阅:https://github.com/ewwhite/zfs-ha/wiki

答案2

为了完善其他答案,每个 SAS 驱动器都有一个 LUN(LUN 0)和四个地址:

  • 基准目标地址,可被四整除,通常作为 WWN 打印在驱动器标签上(例如0x5000c5008472696c
  • baseline+1:第一个端口的地址(例如0x5000c5008472696d
  • baseline+2:第二个端口的地址(例如0x5000c5008472696e
  • 基线+3:LUN 0 地址(例如0x5000c5008472696f

尽管所有四个地址都指向同一个驱动器,但 Linux 将 LUN 0 地址显示为 WWN。它是最可移植的,而且 — — 正如 ewwhite 所说 — — 您应该将它用于 ZFS。

(h/t至对 r/zfs 的评论帮助我理解了这一点)

答案3

这仅仅是对你的一个条目的观察,但是

0x5000c5008472696d  & 0x5000c5008472696e = 0x5000c5008472696c
0x5000c5008472696d  | 0x5000c5008472696e = 0x5000c5008472696f

每个系统计算 WWN 的位运算方式可能有所不同。

您还有其他例子吗?

如果这是正确的(我只是猜测),我只能假设不存在标准方法,并且 raid 控制器和内核实现都选择不同的方法。

相关内容