我正尝试将基于文件的磁盘热添加到正在运行的KVM虚拟服务器。 我已经使用该命令从头创build了一个新的磁盘
dd of=/home/cloud/vps_59/test.img bs=1 seek=5G count=0
我希望通过在virsh shell中做到这一点,让它成为热门话题:
virsh # attach-disk vps_59 /home/cloud/vps_59/test.img \ vdd --driver=file --subdriver=raw
该域的XML定义成为:
<disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/home/cloud/vps_59/root.img'/> <target dev='vda' bus='virtio'/> </disk> <disk type='file' device='disk'> <driver name='file' type='raw'/> <source file='/home/cloud/vps_59/test.img'/> <target dev='vdd' bus='virtio'/> </disk>
如您所见,驱动程序名称变为错误,应将driver name='qemu'
作为现有的vda
磁盘。 我曾尝试使用--drive=qemu
但表示它不受支持。
其次,一旦我重新启动运行Ubuntu 10.04.4 LTS的虚拟机,我只能“看见”新添加的驱动器。 我怎样才能使驱动器“热插拔”? 我希望虚拟机立即“看到”新驱动器,而不用重新启动。
我想从一个笔记开始,你应该避免使用virsh attach-disk
及其有限的选项。 相反,我build议在单独的临时XML文件中指定确切的磁盘格式,或使用virt-manager GUI应用程序(对于后者,跳过第一步)指定确切的磁盘格式。
使用下面的磁盘定义创build一个临时文件。
调整属性以适应您的情况
<disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/path/to/disk-image.img'/> <target dev='vdb' bus='virtio'/> </disk>
提示:查看当前的XML域configuration,并从那里复制<disk>
部分。
virsh dumpxml <domainname>
现在,在将磁盘添加到当前域之前,请确保所需的hotplug内核模块已加载到guest虚拟机中。
像最近的CentOS / RHEL / Fedora这样的一些Linux发行版在内核中内置了这个function。 在这种情况下,检查CONFIG_HOTPLUG_PCI_ACPI
。 如果是,那么你就全部设置好了,你可以跳过这一步。
modprobe acpiphp modprobe pci_hotplug
考虑将这两个模块添加到/etc/modules
如果您希望默认启动时加载它们。
使用它将磁盘添加到正在运行的VM
virsh attach-device <domain name> /path/to/disk.xml
或者,添加--persistent
选项,让Libvirt将域XML定义更新为“persistent”。
最后,如果磁盘确实是热插拔的,请检查guest虚拟机内部。 内核应该被触发,可以用dmesg
检查:
[ 321.946440] virtio-pci 0000:00:06.0: using default PCI settings [...] [ 321.952782] vdb: vdb1 vdb2
在上面的例子中,我添加了一个磁盘作为分区表中有两个分区的vdb
。