Linux 如何确定磁盘的 SCSI 地址?

Linux 如何确定磁盘的 SCSI 地址?

问候,

我在 VMware ESX 4 下使用 RHEL 5.5 客户虚拟机。当我在虚拟机硬件设置中配置虚拟磁盘时,每个磁盘都有一个 SCSI 地址,格式为“N:M”。例如,“1:3”表示 SCSI 主机编号 1 和 SCSI 目标 ID 3。

当我从虚拟机的 BIOS 或 Windows 操作系统查看磁盘信息时,检测到的 SCSI 地址信息与虚拟硬件设置相匹配。但在 Linux 下,SCSI 地址组件不匹配,至少不完全或一致。

我尝试了三种受支持的虚拟 SCSI 和 SAS 驱动程序,它们似乎都“损坏了”,但方式不同。以下是虚拟硬件地址与每个驱动程序在 Linux 下检测到的内容的列表:

Driver    vHW Addr  Linux Addr
--------  --------  ----------
LSI SAS   0:0       0:0
LSI SAS   0:3       0:1
LSI SAS   0:6       0:2
LSI SCSI  1:1       2:1
LSI SCSI  1:4       2:4
LSI SCSI  1:7       2:7
pvSCSI    2:2       1:2
pvSCSI    2:5       1:5
pvSCSI    2:8       1:8

我的主要问题是为什么在 Linux 下会发生这种情况?下一个问题是:我该如何修复它或自行修复它?

如果让我猜测的话,我会说这是内核如何分配 SCSI 主机号以及 Linux SCSI 驱动程序(包含在 VMware 工具中)如何检测 SCSI 目标号的问题。也许驱动程序的加载顺序也与此问题有关。我猜这不会涉及 udev,但我可能错了。

任何想法都值得感激。谢谢!

PS. 我的环境是 VMware,但我不需要专门针对这些驱动程序的答案。我想这可能是 Linux 下任何 SCSI 驱动程序的问题。

答案1

Linux 实际上是一致且正确的,只是不一定以您期望的方式。

LSI SAS:SAS 地址是 WWN,并根据其出现的顺序分配类似 SCSI 的 ID。(这是一种简化,但可以做到。为什么会有差距?)

LSI SCSI 和 pvSCSI:SCSI 主机号仅与内核加载主机适配器驱动程序的顺序有关,与 VMWare 分配的编号无关。如果您希望以其他顺序查看它们,请切换驱动程序加载顺序。最有可能的是,在 /etc/modprobe.conf 中切换它们的编号并重新启动。

答案2

我通过将序列号映射到托盘盒来移除正确的硬盘。我们的机箱 LED 功能较差。新磁盘出现这种情况,比如显示为 /dev/sda

udevadm info -q all -n /dev/sda|grep SERIAL

然后我们记下序列号。如果磁盘出现故障,我们查找序列号(在我们的例子中,我们标记物理磁盘盒)并取出相应的磁盘。

但这并不能真正帮助您在 vmware 中。

再次,您可以编写一个脚本来执行相同的操作。添加一个新磁盘,在客户机中记录其 uuid,然后在您想要稍后自动删除磁盘时查阅该查找表。

我并没有真正注意过,但我认为我的 vmware 磁盘始终以相同的顺序启动。因此,如果您保持地址不变,您可能可以相信 scsi 地址不会改变。

答案3

现代 Linux 在启动时重建 /dev 目录,并按照 scsi 主机在 pci 总线上的出现顺序扫描它们。在 VMware 中,这将是将它们添加到虚拟机的顺序。

如果您先添加一个 scsi 0:1 磁盘,然后添加一个 scsi 2:2 磁盘,在 Linux 中它们将显示为:0:1 和 1:2。如果您随后添加 scsi 1:3,启动后将显示为 2:3。

无需在 Linux 中编辑任何内容,您可以更改 vmx 文件中 scsi-hosts 的顺序:

$ grep pciSlotNumber vm.vmx
scsi0.pciSlotNumber = "16"
scsi2.pciSlotNumber = "34"
scsi1.pciSlotNumber = "35"

它们在 vmx 文件中出现的顺序并不重要,重要的是 pciSlotNumber

编辑 vmx,并重新排列插槽号,以便 scsi0 获得最小编号,scsi1 获得次小编号,依此类推。(使用相同的编号,更安全。也备份您的 vmx!)

scsi0.pciSlotNumber = "16"
scsi2.pciSlotNumber = "35"
scsi1.pciSlotNumber = "34"

启动后,它们将按正确的顺序出现。

因此,请记住按正确的顺序将 scsi 主机添加到虚拟机!还请记住,如果您删除 scsi 主机上的最后一个磁盘,则下次重新启动时 scsi 主机本身也将消失。因此,如果您有 scsi 主机 0、1、2 和 3,并且删除了 2,则在 Linux 中,您最终将只剩下 scsi 主机 0、1 和 2。

相关内容