.. _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 `_