.. _vm_attach_dev: ================== KVM虚拟机添加设备 ================== KVM虚拟机可以在线(运行时)添加磁盘、CDROM、USB设备,这对在线维护非常有用,可以不停机修改设备。 .. note:: 案例使用的虚拟机名字 ``dev7`` ,添加的磁盘文件命名为 ``dev7-data.qcow2`` 添加磁盘文件 ============== - 创建虚拟磁盘文件(qcow2类型):: cd /var/lib/libvirt/images qemu-img create -f qcow2 dev7-data.qcow2 20G - 虚拟磁盘文件添加到虚拟机 ``qemu`` 可以映射物理存储磁盘(例如 ``/dev/sdb`` ),或者虚拟磁盘文件到KVM虚拟机的虚拟磁盘( ``vdb`` ) :: virsh attach-disk dev7 --source /var/lib/libvirt/images/dev7-data.qcow2 --target vdb --persistent --drive qemu --subdriver qcow2 .. warning:: 一定要明确使用 ``--driver qemu --subdriver qcow2`` : ``libvirtd`` 出于安全因素默认关闭了虚拟磁盘类型自动检测功能,并且默认使用的磁盘格式是 ``raw`` ,如果不指定磁盘驱动类型会导致被识别成 ``raw`` 格式,就会在虚拟机内部看到非常奇怪的极小的磁盘。 添加iso光盘 ============ cdrom/floppy 不支持热插拔,所以和上面动态插入一个磁盘设备不同,如果直接使用以下命令插入设备( 虚拟机名字是 ``sles12-sp3`` )映射:: virsh attach-disk sles12-sp3 SLE-12-SP3-Server-DVD-x86_64-GM-DVD1.iso --target hdc --type cdrom --mode readonly 会提示错误:: error: Failed to attach disk error: Operation not supported: cdrom/floppy device hotplug isn't supported - 但是,如果虚拟机定义时候已经定义过cdrom设备,则使用 ``virsh dumpxml sles12-sp3`` 可以看到如下设备::
则我们可以通过指定将iso文件插入到虚拟机中的 ``sda`` CDROM中:: virsh attach-disk sles12-sp3 /var/lib/libvirt/images/SLE-12-SP3-Server-DVD-x86_64-GM-DVD1.iso sda --type cdrom --mode readonly 就会提示成功插入:: Disk attached successfully - 再次使用 ``virsh dumpxml sles12-sp3`` 可以看到iso文件加载::
- 如果要卸载这个iso文件,则创建一个相同结构的xml文件 ``detach_iso.xml`` ,但是保持 ```` 行删除::
- 然后执行设备更新:: virsh update-device sles12-sp3 detach_iso.xml 此时提示:: Device updated successfully 再检查虚拟机配置,就看到iso文件已经卸载了。 参考 ===== - `UnixArena Linux KVM `_ - `Attaching and updating a device with virsh `_