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


15

我们正在几个项目上评估用于Linux虚拟化的KVM。到目前为止一切进展顺利。但是我们的要求之一是能够在不重新引导或使其脱机的情况下向正在运行的客户机添加磁盘空间的能力。KVM有可能吗?

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


(还有“是”,有可能。)
poige

Answers:


4

我想,如果您想在不关闭机器的情况下进行操作,就会被困住。

为什么不直接在SAN旁边给虚拟机LUN并管理其中的空间?如果您想使用实时迁移等功能,则效果更好。

KVM基于QEMU,因此其所有图像格式支持均来自该项目。这是调整 Qemu / KVM支持的各种格式的好方法。但是,如果您在这里没有任何明确的答案,那么Qemu论坛将是一个很好的地方。

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

XEN我相信目前有相同的限制。


进一步考虑,如您所述,从客户机本身内部安装SAN存储可能是解决方法。并感谢您提供其他信息。
Eil

精简资源调配也可能因分段而代价高昂。
wazoox '04

15

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

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

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 monitor调整驱动器的大小:

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

请注意,使用的文件名不带.img扩展名,并且drive-已添加到磁盘别名中。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
    

而已!现在,您可以创建新分区或调整现有分区的大小。


1
感谢您回来并添加此答案!使事情比以前的做事简单得多。
Dave Sherohman

4

AFAIK,这是不可能的-您可以添加新的磁盘映像,并且如您所指出的,还可以向LVM卷添加新的映像,但是为了调整活动的可引导磁盘映像的大小,您需要能够将其关闭向下并编辑分区。

这是扩展图像的很好的解释。尽管它需要关闭,但您可能仅需要几分钟的停机时间就可以解决,尤其是如果您避免使用--nonsparse image选项并将gparted磁盘dd到iso文件中并事先装入KVM guest虚拟机中。希望这可以帮助。


2
问题实际上与KVM无关。在Linux上,您根本无法调整从中引导磁盘的大小。它也适用于物理RAID阵列。
wazoox

3

运行时,可以在磁盘之间移动Linux系统。局限性是您不能更改正在使用分区的磁盘上的分区

为此,您的根文件系统必须位于LVM上,这通常意味着您必须具有单独的引导文件系统(但这不是必需的,它只是使事情变得简单)。

插入新磁盘后,使用vgextend将其添加到LVM,使用pvmove将rootfs移至新磁盘,分别使用lvextend和resize2fs扩展逻辑卷和文件系统,然后使用vgreduce从卷中删除旧磁盘组。删除旧卷后即可拔出。

在简单的情况下,您有一个用于引导文件系统的小磁盘,您无需触摸。但是,如果只有它自己,则很容易卸载它,然后拔出它,插入一个新的文件,然后重建引导磁盘而无需停止系统。(只是在执行过程中不要崩溃)

注意:resize2fs也可以缩小文件系统。


0

不可能的atm,但是afaik它正在开发中。您可以做的是从VM连接到iSCSI目标并在SAN端管理该目标上的空间。


您没有用他可以使用的答案来回答问题。
2012年

@David:是什么让您认为甚至拒绝我的回答?我的答案如何不解决当前问题?
dyasny 2012年

您说了“不可能的atm ...”,然后告诉他目前尚无法使用的功能。(现在,将近两年后,情况可能会有所不同-但这个答案没有这么说。)

1
所以两年前我应该告诉他“两年内有可能”吗?我对你来说像个先知吗?那时,热插拔还在开发中,这就是我所说的。然后,我提供了一种将存储连接到VM的不同方法,该方法与整个qemu功能集无关。从来没有说过这是唯一的方法,但这是一种方法。
dyasny 2012年

现在我知道了...我编辑了您的答案,以更好地表达您的意图。
2012年
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.