How to reliably map vSphere disks <-> Linux devices
Task at hand
After a virtual disk has been added to a Linux VM on vSphere 5, we need to identify the disks in order to automate the LVM storage provision.
The virtual disks may reside on different datastores (e.g. sas or flash) and although they may be of the same size, their speed may vary. So I need a method to map the vSphere disks to Linux devices.
Ideas
Through the vSphere API, I am able to get the device info:
Data Object Type: VirtualDiskFlatVer2BackingInfo
Parent Managed Object ID: vm-230
Property Path: config.hardware.device[2000].backing
Properties
Name Type Value
ChangeId string Unset
contentId string "d58ec8c12486ea55c6f6d913642e1801"
datastore ManagedObjectReference:Datastore datastore-216 (W5-CFAS012-Hybrid-CL20-004)
deltaDiskFormat string "redoLogFormat"
deltaGrainSize int Unset
digestEnabled boolean false
diskMode string "persistent"
dynamicProperty DynamicProperty[] Unset
dynamicType string Unset
eagerlyScrub boolean Unset
fileName string "[W5-CFAS012-Hybrid-CL20-004] l****9-000001.vmdk"
parent VirtualDiskFlatVer2BackingInfo parent
split boolean false
thinProvisioned boolean false
uuid string "6000C295-ab45-704e-9497-b25d2ba8dc00"
writeThrough boolean false
And on Linux I may read the uuid strings:
[root@lx***** ~]# lsscsi -t
[1:0:0:0] cd/dvd ata: /dev/sr0
[2:0:0:0] disk sas:0x5000c295ab45704e /dev/sda
[3:0:0:0] disk sas:0x5000c2932dfa693f /dev/sdb
[3:0:1:0] disk sas:0x5000c29dcd64314a /dev/sdc
As you can see, the uuid string of disk /dev/sda looks somehow familiar to the string that is visible in the VMware API. Only the first hex digit is different (5 vs. 6) and it is only present to the third hyphen. So this looks promising...
Alternative idea
Select disks by controller. But is it reliable that the ascending SCSI Id also matches the next vSphere virtual disk? What happens if I add another DVD-ROM drive / USB Thumb drive? This will probably introduce new SCSI devices in between. Thats the cause why I think I will discard this idea.
Questions
- Does someone know an easier method to map vSphere disks and Linux devices?
- Can someone explain the differences in the uuid strings? (I think this has something to do with SAS adressing initiator and target... WWN like...)
- May I reliably map devices by using those uuid strings?
- How about SCSI virtual disks? There is no uuid visible then...
- This task seems to be so obvious. Why doesn't Vmware think about this and simply add a way to query the disk mapping via Vmware Tools?
Solution 1:
Use the SCSI ID to identify the virtual disk. You seem to be under the impression that the SCSI ID is dynamically assigned when the VM powers on. This is not the case. In the properties of the VM, you can set the ID for your virtual disk to whatever you want, and it will not change unless you want it to.