问候,
我正在使用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。