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

问候,

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

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

我已经尝试了三个受支持的虚拟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驱动程序的问题。

Linux实际上是一贯和正确的,只是不一定像你期望的那样。

LSI SAS:SAS地址是WWN,并根据其所见的顺序获得分配的类似SCSI的ID。 (这是一个简化,但会做,为什么你有差距?)

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

我通过将序列号映射到托盘盒中来移除适当的HD。 我们有LED能力差的shell。 一个新的磁盘,说它显示为/ dev / sda

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

然后我们写下序列号。 然后,如果磁盘坏了,我们查找序列号(在我们的例子中,我们标记物理球童),并拉出相应的磁盘。

但是这对vmware并没有什么帮助。

然后再一次,你可以写一个脚本来做同样的事情。 添加一个新磁盘,在guest虚拟机中logging它的uuid,然后在稍后想要自动删除磁盘时查阅该查找表。

我没有真正关注,但是我认为我的vmware磁盘总是以相同的顺序开机。 所以你可以相信,如果你保持地址不变,那么scsi地址不会改变。

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

如果你先用scsi 0:1添加一个磁盘,然后用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主机添加到vm中! 另外请记住,如果删除scsi主机上的最后一个磁盘,则scsi主机本身也将在下一次重新启动后消失。 所以如果你有scsi-host 0,1,2和3,而你删除了2,那么在linux中你最终只能得到scsi-hosts 0,1和2。