+ -
当前位置:首页 → 问答吧 → 虚拟机硬盘格式的选择:qcow2、 raw

虚拟机硬盘格式的选择:qcow2、 raw

时间:2010-06-11

来源:互联网

曾经有过一段时间,徘徊于对虚拟机硬盘格式的迷惑中,2009年,终于得出了一些结论(下面的思路基本通用于其他虚拟机)

搜了下,发现大部分用qemu或者kvm的,都默认使用qcow2来作为虚拟硬盘,但qemu官方默认是用raw。
下面是qemu wiki对两种格式的描述:
raw
Raw disk image format (default). This format has the advantage of being simple and easily exportable to all other emulators. If your file system supports holes (for example in ext2 or ext3 on Linux or NTFS on Windows), then only the written sectors will reserve space. Use qemu-img info to know the real size used by the image or ls -ls on Unix/Linux.

qcow2
QEMU image format, the most versatile format. Use it to have smaller images (useful if your filesystem does not supports holes, for example on Windows), optional AES encryption, zlib based compression and support of multiple VM snapshots.

raw的优势(能找到的相关资料太少,不知道是不是理解有误):
1、简单,并能够导出为其他虚拟机的虚拟硬盘格式
2、根据实际使用量来占用空间使用量,而非原先设定的最大值(比如设定最高20G,而实际只使用3G)。——需要宿主分区支持hole(比如ext2 ext3 ntfs等)
3、以后能够改变空间最大值(把最高值20G提高到200G,qcow2也可以,不过要转为raw)
4、能够直接被宿主机挂载,不用开虚拟机即可在宿主和虚拟机间进行数据传输(注意,此时虚拟机不要开)

而qcow2的优势:
1、更小的虚拟硬盘空间(尤其是宿主分区不支持hole的情况下)
2、optional AES encryption, zlib based compression and support of multiple VM snapshots.

另外,根据fedora12的wiki,说测试结果是raw比qcow2性能更好,即使是新版的qcow2。http://fedoraproject.org/wiki/Featur...w2_Performance

如果单纯靠这些信息,那么raw好像更有优势,而且更方便。(raw支持快照否???)

那么,为什么大家都默认使用qcow2呢?为什么?

同样的,还有vmdk vdi等虚拟机硬盘格式的优劣表现在哪方面呢?

又看到一个资料,说raw 格式是一种”直读直写”的格式,不具备特殊的特性。也就是说,qcow2具备的这两个AES encryption, zlib based compression,raw就没有。

kqemu是qemu的内核加速模块,不是kvm。wiki里qemu部分有写,和kvm是分为两部分的,是两种不同的内核加速模块。

qemu跑98、me、xp是很慢的,但跑win95,win2000,是飞速的,尤其是win2000(nnd,win2000好像在普通电脑里相比那几个好像是最慢的)。98、me要快,可以用定制版的windows,好像叫lite的。

但今天再回过头来看,发现其实raw更好:
raw相比qcow2就缺乏的四个功能,但都能通过别的方式解决:
1、加密功能:把raw本身就当普通文件加密之搞定
2、快照功能:把raw加入版本管理目录中,具体需要的设置可能稍微有点多。
3、宿主机不支持按需打孔模式(hole):这个可以自己根据使用情况来扩展raw的最大值
4、硬盘压缩:就当普通电脑文件压缩之即可

而raw有qcow2所无法媲美的功能:
1、效率高于qcow2
2、直接读写虚拟机硬盘里面的文件,这比较“暴力”,但既然可以这么暴力,那么也就不怕虚拟机出任何问题了。
3、通用性好,是转为其他虚拟机的格式的通用中间格式,这样就不用担心转换虚拟机系统了。

ps:我知道这不是事情的最终面目,这个只是我目前的理解阶段,所以提出来供大家讨论,以期提高。

作者: jobinson99   发布时间: 2010-06-11

顶一个,最近想换kvm,一直在犹豫用哪种格式。此外,还研究了spice协议,据说用这个,可以让kvm拿到native级别的图形加速性能。不过现在还在开发阶段,arch上还没有现成的东西。此外,spice server必须依赖64位系统。这点相当不爽。

作者: playfish   发布时间: 2010-06-11

引用:
作者: playfish
顶一个,最近想换kvm,一直在犹豫用哪种格式。此外,还研究了spice协议,据说用这个,可以让kvm拿到native级别的图形加速性能。不过现在还在开发阶段,arch上还没有现成的东西。此外,spice server必须依赖64位系统。这点相当不爽。
kvm好像本来就应该依赖64位硬件的吧?

对spice不熟,感觉就是一个虚拟机通用的后端/前端图形界面,但这个用远程桌面不也可以实现?(已经被我下面的否定了,两者不一样,spice应该是:远程桌面+远程资源本地映射)

刚刚看了其英文介绍,简要翻译下:
“图形”硬件加速方面:
1、“客户端”2D使用通用的Cairo渲染
2、“客户端”windows下使用GDI,linux下使用Opengl
3、使用“客户端”的GPU来替换CPU渲染:可因此获得高效的渲染,并改善虚拟机的CPU使用率

4、“服务端”使用Opengl来渲染

ps:这很好玩,不管虚拟的机子是什么类型,都可以根据自己电脑的配置,来使用本地的硬件,那这样的话,同样的一个虚拟机,在不同的电脑上显示效果可就不一样了。

作者: jobinson99   发布时间: 2010-06-12

我现在想把vmdk转换成预分配的试试性能, 特别是mac的vmdk
其他系统好像还没那么明显,用mac的时候一有磁盘io系统就卡.

作者: CnkknD   发布时间: 2010-06-12

引用:
作者: jobinson99
kvm好像本来就应该依赖64位硬件的吧?
kvm是64/32通用的啊?
http://wiki.ubuntu.org.cn/UbuntuHelp:KVM/Installation里如是说:
1. To serve more than 2GB of RAM for your VMs, you must use a 64-bit kernel (see 32bit_and_64bit). On a 32-bit kernel install, you'll be limited to 2GB RAM at maximum for a given VM.
2. Also, a 64-bit system can host both 32-bit and 64-bit guests. A 32-bit system can only host 32-bit guests.
它们的区别只是客户端使用内存的大小。

作者: playfish   发布时间: 2010-06-12

引用:
作者: playfish
kvm是64/32通用的啊?
http://wiki.ubuntu.org.cn/UbuntuHelp:KVM/Installation里如是说:
1. To serve more than 2GB of RAM for your VMs, you must use a 64-bit kernel (see 32bit_and_64bit). On a 32-bit kernel install, you'll be limited to 2GB RAM at maximum for a given VM.
2. Also, a 64-bit system can host both 32-bit and 64-bit guests. A 32-bit system can only host 32-bit guests.
它们的区别只是客户端使用内存的大小。
哦,我搞错了。
应该是依赖于多核是否支持虚拟化。

作者: jobinson99   发布时间: 2010-06-12

我一般用RAW。
话说虚拟盘所在分区用什么格式比较好啊,我感觉reiserfs和ext4还算好,XFS慢死。。。

作者: liwangli   发布时间: 2010-06-12

引用:
作者: liwangli
我一般用RAW。
话说虚拟盘所在分区用什么格式比较好啊,我感觉reiserfs和ext4还算好,XFS慢死。。。
能说说理由么?

至于虚拟盘所在分区用什么格式,这个好像要根据使用情况吧?每种需求对应不同的分区格式。

作者: jobinson99   发布时间: 2010-06-12

引用:
作者: jobinson99
能说说理由么?

至于虚拟盘所在分区用什么格式,这个好像要根据使用情况吧?每种需求对应不同的分区格式。
理由和你的大体差不多了,RAW通用性好,可以直接挂载。

我说的是虚拟盘(文件)所在宿主机的分区格式啦

作者: liwangli   发布时间: 2010-06-12

今天本来想装kvm,最后时刻搜集资料中突然发现,kvm网络桥接只支持有线网,而我的笔记本主要是无线上网。于是装了vbox。

作者: playfish   发布时间: 2010-06-12

引用:
作者: liwangli
理由和你的大体差不多了,RAW通用性好,可以直接挂载。

我说的是虚拟盘(文件)所在宿主机的分区格式啦
针对客户机文件系统,我觉的,既然是在一个镜像文件中进行文件系统操作。那是不是与在swap中操作或flash设备中操作类似。如果是前者的话,fat32/ext2是更好的选择。如果是后者的话,nilfs2,logfs,btrfs是更好的选择。

对于主机系统,既然是对大文件操作,从这两篇文章看
http://www.phoronix.com/scan.php?pag...nchmarks&num=1
http://www.phoronix.com/scan.php?pag..._2634_fs&num=1
ext4无可争议的是最佳选择。对于4GB大文件,连续创建和随机读写速度都是最快的。8GB的时候就更快了。

作者: playfish   发布时间: 2010-06-12

其实我用过感觉最快还还是单独分出一个分区,再把虚拟机安装位置指定过去。比任何虚拟的磁盘文件都快。

作者: liwangli   发布时间: 2010-06-12

引用:
作者: liwangli
其实我用过感觉最快还还是单独分出一个分区,再把虚拟机安装位置指定过去。比任何虚拟的磁盘文件都快。
我经过实践证明,不一定这样
不过可能跟平台和软件有关,你们可以试试

我用在win7下用vmware player跑mac,开始指定物理分区,以为能快点,结果卡得不行,换到虚拟文件上以后好得多,可能读写物理分区时占用cpu更多,不知道是vmware的问题还是win7的问题.

作者: CnkknD   发布时间: 2010-06-13

我现在还有一个问题,虚拟机里开不开虚拟内存?我发现说法都不一,不过大部分说开
但就我的使用情况来看,没开效果更好

我分配的是1g内存,装的arch,平时在虚拟机里装个kde,主要开netbeans和浏览器.差不多够用.
在我分配了1g的swap(专门添加的一块虚拟磁盘)以后,虽然linux会尽多的使用物理内存,但免不了和虚拟内存交换, 一交换就有磁盘io, 有磁盘io系统就容易卡, 比如鼠标窗口移动是不平滑, 而不挂swap就不会这样.

我想可能是没挂swap的时候,有程序允许需要分配内存了,linux发现内存不够会释放一些缓存,而不是与swap交换, 磁盘io量小. 虚拟磁盘读写性能以及cpu占用率差距大, 所以, 即使是缓存小了, 系统需要时再从磁盘载入影响也不太大.

我随便想的, 希望有人一起探讨.
ps 我现在非常喜欢虚拟机, 只要内存够大, 几个os可以相互弥补不足. 我基本上是用玩游戏的win做host, 虚拟机一个是测试用的xp, 一个是开发和上网用的arch, 还有偶尔品尝一下的mac.

作者: CnkknD   发布时间: 2010-06-13

引用:
作者: CnkknD
我现在还有一个问题,虚拟机里开不开虚拟内存?我发现说法都不一,不过大部分说开
但就我的使用情况来看,没开效果更好

我分配的是1g内存,装的arch,平时在虚拟机里装个kde,主要开netbeans和浏览器.差不多够用.
在我分配了1g的swap(专门添加的一块虚拟磁盘)以后,虽然linux会尽多的使用物理内存,但免不了和虚拟内存交换, 一交换就有磁盘io, 有磁盘io系统就容易卡, 比如鼠标窗口移动是不平滑, 而不挂swap就不会这样.

我想可能是没挂swap的时候,有程序允许需要分配内存了,linux发现内存不够会释放一些缓存,而不是与swap交换, 磁盘io量小. 虚拟磁盘读写性能以及cpu占用率差距大, 所以, 即使是缓存小了, 系统需要时再从磁盘载入影响也不太大.

我随便想的, 希望有人一起探讨.
ps 我现在非常喜欢虚拟机, 只要内存够大, 几个os可以相互弥补不足. 我基本上是用玩游戏的win做host, 虚拟机一个是测试用的xp, 一个是开发和上网用的arch, 还有偶尔品尝一下的mac.
linux和win作为宿主机情况可能还是不太一样的。问题的关键可能是虚拟机的虚拟硬盘到底保留了多少宿主机的分区格式特点了。比如宿主用ext3,而虚拟机里用ext4,那么虚拟机里面的性能如何?是ext3的性能还是ext4的性能?——我想可能ext3的性能应该是该虚拟机的最高上限了,而不会有ext4提升的那部分。

硬盘的最大性能>特定分区格式和系统所能利用的最大性能>虚拟机虚拟硬盘所能利用的最大性能>虚拟机中的操作系统和分区格式所能利用的最大性能
经过这么多层的削弱,估计确实非常有必要有一种专门为虚拟机设计的分区格式,比如lvm之类的,来获得更搞的性能。

虚拟机中,linux的swap还是要开的,因为你无法确定某一天你会大量使用内存(尤其是用于服务器方面的),以至你原来给的内存不够用,所以需要预留这些空间,有了这点缓冲时间,估计够在线解决问题了。
但挂了swap之后慢,可能和我上面说的:虚拟机的硬盘性能最大只能达到宿主的硬盘性能上限,而不会超过它,所以导致的。

作者: jobinson99   发布时间: 2010-06-14

强贴,我也正在考虑究竟用什么磁盘格式性能最好,马上就要在生产系统上使用了。
这样看来还是RAW盘比较好!

大家继续讨论呀,非常有意义的贴子!

作者: rjyang   发布时间: 2010-06-25

引用:
作者: rjyang
强贴,我也正在考虑究竟用什么磁盘格式性能最好,马上就要在生产系统上使用了。
这样看来还是RAW盘比较好!

大家继续讨论呀,非常有意义的贴子!

如果是生产环境上使用,raw可能不是好选择
比如我上面列举的4个raw可以通过别的方式搞定的功能,实际上有个前提:能够随时关机。(不关机也可以,但因为这方面并没有经过多少验证,安全性稳定性如何存疑。)
而raw的很多优势,也是基于关机状态才具备的优势,比如:直接挂载。

也就是说,如果要在线具备更高级的硬盘特性/稳定性/有保障的品质追求,那么raw可能不是个好选择。

作者: jobinson99   发布时间: 2010-06-26

嗯,qcow2可以在线nbd的方式mount

作者: 暮雪清浊   发布时间: 2010-06-29