KVM和Libvirt-如何热插拔新的virtio磁盘?


24

我正在尝试将基于文件的磁盘热添加到正在运行的KVM虚拟服务器。我已经使用以下命令从头开始创建了新磁盘

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的虚拟机,我就只能“看到”新添加的驱动器。如何使驱动器“热插拔”?我希望虚拟机无需重新启动即可立即“看到”新驱动器。


1
不相关的建议,使用qemu-img代替dd-它的论点变得更自然并且做同样的事情:qemu-img create test.img 5G
chutz 2012年

Answers:


31

我想从一个说明开始,您应该避免使用virsh attach-disk有限数量的选项。相反,我建议在一个单独的临时XML文件中或通过使用virt-manager GUI应用程序(在第一个步骤中,跳过后者)指定您喜欢的确切磁盘格式。

  1. 创建磁盘定义一个临时文件下面这一个。

    调整属性以适合您的情况

    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/path/to/disk-image.img'/>
      <target dev='vdb' bus='virtio'/>
    </disk>
    

    提示:窥视当前的XML域配置,并<disk>从那里复制一个部分。

    virsh dumpxml <domainname>
    
  2. 现在,在将磁盘添加到当前域之前,请确保在客户机中加载了所需的热插拔内核模块。

    一些Linux发行版(例如最近的CentOS / RHEL / Fedora)在内核中内置了此功能。在这种情况下,检查CONFIG_HOTPLUG_PCI_ACPI。如果是y,则一切就绪,您可以跳过此步骤。

    modprobe acpiphp
    modprobe pci_hotplug
    

    /etc/modules如果希望默认情况下在引导时加载这两个模块,请考虑将它们添加到其中。

  3. 使用以下命令将磁盘添加到正在运行的VM

    virsh attach-device <domain name> /path/to/disk.xml
    

    (可选)添加--persistent选项,以使Libvirt更新域XML定义“持久”。

  4. 最后,在客户机内部检查磁盘是否确实是热插拔的。应该触发内核,可以使用以下命令进行检查dmesg

    [  321.946440] virtio-pci 0000:00:06.0: using default PCI settings
    [...]
    [  321.952782]  vdb: vdb1 vdb2
    

    在上面的示例中,我vdb在分区表中添加了具有两个分区的磁盘。

参考文献


您是否还应该添加--persistent电源以确保在关闭虚拟机电源时此配置不会丢失?
chutz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.