标签: kvm-virtualization

令人难以置信的低 KVM 磁盘性能(qcow2 磁盘文件 + virtio)

我在设置 KVM 来宾时遇到了一些严重的磁盘性能问题。使用简单的dd测试,qcow2 映像所在的主机分区(镜像 RAID 阵列)的写入速度超过120MB/s,而我的来宾写入速度从0.5 到 3MB/s不等。

  • 来宾配置了几个 CPU 和 4G 内存,目前没有运行其他任何东西;目前这是一个完全最小的安装。
  • 性能测试使用time dd if=/dev/zero of=/tmp/test oflag=direct bs=64k count=16000.
  • 来宾配置为使用 virtio,但这似乎对性能没有影响。
  • 主机分区是 4kb 对齐的(无论如何,主机上的性能很好)。
  • 在磁盘上使用写回缓存会大大提高报告的性能,但我不想使用它;即使没有它,性能也应该比这好得多。
  • 主机和来宾都运行 Ubuntu 12.04 LTS,它带有 qemu-kvm 1.0+noroms-0ubuntu13 和 libvirt 0.9.8-2ubuntu17.1。
  • 主机启用了截止时间 IO 调度程序,来宾具有 noop。

似乎有很多指南可以调整 kvm 性能,我最终会到达那里,但似乎此时我应该获得比这更好的性能,所以似乎有些事情已经非常错误了。

更新 1

突然,当我现在回去测试时,它是26.6 MB/s;这更像是我对 qcrow2 的期望。如果有人对可能是什么问题有任何想法(并且以防它再次神秘地返回),我会留下这个问题。

更新 2

我不再担心 qcow2 的性能,只是使用原始图像切换到 RAID1 上的 LVM,仍然使用 virtio,但在磁盘驱动器上设置 cache='none' 和 io='native'。写入性能现在是 appx。135MB/s使用与上述相同的基本测试,所以当它可以很容易地完全解决时,弄清楚问题是什么似乎没有多大意义。

performance qcow2 kvm-virtualization

32
推荐指数
6
解决办法
8万
查看次数

释放 kvm/qemu 上 qcow2-image-file 上未使用的空间

我们正在为我们的虚拟机使用 kvm/qemu 和 qcow2-images。

qcow2 有一个很好的特性,镜像文件只分配虚拟机实际需要的空间。但是,如果虚拟机的分配空间变小,我如何缩小映像文件?

例子:

1.) 我创建了一个 qcow2 格式的新图像,大小为 100GB

2.) 我使用这个镜像来安装 ubuntu。安装需要大约 10 GB,图像文件增长到大约 10 GB。到目前为止没有什么意外。

3.) 我用大约 40 GB 的附加数据填充了图像。图像文件增长到 50GB。我没问题:-)

4.) 这就是奇怪的地方:我删除了图像上的所有 40GB 数据,但图像大小仍然占用了 50GB。

问题:如何释放 40GB 的数据并将图像缩小到仅需要的 10GB?

提前致谢,伯尼

disk-image qemu qcow2 kvm-virtualization

31
推荐指数
4
解决办法
4万
查看次数

哪个是更好的图像格式,raw 或 qcow2,用作其他 VM 的基本图像?

我正在使用 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 覆盖。

谢谢。

disk-image qemu qcow2 kvm-virtualization

29
推荐指数
2
解决办法
10万
查看次数

如何将 cdrom 设备连接到 kvm/qemu 域(使用命令行工具)?

我已经在我的 Ubuntu 笔记本电脑上设置了一个运行 Windows XP 的虚拟机。使用virt-managerGUI 应用程序,我可以在我的驱动器中插入一张 CD,然后转到 Details?IDE CDROM 1 并单击Connect按钮。然后 CD 在我的虚拟机中可用。

如何通过命令行执行相同的操作?显然,我也希望能够与命令行断开连接。

注意:我可以从命令行使用virsh start testbed(testbed 是域/VM 的名称)启动 VM。

optical-media kvm-virtualization virsh

27
推荐指数
2
解决办法
10万
查看次数

Windows 7 安装程序使用 Proxmox 4.2 在“启动 Windows”时挂起

我正在尝试在 Debian Jessie 上运行的 Proxmox 虚拟环境版本 4.2-4/2660193c 上安装 Windows 7。我已按照本网站上的说明进行操作。

我将已知良好的 Win7 ISO(适用于 VirtualBox 和真实硬件)上传到 Proxmox,并按照推荐的最佳实践配置 VM 。

当 VM 启动时,Windows 会显示灰色文本模式进度条,上面写着“Windows 正在加载文件...”,然后切换到“正在启动 Windows”并在那里停留数小时。

没有可见的动作,没有彩色的 Windows 标志,没有动画,没有磁盘 I/O,没有 CPU 负载,没有日志输出。没有办法继续。

XP Home 在 VM 中安装没有任何问题。

主机是 Intel Core i5,支持 VT,32 GByte RAM,8 TByte SATA 磁盘。

如何让 Win7 在 Proxmox 4.2 上继续其安装过程?

windows-7 proxmox kvm-virtualization

27
推荐指数
1
解决办法
2万
查看次数

如何在机器之间同步巨大的稀疏文件(VM 磁盘映像)?

是否有一个命令,例如 rsync,可以将巨大的、稀疏的文件从一个 linux 服务器同步到另一个?

目标文件保持稀疏非常重要。它可能比包含它的驱动器更长(但不会更大)。只应通过线路发送更改的块。

我试过 rsync,但没有任何乐趣。https://groups.google.com/forum/#!topic/mailing.unix.rsync/lPOScZgFE9M

如果我编写一个程序来做到这一点,我只是在重新发明轮子吗? http://www.finalcog.com/synchronise-block-devices

谢谢,

克里斯。

linux rsync kvm-virtualization

26
推荐指数
4
解决办法
4万
查看次数

如何使用 libvirt+KVM 重命名虚拟机

如何在 KVM+libvirt 上重命名虚拟机?

我希望它更改“库存”中的名称以及更改存储的名称等。

ubuntu libvirt kvm-virtualization

26
推荐指数
4
解决办法
3万
查看次数

使用 virt-install 创建来宾后如何删除它

我从命令行创建了一个 KVM 来宾,virt-install其中使用了命令行选项--disk pool=vg0,size=20--name virt1.example.com.

如何从命令行删除此 KVM 来宾?我不再需要它了。

只是为了记录整个命令行是

virt-install --debug --hvm --vnc --name virt1.example.com --os-type=linux --os-variant=rhel6 --pxe --network network=default,model=e1000,mac=02:54:00:13:be:e4 --disk pool=vg0,size=20 --ram 1024 --vcpus=1 
Run Code Online (Sandbox Code Playgroud)

这是一些额外的信息

[root@server ~]# virsh vol-list vg0
Name                 Path                                    
-----------------------------------------
lv0                  /dev/vg0/lv0                            
lv_swap              /dev/vg0/lv_swap                        
virt1.example.com.img /dev/vg0/virt1.example.com.img  

[root@server ~]# virsh list
 Id Name                 State
----------------------------------
  3 virt1.example.com running
Run Code Online (Sandbox Code Playgroud)

更新

运行这三个命令似乎删除了已安装的 KVM

virsh destroy virt1.example.com
virsh undefine virt1.example.com
virsh vol-delete --pool vg0 virt1.example.com.img
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅终端会话:

[root@server ~]# virsh list --all
 Id Name                 State …
Run Code Online (Sandbox Code Playgroud)

installation libvirt kvm-virtualization

25
推荐指数
1
解决办法
6万
查看次数

KVM 和 Libvirt - 如何热插拔新的 virtio 磁盘?

我正在尝试将基于文件的磁盘热添加到正在运行的 KVM 虚拟服务器。我使用命令从头开始创建了一个新磁盘

dd of=/home/cloud/vps_59/test.img bs=1 seek=5G count=0
Run Code Online (Sandbox Code Playgroud)

我希望通过在 virsh shell 中执行此操作来将其热添加到来宾中:

virsh # attach-disk vps_59 /home/cloud/vps_59/test.img \
        vdd --driver=file --subdriver=raw
Run Code Online (Sandbox Code Playgroud)

然后域的 XML 定义变为:

<disk type='file' device='disk'>
  <driver name='qemu' type='raw'/>
  <source file='/home/cloud/vps_59/root.img'/>
  <target dev='vda' bus='virtio'/>
</disk>
<disk type='file' device='disk'>
  <driver name='file' type='raw'/>
  <source file='/home/cloud/vps_59/test.img'/>
  <target dev='vdd' bus='virtio'/>
</disk>
Run Code Online (Sandbox Code Playgroud)

如您所见,驱动程序名称错误,应该是driver name='qemu'现有vda磁盘。我已经尝试过,--drive=qemu但它表示它不受支持。

其次,一旦我重新启动运行 Ubuntu 10.04.4 LTS 的虚拟机,我只会“看到”新添加的驱动器。如何使驱动器“热插拔”?我希望虚拟机无需重新启动即可立即“看到”新驱动器。

virtualization storage virtual-machines libvirt kvm-virtualization

25
推荐指数
1
解决办法
4万
查看次数

KVM/qemu - 直接使用 LVM 卷而不使用图像文件?

我不太确定如何表达这个问题(因此标题很糟糕),所以让我提供一个我正在尝试做的事情的例子。

在我的(旧)Xen 主机上,我能够直接向每个来宾提供 LVM 文件系统。这些文件系统实际上是在主机上创建和格式化的,并直接通过。例如,对于我的一台主机使用单独的 tmp 和交换分区,我这样定义存储:

磁盘 = [
'phy:/dev/vg1/guest1-swap,sda1,w',
'phy:/dev/vg1/guest1-disk,sda2,w',
'phy:/dev/vg1/guest1-tmp,sda3 ,w',
]

因此,guest1-swap 被格式化为交换分区,guest1-disk 和 guest1-tmp 被格式化为 ext4,从来宾的角度来看,它只是将它们视为 /dev/sda 下的三个格式化分区。

(这听起来可能需要做很多工作,但是有一些配置脚本,例如很棒的xen-tools,几乎可以自动化所有内容)。

这提供了一些非常有用的功能,其中两个我对找出 KVM 特别感兴趣:

  • 从主机操作系统挂载来宾文件系统。我可以随时对任何来宾文件系统进行只读挂载,即使是在来宾运行时也是如此。这有一个附带好处,即允许我在来宾运行时创建任何现有卷的 LVM 快照。通过这种方式,我可以在运行时从主机集中备份所有来宾。

  • 在线卷大小调整。因为这些卷包含标准的 Linux 文件系统,所以我可以使用 lvextend 和 resize2fs 的组合来扩展我的来宾文件系统,再次在它们在线时。

我目前正在设置将替换 Xen 主机的 KVM 主机。与 Xen 设置类似,我利用 LVM 提供直接文件系统访问,但 KVM/qemu 的行为有所不同,因为它始终为来宾创建映像文件,即使在 LVM 卷上也是如此。从来宾的角度来看,它认为这是一个未分区的磁盘,由来宾应用分区标签,然后创建分区和文件系统。

从访客的角度来看这很好,但从服务器/管理的角度来看,它似乎远不如我描述的 Xen 设置灵活。我还是 KVM 的新手,所以我可能(希望)遗漏了一些东西。

当我尝试在 KVM 主机上重新实现我以前的备份解决方案时遇到了这个问题,并且当我尝试挂载来宾的文件系统之一时挂载命令被阻塞。所以,解决这个问题是我目前的担忧,但这也让我担心调整大小的事情,因为我相信这个问题也会在某个时候出现。

所以,这里是我的问题:

  1. 有没有办法让 kvm/qemu 直接使用 LVM 卷文件系统,就像我在 Xen 设置中描述的那样?如果这有所作为,我会使用 libvirt 进行管理。

  2. 如果没有,我该怎么做才能在 KVM 下获得类似的挂载/备份功能?我已经看到有关使用带有 FUSE 的 libguestfs …

linux lvm kvm-virtualization

23
推荐指数
2
解决办法
4万
查看次数