我们在几个项目上评估KVM for Linux虚拟化。 一切进展顺利。 但是我们的一个要求就是能够将磁盘空间添加到正在运行的guest虚拟机,而无需重新启动或脱机。 这是可能的与KVM?
到目前为止我发现的唯一的东西(但还没有testing)是热插拔磁盘到机器的能力。 如果我走这条路线,那么我总是可以将新磁盘添加到guest虚拟机上的LVM卷组,然后扩展选定的逻辑卷。 这种方法最大的缺点是,随着时间的推移,我们可能会结束与虚拟磁盘数量不同的客人。 “真正的”磁盘空间将通过SAN提供给主机,因此我们可以随时为主机添加更多的空间。
我认为,如果你不想让机器停机的话,你会停下来做你所提到的。
为什么不直接将虚拟机LUN放在SAN上并在那里pipe理空间? 无论如何,如果您想使用实时迁移等function,效果会更好。
KVM基于QEMU,所以它的图像格式支持来自该项目。 这里有一个很好的方法来调整 Qemu / KVM支持的各种格式。 但是如果您在这里没有得到任何可靠的答案,那么Qemu论坛将会是一个提出这个问题的好地方。
另一个可能不太理想的select是为驱动器使用非常大的qcow2或其他稀疏图像格式。 所以你可以给每台机器一个小驱动器的操作系统和一个大的稀疏图像在LVM下的数据。 这至less会保持你不得不pipe理的虚拟驱动器/镜像的数量。 但是,这种精简configuration可能会成为一个问题,但是如果您对1000台计算机执行此操作,则每个人都可以将您看到的自由空间提供给您。
XEN我相信目前有相同的限制。
我知道这是一个古老的问题,但我发现它,同时search解决scheme,希望它可以帮助别人。
至今为止,可以调整机器上的硬盘驱动器大小。 我在这里find了一个可行的方法:
https://bugzilla.redhat.com/show_bug.cgi?id=648594
必须执行以下步骤:
找出要resize的硬盘的文件名称和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>
我们感兴趣的是磁盘。 你应该寻找source和alias块。 对我来说,文件名是test.img ,别名是virtio-disk0
现在我们使用qemu monitor实际调整驱动器的大小:
virsh qemu-monitor-command test block_resize drive-virtio-disk0 100G --hmp
请注意,文件名使用不带.img扩展名,驱动器被添加到磁盘别名。 100G是我们想要的驱动器的结果大小
login到机器并检查实际大小是否已更改:
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
而已! 现在,您可以创build新的分区或调整现有的分区。
AFAIK,这是不可能的 – 您可以添加新的磁盘映像,并指出您也可以添加新的映像到一个LVM卷,但为了调整一个活动的,可启动的磁盘映像,你需要能够closures它下来并编辑分区。
这是扩大图像的一个很好的解释 。 尽pipe它需要closures,但是可能只有几分钟的停机时间,特别是如果您避免使用-nonsparse映像选项并将gparted磁盘dd添加到iso文件并提前装载到KVM guest虚拟机中。 希望这可以帮助。
运行时可以在磁盘之间移动Linux系统。 限制是您无法更改正在使用分区的磁盘上的分区 。
要做到这一点,你的根文件系统必须在LVM上,这通常意味着你必须有一个单独的启动文件系统(这不是必须的,它只是让事情变得简单)
插入新磁盘后,使用vgextend将其添加到LVM,使用pvmove将rootfs移动到新磁盘,使用lvextend和resize2fs分别展开逻辑卷和文件系统,然后使用vgreduce从卷中删除旧磁盘组。 一旦删除旧的卷可以拔掉。
对于简单的情况,你有一个小磁盘的启动文件系统,你永远不必接触。 但是,如果它是自己的,它很容易卸载它拔掉它,插入一个新的和重build启动磁盘而不停止系统。 (只是不要崩溃,而你这样做)
注意:resize2fs也可以缩小文件系统。
不可能atm,但afaik这是一个正在开发的function。 你可以做的是从虚拟机连接到一个iSCSI目标,并在SAN端pipe理该目标上的空间。
你可能想看看glusterfs( http://www.gluster.com )这是一个开源的集群文件系统。