11.8. 将 DASD 设备附加到 IBM Z 中的虚拟机
通过使用 vfio-ccw
功能,您可以将直接访问存储设备(DASD)作为介质设备分配给 IBM Z 主机上的虚拟机(VM)。例如,虚拟机可以访问 z/OS 数据集,或向 z/OS 机器提供分配的 DASD。
先决条件
- 您有一个具有 IBM Z 硬件架构的系统,支持 FICON 协议。
- 您有一个 Linux 操作系统的目标虚拟机。
driverctl 软件包已安装。
# yum install driverctl
已在主机上载入了必要的
vfio
内核模块。# lsmod | grep vfio
这个命令的输出必须包含以下模块:
-
vfio_ccw
-
vfio_mdev
-
vfio_iommu_type1
-
您有一个备用 DASD 设备专供虚拟机使用,您知道设备的标识符。
以下流程使用
0.0.002c
作为示例。在执行这些命令时,请使用 DASD 设备的标识符替换0.0.002c
。
流程
获取 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
替换为检测到的设备的子通道标识符。如果上一步中的
lscss
命令只显示标头输出,且没有设备信息,请执行以下步骤:从
cio_ignore
列表中删除该设备。# cio_ignore -r 0.0.002c
在客户机操作系统中,编辑虚拟机的内核命令行,将带有
!
标记的设备标识符添加到以cio_ignore=
开头的行(如果它还没有存在)。cio_ignore=all,!condev,!0.0.002c
- 在主机上重复第 1 步,以获取子通道标识符。
将子通道绑定到
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
定义并启动 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
- 如果虚拟机正在运行,请关闭虚拟机。
显示之前定义的设备的 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>
将介质设备附加到虚拟机。为此,请使用
virsh edit
工具编辑虚拟机的 XML 配置,将以下部分添加到 XML 中,并将uuid
值替换为您在上一步中获取的 UUID。<hostdev mode='subsystem' type='mdev' model='vfio-ccw'> <source> <address uuid="30820a6f-b1a5-4503-91ca-0c10ba12345a"/> </source> </hostdev>
可选:将介质设备配置为在主机启动时自动启动。
# virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8
验证
确保介质设备被正确配置。
# 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
获取
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
。- 启动虚拟机并登录到其客户端操作系统。
在客户端操作系统中,确认 DASD 设备已被列出。例如:
# lscss | grep 0.0.0009 0.0.0009 0.0.0007 3390/0c 3990/e9 f0 f0 ff 12212231 00000000
在客户端操作系统中,在线设置设备。例如:
# chccwdev -e 0.0009 Setting device 0.0.0009 online Done
其它资源
-
关于
cio_ignore
的 IBM 文档 - 在运行时配置内核参数