如何可靠地映射 vSphere 磁盘 <-> Linux 设备

Rei*_*ann 6 linux storage vmware-vsphere

手头的任务

将虚拟磁盘添加到 vSphere 5 上的 Linux VM 后,我们需要识别磁盘以自动配置 LVM 存储。

虚拟磁盘可能驻留在不同的数据存储(例如 sas 或闪存)上,尽管它们的大小可能相同,但它们的速度可能会有所不同。所以我需要一种将 vSphere 磁盘映射到 Linux 设备的方法。

想法

通过 vSphere API,我能够获取设备信息:

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 
Run Code Online (Sandbox Code Playgroud)

在 Linux 上,我可以读取 uuid 字符串:

[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
Run Code Online (Sandbox Code Playgroud)

如您所见,磁盘 /dev/sda 的 uuid 字符串与 VMware API 中可见的字符串有些相似。只有第一个十六进制数字不同(5 对 6)并且它只出现在第三个连字符中。所以这看起来很有希望......

另类想法

按控制器选择磁盘。但是,升序 SCSI Id 也与下一个 vSphere 虚拟磁盘匹配是否可靠?如果我添加另一个 DVD-ROM 驱动器/USB 拇指驱动器会怎样?这可能会在两者之间引入新的 SCSI 设备。这就是为什么我认为我会放弃这个想法的原因。

问题

  1. 有人知道映射 vSphere 磁盘和 Linux 设备的更简单方法吗?
  2. 有人可以解释 uuid 字符串的差异吗?(我认为这与 SAS 寻址发起者和目标有关……WWN 之类的……)
  3. 我可以使用这些 uuid 字符串可靠地映射设备吗?
  4. SCSI 虚拟磁盘怎么样?然后没有可见的uuid...
  5. 这个任务似乎很明显。为什么Vmware 不考虑这个,干脆增加了通过Vmware Tools 查询磁盘映射的方式?

小智 1

使用 SCSI ID 来识别虚拟磁盘。您似乎有这样的印象:SCSI ID 是在 VM 启动时动态分配的。不是这种情况。在VM的属性中,您可以将虚拟磁盘的ID设置为您想要的任何内容,除非您愿意,否则它不会更改。