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

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

我们正在几个项目中评估 KVM 的 Linux 虚拟化。目前一切进展顺利。但我们的要求之一是能够在不重新启动或脱机的情况下为正在运行的客户机添加磁盘空间。KVM 能做到这一点吗?

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

答案1

我认为,如果您想在不关闭机器的情况下完成此事,那么您就只能按照您提到的方法去做。

为什么不直接将 SAN 上的 LUN 提供给虚拟机并在那里管理空间呢?如果您想使用实时迁移等功能,这种方法效果会更好。

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

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

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

答案2

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

至于今天可以调整机器上的硬盘大小。我在这里找到了一种可行的方法:

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>
    

我们感兴趣的是磁盘。您应该查找sourcealias块。对我来说,文件名是test.img,别名是virtio-disk0。您需要在此名称前面添加drive-以获取 qemu 驱动器名称。

  1. 现在我们实际使用 qemu 监视器调整驱动器大小:

    virsh qemu-monitor-command test block_resize  drive-virtio-disk0  100G --hmp
    

请注意,文件名没有使用 .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
    

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

答案3

据我所知,这是不可能的——您可以添加新的磁盘映像,并且正如您所指出的,您还可以将新映像添加到 LVM 卷,但为了调整活动的可启动磁盘映像的大小,您需要能够将其关闭并编辑分区。

这是一个很好的解释用于扩展映像。虽然它需要关机,但您可能只需要几分钟的停机时间,特别是如果您避免使用 --nonsparse 映像选项并将 gparted 磁盘 dd 到 iso 文件并提前安装在您的 KVM 客户端中。希望这能有所帮助。

答案4

目前还不可能,但据我所知这是一个正在开发的功能。您可以做的是从 VM 连接到 iSCSI 目标并在 SAN 端管理该目标上的空间。

相关内容