14.3. 使用 CLI 管理附加到虚拟机的设备
要修改虚拟机的功能,您可以使用命令行界面(CLI)管理附加到虚拟机的设备。
14.3.1. 将设备附加到虚拟机
您可以通过附加新的虚拟设备来向虚拟机(VM)添加特定的功能。
以下流程使用命令行界面(CLI)创建虚拟设备,并将其附加到虚拟机(VM)。一些设备也可以 使用 RHEL web 控制台 附加到虚拟机。
例如,您可以通过将新虚拟磁盘设备附加到虚拟机来增加虚拟机的存储容量。这也被称为内存热插拔。
RHEL 9 不支持从虚拟机中删除内存设备(也称为内存热拔)。红帽不建议使用它。
先决条件
获取您要附加到虚拟机的设备所需的选项。要查看特定设备的可用选项,请使用
virt-xml --device=?
命令。例如:# virt-xml --network=? --network options: [...] address.unit boot_order clearxml driver_name [...]
流程
要将设备附加到虚拟机,请使用
virt-xml --add-device
命令,包括该设备的定义和所需的选项:例如,以下命令会在
/var/lib/libvirt/images/
目录中创建一个 20GB 的 newdisk qcow2 磁盘镜像,并在虚拟机启动时将其作为虚拟磁盘附加到运行的 testguest 虚拟机上:# virt-xml testguest --add-device --disk /var/lib/libvirt/images/newdisk.qcow2,format=qcow2,size=20 Domain 'testguest' defined successfully. Changes will take effect after the domain is fully powered off.
在虚拟机运行时,下面的命令会将一个 USB 盘(在主机的 002 总线中作为设备 004)附加到 testguest2 虚拟机:
# virt-xml testguest2 --add-device --update --hostdev 002.004 Device hotplug successful. Domain 'testguest2' defined successfully.
可以使用
lsusb
命令获得用于定义 USB 的总线设备组合。
验证
要验证设备是否已被添加,请执行以下操作之一:
使用
virsh dumpxml
命令,并查看设备的 XML 定义是否已添加到虚拟机 XML 配置中的<devices>
部分。例如,以下输出显示了 testguest 虚拟机的配置,并确认已添加了 002.004 USB 闪存磁盘设备。
# virsh dumpxml testguest [...] <hostdev mode='subsystem' type='usb' managed='yes'> <source> <vendor id='0x4146'/> <product id='0x902e'/> <address bus='2' device='4'/> </source> <alias name='hostdev0'/> <address type='usb' bus='0' port='3'/> </hostdev> [...]
- 运行虚拟机并测试该设备是否存在并正常工作。
其它资源
-
man virt-xml
命令
14.3.2. 修改附加到虚拟机的设备
您可以通过编辑附加的虚拟设备的配置来更改虚拟机(VM)的功能。例如,如果想要优化虚拟机的性能,您可以更改其虚拟 CPU 型号来更好地匹配主机的 CPU 。
以下流程提供了使用命令行界面(CLI)修改虚拟设备的通用说明。还可以 使用 RHEL 9 web 控制台 来修改附加到虚拟机的某些设备,如磁盘和 NIC。
先决条件
-
获取您要附加到虚拟机的设备所需的选项。要查看特定设备的可用选项,请使用
virt-xml --device=?
命令。例如:
# virt-xml --network=?
--network options:
[...]
address.unit
boot_order
clearxml
driver_name
[...]
-
可选:使用
virsh dumpxml vm-name
备份虚拟机的 XML 配置,并将输出发送到文件。例如,以下命令将 testguest1 虚拟机的配置备份为testguest1.xml
文件:
# virsh dumpxml testguest1 > testguest1.xml # cat testguest1.xml <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <name>testguest1</name> <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid> [...] </domain>
流程
使用
virt-xml --edit
命令,包括设备的定义以及所需的选项:例如,以下可清除关闭的 testguest 虚拟机的 <cpu> 配置,并将其设置为 host-model:
# virt-xml testguest --edit --cpu host-model,clearxml=yes Domain 'testguest' defined successfully.
验证
要校验设备已被修改,请执行以下任一操作:
- 运行虚拟机并测试该设备是否存在并反映了所做的修改。
使用
virsh dumpxml
命令,并查看在虚拟机的 XML 配置中是否已修改了设备的 XML 定义。例如,以下输出显示了 testguest 虚拟机的 配置,并确认 CPU 模式已被配置为 host-model。
# virsh dumpxml testguest [...] <cpu mode='host-model' check='partial'> <model fallback='allow'/> </cpu> [...]
故障排除
如果修改设备会导致虚拟机无法启动,请使用
virsh 定义
工具通过重新加载之前备份的 XML 配置文件来恢复 XML 配置。# virsh define testguest.xml
对于对虚拟机 XML 配置的小更改,您可以使用 virsh edit
命令 - 例如 virsh edit testguest
。但是,对于更广泛的更改,请勿使用此方法,因为它很可能会破坏配置,从而阻止虚拟机启动。
其它资源
-
man virt-xml
命令
14.3.3. 从虚拟机中删除设备
您可以通过移除虚拟设备来更改虚拟机(VM)的功能。例如,如果不再需要,您可以从其中一个虚拟机中删除虚拟磁盘设备。
以下流程演示了如何使用命令行界面(CLI)从虚拟机(VM)中删除虚拟设备。还可 使用 RHEL 9 web 控制台从虚拟机中删除一些设备,如磁盘或 NIC。
先决条件
-
可选:使用
virsh dumpxml vm-name
备份虚拟机的 XML 配置,并将输出发送到文件。例如,以下命令将 testguest1 虚拟机的配置备份为testguest1.xml
文件:
# virsh dumpxml testguest1 > testguest1.xml # cat testguest1.xml <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <name>testguest1</name> <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid> [...] </domain>
流程
使用
virt-xml --remove-device
命令,包括设备的定义。例如:以下会在运行的 testguest 虚拟机关闭后,从其中删除标记为 vdb 的存储设备:
# virt-xml testguest --remove-device --disk target=vdb Domain 'testguest' defined successfully. Changes will take effect after the domain is fully powered off.
以下命令会立即从运行的 testguest2 虚拟机中删除 USB 闪存驱动器设备:
# virt-xml testguest2 --remove-device --update --hostdev type=usb Device hotunplug successful. Domain 'testguest2' defined successfully.
故障排除
如果移除设备会导致虚拟机无法启动,请使用
virsh define
工具,通过重新加载之前备份的 XML 配置文件来恢复 XML 配置。# virsh define testguest.xml
其它资源
-
man virt-xml
命令