我们目前有一个测试环境,我们在连接 SAN 的存储阵列上创建数百个 LUN,将它们导出到一个或多个(物理)服务器,对 LUN 上包含的数据运行测试,然后销毁它们并重复。
我们想使用虚拟机作为服务器,但是在手动为每个单独的虚拟机分配数百个 LUN 时遇到了问题(与以前的物理服务器一样,我们可以设置分区来执行此操作并重新扫描 HBA) .
关于如何处理这种情况的任何建议?一种解决方案可能是 VM 直接路径 IO(但我们目前没有所需的硬件),或者设置一个脚本来自动重新扫描 ESX 级别的新 LUN,然后自动将 LUN 分配给特定的虚拟机(我认为可以通过 API 完成?)。
我不明白为什么您不能使用任何标准 ESX\ESXi 设置来执行此操作。
您应该能够使用原始设备映射来做到这一点。假设 SAN 端的分区和 LUN 呈现过程保持不变,您可以使用 vmkfstools 告诉 ESX 在主机级别重新扫描和检测新 LUN。一旦找到,您就可以创建 VMDK 并将它们添加到 VM 或将整个卷显示为原始设备映射 (RDM)。
使用 ESX,您可以在服务控制台命令行上编写脚本,但对于 ESXi,您需要使用 PowerCLI (Powershell) 或 Perl CLI 工具。vSphere 管理设备是一个 Linux 设备,如果您想采用该方法,它会预先打包所有工具。可以在此处找到所有三种 CLI 方法的文档。
您要做的事情的大致轮廓是:
1. 重新扫描主机上的新 LUN。
您可能只想扫描提供 LUN 的相关 HBA,以便将 vmhbaX 替换为连接到 SAN 的相关 HBA 名称。
2. 创建一个映射到新 LUN 的 RDM 存根
您需要确定 LUN 的 LUN 引用,并将 vmdk 设置为在您的环境中有意义的位置和名称。这有几个语法变体,我没有在 ESXi 4 上使用它,但这种格式过去在 3.5 上对我来说很好用。有两种 RDM 模式,如果您需要更多 SCSI 功能,那么裸设备映射直通模式可能更适合您,在这种情况下,将 -r 替换为 -x。
3. 将新磁盘呈现给您的虚拟机。
以这种方式准备好磁盘后,有几种方法可以将它们呈现给 VM 中的操作系统。您可以编辑 VM 配置并为此设备添加一个条目,或者您可以在 VM 中已配置此特定目标 vmdk,并且您可以在 VM 关闭时运行上述发现步骤。如果您想要一个更动态的机制,那么执行您想做的事情的最佳方法是使用VMware Disk Mount 实用程序- 这允许您从来宾操作系统中直接挂载 RDM(或任何其他 VMDK),而不必搞砸使用虚拟机配置。
如果您将远程 CLI 用于重新扫描和 vmkfstools 部分,您可能必须将目标主机和身份验证凭据指定为命令的一部分。
相同的方法可用于标准 VMDK 文件,但您需要先将 LUN 格式化为 VMFS,然后在其上创建合适的 VMDK。据我从您的描述中可以看出,这样做对您没有任何好处。