标签: vmkfstools

  • ESXi 中为 VM 直通挂载本地 SATA 硬盘 (RDM)

    VMware ESXi 会先将存储设备格式化 VMFS-5(一种存储池管理格式,与 LVM 等类似),然后给虚拟机分配使用,对于即将安装的操作系统来讲,这相当于一个实际的物理硬盘,操作系统会再一次对这个“硬盘”格式化,而当一个物理硬盘出现部分数据损坏后,你是没办法拿到新电脑上直接访问里面的数据的。如果你基于 ESXi 来打造一个 NAS 家用存储系统时,比如希望安装 OmniOS/napp-it/NexentaStor/FreeNAS 之类的,系统也是推荐使用整个整个的硬盘来作为存储基础单元,而不推荐使用虚拟磁盘或磁盘分区之类。

    作为虚拟化领域的领导厂商,VMware 当然也考虑到了这个问题,ESXi 支持设备的直通,包括各种 PCIe 设备(需要 ESXi 基础硬件的某些虚拟化特性,如 VT-D/IOMMU 等支持)。对于存储,官方的 RDM 一般只有通过认证的 RAID/SCSI 卡或 iscsi/SAN 存储设备才可以 RDM。不过无论如何,直接访问主板上连接的硬盘驱动器都不被官方支持。

    那么,怎样才能让 ESXi 中的虚拟机直接访问主板挂载的 SATA 硬盘呢?这就需要我们另辟蹊径了。

    首先你得熟悉命令行操作,知道如何使用终端管理工具,使用 SSH 或 ESXi 控制台进入 ESXi 的 Shell 界面。

    第一步得找到需要映射的 RAW 驱动器名称:

    ls /dev/disks
    

    在我这边,有 4 块西数 4T SATA 红盘需要做 RDM:

    t10.ATA_____WDC_WD40EFRX2D68WT0N0_________________________WD2DWCC4E536ULXV
    t10.ATA_____WDC_WD40EFRX2D68WT0N0_________________________WD2DWCC4E7FYF8ZL
    t10.ATA_____WDC_WD40EFRX2D68WT0N0_________________________WD2DWCC4ECXUD802
    t10.ATA_____WDC_WD40EFRX2D68WT0N0_________________________WD2DWCC4EFSNCRU3
    

    在 ESXi datastore 中建立硬盘标识文件,该文件也是以 vmdk 为后缀,不过它只以文本方式保存了硬盘 RAW 信息。

    vmkfstools -z /vmfs/devices/disks/<前面找到的RAW名称> <存储RDM映射文件的路径>/.vmdk
    

    完成后,我这边的文件之一的内容是:

    # Disk DescriptorFile
    version=1
    encoding="UTF-8"
    CID=bbd41d1e
    parentCID=ffffffff
    isNativeSnapshot="no"
    createType="vmfsPassthroughRawDeviceMap"
    
    # Extent description
    RW 7814037168 VMFSRDM "WD-36ULXV-rdmp.vmdk"
    
    # The Disk Data Base 
    #DDB
    
    ddb.adapterType = "lsilogic"
    ddb.geometry.cylinders = "486401"
    ddb.geometry.heads = "255"
    ddb.geometry.sectors = "63"
    ddb.longContentID = "8a320d912c71ea70e95daffcbbd41d1e"
    ddb.toolsVersion = "0"
    ddb.uuid = "60 00 C2 90 83 11 65 46-b3 92 b2 53 25 66 8d b3"
    ddb.virtualHWVersion = "10"
    

    接下来,在 vSphere Client 中编辑虚拟机配置,以添加现有虚拟磁盘的方式,选择刚刚创建的 RDM 映射文件就 OK 了。