13.8. 将 DASD 设备附加到 IBM Z 中的虚拟机

通过使用 vfio-ccw 功能,您可以将直接访问存储设备(DASD)作为介质设备分配给 IBM Z 主机上的虚拟机(VM)。例如,虚拟机可以访问 z/OS 数据集,或向 z/OS 机器提供分配的 DASD。

先决条件

  • 您有一个 FICON 协议支持的具有 IBM Z 硬件架构的系统。
  • 您有一个 Linux 操作系统的目标虚拟机。
  • driverctl 软件包已安装。

    # dnf install driverctl
  • 在主机上已载入了必要的 vfio 内核模块。

    # lsmod | grep vfio

    这个命令的输出必须包含以下模块:

    • vfio_ccw
    • vfio_mdev
    • vfio_iommu_type1
  • 您有一个备用 DASD 设备供虚拟机独占使用,您知道设备的标识符。

    以下流程使用 0.0.002c 作为示例。在执行这些命令时,请使用 DASD 设备的标识符替换 0.0.002c

流程

  1. 获取 DASD 设备的子通道标识符。

    # lscss -d 0.0.002c
    Device   Subchan.  DevType CU Type Use  PIM PAM POM  CHPIDs
    ----------------------------------------------------------------------
    0.0.002c 0.0.29a8  3390/0c 3990/e9 yes  f0  f0  ff   02111221 00000000

    在本例中,子频道标识符被检测为 0.0.29a8。在此流程的以下命令中,将 0.0.29a8 替换为检测到的设备的子通道标识符。

  2. 如果上一步中的 lscss 命令只显示标头输出,且没有设备信息,请执行以下步骤:

    1. cio_ignore 列表中删除该设备。

      # cio_ignore -r 0.0.002c
    2. 在客户机操作系统中,编辑虚拟机的内核命令行,将带有 ! 标记的设备标识符添加到以 cio_ignore= 开头的行(如果它还没有存在)。

      cio_ignore=all,!condev,!0.0.002c
    3. 在主机上重复第 1 步,以获取子通道标识符。
  3. 将子通道绑定到 vfio_ccw 直通驱动程序。

    # driverctl -b css set-override 0.0.29a8 vfio_ccw
    注意

    这会将 0.0.29a8 子通道永久绑定到 vfio_ccw,这意味着 DASD 在主机上将不可用。如果需要在主机上使用该设备,您必须首先删除到 'vfio_ccw'的自动绑定,并将子通道重新绑定到默认驱动程序:

    # driverctl -b css unset-override 0.0.29a8

  4. 定义并启动 DASD 介质设备。

    # cat nodedev.xml
    <device>
        <parent>css_0_0_29a8</parent>
        <capability type="mdev">
            <type id="vfio_ccw-io"/>
        </capability>
    </device>
    
    # virsh nodedev-define nodedev.xml
    Node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8' defined from 'nodedev.xml'
    
    # virsh nodedev-start mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8
    Device mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8 started
  5. 如果虚拟机正在运行,请关闭虚拟机。
  6. 显示之前定义的设备的 UUID,并保存它以供下一步使用。

    # virsh nodedev-dumpxml mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8
    
    <device>
      <name>mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8</name>
      <parent>css_0_0_29a8</parent>
      <capability type='mdev'>
        <type id='vfio_ccw-io'/>
        <uuid>30820a6f-b1a5-4503-91ca-0c10ba12345a</uuid>
        <iommuGroup number='0'/>
        <attr name='assign_adapter' value='0x02'/>
        <attr name='assign_domain' value='0x002b'/>
      </capability>
    </device>
  7. 将介质设备附加到虚拟机。为此,请使用 virsh edit 工具编辑虚拟机的 XML 配置,将以下部分添加到 XML 中,并将 uuid 值替换为您在上一步中获取的 UUID。

    <hostdev mode='subsystem' type='mdev' model='vfio-ccw'>
      <source>
        <address uuid="30820a6f-b1a5-4503-91ca-0c10ba12345a"/>
      </source>
    </hostdev>
  8. 可选: 将介质设备配置为在主机引导时自动启动。

    # virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8

验证

  1. 确保正确配置了介质设备。

    # virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8
    Name:           mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8
    Parent:         css_0_0_0121
    Active:         yes
    Persistent:     yes
    Autostart:      yes
  2. 获取 libvirt 分配给中介 DASD 设备的标识符。为此,可显示虚拟机的 XML 配置,并查找 vfio-ccw 设备。

    # virsh dumpxml vm-name
    
    <domain>
    [...]
        <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-ccw'>
          <source>
            <address uuid='10620d2f-ed4d-437b-8aff-beda461541f9'/>
          </source>
          <alias name='hostdev0'/>
          <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0009'/>
        </hostdev>
    [...]
    </domain>

    在本例中,分配的设备的标识符是 0.0.0009

  3. 启动虚拟机并登录到其客户端操作系统。
  4. 在客户端操作系统中,确认 DASD 设备已被列出。例如:

    # lscss | grep 0.0.0009
    0.0.0009 0.0.0007  3390/0c 3990/e9      f0  f0  ff   12212231 00000000
  5. 在客户端操作系统中,在线设置设备。例如:

    # chccwdev -e 0.0009
    Setting device 0.0.0009 online
    Done