KVM 是否可以在线调整磁盘大小?

Eil*_*Eil 15 linux hard-drive lvm kvm-virtualization

我们正在一些项目中评估用于 Linux 虚拟化的 KVM。到目前为止一切进展顺利。但我们的要求之一是能够为正在运行的来宾添加磁盘空间而无需重新启动或使其脱机。这可以用 KVM 实现吗?

到目前为止,我唯一发现的(但尚未测试)是能够将磁盘热插拔到机器中。如果我走这条路,那么我总是可以将新磁盘添加到来宾上的 LVM 卷组,然后扩展所选的逻辑卷。这种方法的最大缺点是,随着时间的推移,我们最终可能会导致客户拥有可变数量的虚拟磁盘。“真正的”磁盘空间将通过 SAN 提供给主机,因此我们可以随时向主机添加更多空间。

小智 19

我知道这是一个老问题,但我在谷歌搜索解决方案时找到了它,希望它可以帮助其他人。

至于今天,它可以调整机器上的硬盘驱动器。我在这里找到了一种工作方式:

https://bugzilla.redhat.com/show_bug.cgi?id=648594

必须执行以下步骤:

  1. 找出要调整大小的硬盘驱动器的文件名和 KVM 设备名称:

    root@vhstage02:/data# virsh dumpxml test | xpath -e /domain/devices/disk
    Found 2 nodes in stdin:
    -- NODE --
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2" />
      <source file="/data/test.img" />
      <backingStore />
      <target dev="vda" bus="virtio" />
      <alias name="virtio-disk0" />
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0" />
    </disk>
    -- NODE --
    <disk type="file" device="cdrom">
      <driver name="qemu" type="raw" />
      <source file="/data/images/debian-8.2.0-amd64-netinst.iso" />
      <backingStore />
      <target dev="hda" bus="ide" />
      <readonly />
      <alias name="ide0-1-1" />
      <address type="drive" controller="0" bus="1" target="0" unit="1" />
    </disk>
    
    Run Code Online (Sandbox Code Playgroud)

对我们来说有趣的是磁盘。你应该寻找sourcealias阻止。对我来说文件名是test.img,别名是virtio-disk0. 对于此名称,您需要预先drive-获取 qemu 驱动器名称。

  1. 现在我们实际上使用 qemu monitor 调整驱动器的大小:

    virsh qemu-monitor-command test block_resize  drive-virtio-disk0  100G --hmp
    
    Run Code Online (Sandbox Code Playgroud)

请注意,使用的文件名没有 .img 扩展名,并且驱动器 - 被添加到磁盘别名。100G 是我们想要的驱动器的最终大小

  1. 登录机器并检查实际尺寸是否已更改:

    root@test:~# fdisk -l
    
    Disk /dev/vda: 100 GiB, 107374182400 bytes, 209715200 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x7e6e7f71
    
    Device     Boot  Start       End   Sectors  Size Id Type
    /dev/vda1  *      2048    499711    497664  243M 83 Linux
    /dev/vda2       501758 167770111 167268354 79.8G  5 Extended
    /dev/vda5       501760 167770111 167268352 79.8G 8e Linux LVM
    
    Run Code Online (Sandbox Code Playgroud)

就是这样!现在您可以创建新分区或调整现有分区的大小。

  • 感谢您回来并添加此答案!使事情比旧的做事方式简单得多。 (2认同)

3di*_*nce 5

我认为如果你想在不关闭机器的情况下完成你提到的事情,你就会被困住。

为什么不直接为虚拟机提供 SAN 的 LUN 并管理那里的空间呢?如果您无论如何都想使用实时迁移等功能,那么这会更有效。

KVM 基于 QEMU,因此它的所有图像格式支持都来自该项目。这里有一个很好的方法来调整Qemu/KVM 支持的各种格式的大小。但如果您在这里没有得到任何可靠的答案,Qemu 论坛将是一个提出这个问题的好地方。

另一个可能不理想的选择是为驱动器使用非常大的 qcow2 或其他稀疏映像格式。因此,您可以为每台机器提供一个用于操作系统的小型驱动器和一个用于 LVM 下数据的大型稀疏映像。这至少会保留您必须管理的虚拟驱动器/映像的数量。但是,如果您对 1000 台机器执行此操作,并且每个人都占用您看到的可用空间,则这种精简配置可能会出现问题。

我认为 XEN 目前也有同样的限制。