我在设置 KVM 来宾时遇到了一些严重的磁盘性能问题。使用简单的dd测试,qcow2 映像所在的主机分区(镜像 RAID 阵列)的写入速度超过120MB/s,而我的来宾写入速度从0.5 到 3MB/s不等。
time dd if=/dev/zero of=/tmp/test oflag=direct bs=64k count=16000.似乎有很多指南可以调整 kvm 性能,我最终会到达那里,但似乎此时我应该获得比这更好的性能,所以似乎有些事情已经非常错误了。
更新 1
突然,当我现在回去测试时,它是26.6 MB/s;这更像是我对 qcrow2 的期望。如果有人对可能是什么问题有任何想法(并且以防它再次神秘地返回),我会留下这个问题。
更新 2
我不再担心 qcow2 的性能,只是使用原始图像切换到 RAID1 上的 LVM,仍然使用 virtio,但在磁盘驱动器上设置 cache='none' 和 io='native'。写入性能现在是 appx。135MB/s使用与上述相同的基本测试,所以当它可以很容易地完全解决时,弄清楚问题是什么似乎没有多大意义。
我们正在为我们的虚拟机使用 kvm/qemu 和 qcow2-images。
qcow2 有一个很好的特性,镜像文件只分配虚拟机实际需要的空间。但是,如果虚拟机的分配空间变小,我如何缩小映像文件?
例子:
1.) 我创建了一个 qcow2 格式的新图像,大小为 100GB
2.) 我使用这个镜像来安装 ubuntu。安装需要大约 10 GB,图像文件增长到大约 10 GB。到目前为止没有什么意外。
3.) 我用大约 40 GB 的附加数据填充了图像。图像文件增长到 50GB。我没问题:-)
4.) 这就是奇怪的地方:我删除了图像上的所有 40GB 数据,但图像大小仍然占用了 50GB。
问题:如何释放 40GB 的数据并将图像缩小到仅需要的 10GB?
提前致谢,伯尼
我正在使用 baseimage 并基于它创建了许多 VM。现在我想知道哪个更好,qcow2 或 raw 用于基础图像。此外,你能告诉我使用这个 baseimage 的东西,而不是克隆整个磁盘是否有任何优势。速度可能是一个因素,但就效率而言,使用基础映像然后使用该基础映像创建 VM 有什么问题吗?
编辑1:
我进行了一些实验并得到了 


第一个是当 baseimage 和 overlay 都是 qcow2 时。第二,当 baseimage 是原始的但覆盖是 qcow2 时,在第三种情况下,我为每个 VM 提供单独的原始磁盘映像。令人惊讶的是,与其他两种情况相比,最后一种情况要高效得多。
实验装置: 基础映像中的操作系统:Ubuntu Server 14.04 64 位。 主机操作系统:Ubuntu 12.04 64 位 内存:8GB 处理器 : Intel® Core™ i5-4440 CPU @ 3.10GHz × 4 磁盘:500 GB
在 x 轴上:同时启动的 VM 数量。从 1 开始递增到 15。
在 y 轴上:启动“x”台机器的总时间。
从图中可以看出,向 VM 提供完整磁盘映像似乎比其他 2 种方法更有效。
编辑2:

这适用于我们为每个 VM 提供单独的原始图像的情况。执行缓存刷新后,这是图表。它几乎类似于原始 baseimage + qcow 覆盖。
谢谢。
有没有办法缩小 qcow2 图像而不将其转换为原始图像?
我无法将其转换为原始图像,因为我没有足够的磁盘空间来存储原始图像。
我相信有 qcow2 文件会在服务器上替换少量 GB(在物理服务器上使用 df -h 进行验证),但在您登录到 virt-manager VM 并发出 df 时允许大量空间 - H。你如何创建这样的文件?如果/何时虚拟机增长到其最大大小并可能填满物理服务器,物理服务器如何知道不会出现问题?
truncate 命令不会创建小的 qcow2 文件。Virtual Machine Manager 的 GUI 允许通过 GUI 创建“硬件”。这两种创建 .qcow2 文件的方法都会创建最大大小的文件。
我正在运行一些 Xen 服务器并开始迁移到 KVM。
目前我的客人要么在原始图像上运行,要么在 LVM 上运行。
我发现 libvirt 提供了一些非常好的快照功能(virsh 快照创建,...),所以我决定使用 qcow2 而不是 raw/lvm。
这是我的问题:libvirt 在 qcow2 映像上创建相同类型的快照,就好像我使用 qemu-img - 是否可以安装它们?我读了一些关于 qemu-nbd 和安装 qcow 的可能性,但我找不到关于快照的词。
今天我想增加一个虚拟机的大小,所以我做了我一直在做的事情(以前做过):
qemu-img resize diskimage.qcow2 +22GB
Run Code Online (Sandbox Code Playgroud)
然后文件损坏了,VM 不再启动。我尝试从 CD 启动 VM 以调整分区,但系统将不再读取磁盘:
qemu-img check -r all diskimage.qcow2
tcmalloc: large alloc 389841715200 bytes == (nil) @ 0x7fdb4ea66bf3 0x7fdb4ea88488 0x7fdb4e5674a6 0x7fdb50236a37 0x7fdb50236bc8 0x7fdb50237011 0x7fdb5023941e 0x7fdb5023d891 0x7fdb5027848b 0x7fdb5027c196 0x7fdb491efb35 0x7fdb5021ee4d (nil)
No errors were found on the image.
Run Code Online (Sandbox Code Playgroud)
没有错误?听起来不错,但virsh start vm不起作用,日志说:
2017-05-21T10:02:30.755824Z qemu-system-x86_64: -drive file=/.../diskimage.qcow2,format=qcow2,if=none,id=drive-virtio-disk0: could not open disk image /.../diskimage.qcow2: qcow2: Image is corrupt; cannot be opened read/write
Run Code Online (Sandbox Code Playgroud)
我尝试转换为 raw 但转换失败(退出 1):
qemu-img convert -f qcow2 diskimage.qcow2 -O raw diskimage.raw
qcow2: …Run Code Online (Sandbox Code Playgroud) 我想重新创建一个动态分配的 qcow2 图像以缩小它。删除所有不必要的文件就足够了,还是我还需要用零填充以前由这些文件占用的空间?换句话说,是 qemu-img 文件系统感知吗?
我有一个用于使用 KVM 进行虚拟化的 Ubuntu(hardy)系统。每个来宾都有自己的 qcow2 文件用作磁盘。来宾正在运行 Ubuntu (hardy)。对于这样的设置,好的备份策略是什么?我不想在备份期间关闭来宾。
在我们的应用程序中,我们正在下载 qcow2 图像,然后我们应该将其导入为 OVF。
所以任何方式来转换qcow2 --> OVF 或qcow2 --> vmdk(using qemu-img convert) --> ovf.
qcow2 ×10
qemu ×5
disk-image ×2
linux ×2
backup ×1
compression ×1
convert ×1
corruption ×1
hard-drive ×1
libvirt ×1
ovf ×1
performance ×1
sparse-files ×1
ubuntu ×1