![在 ESXi 4 上为虚拟机分配和删除多个 LUN](https://linux22.com/image/503940/%E5%9C%A8%20ESXi%204%20%E4%B8%8A%E4%B8%BA%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%86%E9%85%8D%E5%92%8C%E5%88%A0%E9%99%A4%E5%A4%9A%E4%B8%AA%20LUN.png)
我们目前有一个测试环境,我们在 SAN 连接的存储阵列上创建数百个 LUN,将它们导出到一台或多台(物理)服务器,对 LUN 上包含的数据运行测试,然后销毁它们并重复。
我们希望使用虚拟机作为服务器,但是在为每个虚拟机手动分配数百个 LUN 时遇到了问题(而之前使用物理服务器时,我们只需设置分区即可执行此操作并进行 HBA 重新扫描)。
关于如何处理这种情况有什么建议吗?一种解决方案可能是 VM 直接路径 IO(但目前我们没有所需的硬件),或者设置一个脚本以在 ESX 级别自动重新扫描新 LUN,然后自动将 LUN 分配给特定 VM(我认为这可以通过 API 完成?)。
答案1
我不明白为什么你不能使用任何标准 ESX\ESXi 设置来做到这一点。
您应该能够使用原始设备映射来实现这一点。假设 SAN 端的分区和 LUN 呈现程序保持不变,您可以使用 vmkfstools 告诉 ESX 重新扫描并在主机级别检测新的 LUN。一旦找到,您就可以创建 VMDK 并将其添加到 VM 或将整个卷呈现为原始设备映射 (RDM)。
对于 ESX,您可以在服务控制台命令行上编写此脚本,但对于 ESXi,您将需要使用 PowerCLI (Powershell) 或 Perl CLI 工具。vSphere 管理设备是一款 Linux 设备,如果您想要采用这种方式,它已预先打包了所有工具。所有三种 CLI 方法的文档都可以找到这里。
您要做的事情的总体概要是:
1. 在主机上重新扫描新的 LUN。
vicfg-rescan [vmhbaX]
您可能只想扫描 LUN 所呈现的相关 HBA,因此将 vmhbaX 替换为连接到您的 SAN 的相关 HBA 名称。
2. 创建映射到新 LUN 的 RDM 存根
vmkfstools –a lsilogic -r /vmfs/devices/disks/vmhba1:0:0:0 /vmfs/volumes/storage1/testluns/testrdmlun.vmdk
您需要找出您的 LUNS 的 LUN 引用,并将 vmdk 设置为在您的环境中有意义的位置和名称。这有几个语法变体,我没有在 ESXi 4 上使用过,但这种格式在 3.5 上对我来说工作得很好。有两种 RDM 模式,如果您需要更多 SCSI 功能,那么原始设备映射直通模式可能更适合您,在这种情况下,将 -r 替换为 -x。
3. 将新磁盘呈现给您的虚拟机。
以这种方式准备好磁盘后,有几种方法可以将它们呈现给虚拟机中的操作系统。您可以编辑虚拟机配置并为此设备添加条目,或者您可以在虚拟机中配置此特定目标 vmdk,然后在虚拟机关闭时运行上述发现步骤。如果您想要一个更动态的机制,那么执行您想要执行的操作的最佳方法是使用VMware 磁盘挂载实用程序- 这允许您直接从客户操作系统中安装 RDM(或任何其他 VMDK),而无需弄乱 VM 配置。
如果您使用远程 CLI 进行重新扫描和 vmkfstools 部分,则可能必须在命令中指定目标主机和身份验证凭据。
相同的方法可以用于标准 VMDK 文件,但您需要先将 LUN 格式化为 VMFS,然后在其上创建合适的 VMDK。据我从您的描述中得知,这样做对您没有任何好处。