1. 简介

本文介绍使用qemu-img创建qcow2格式磁盘文件的预分配(preallocation)策略,及对虚拟磁盘性能的影响。

2. qcow2磁盘及预分配策略介绍

查看qemu-img手册,可以看到关于qcow2格式磁盘文件和预分配策略的简要介绍:

 qcow2QEMU image format, the most versatile format. Use it to have smaller images (useful if your filesystem doesnot supports holes, for example on Windows), optional AES encryption, zlib based compression and support ofmultiple VM snapshots.Supported options:"backing_file"File name of a base image (see create subcommand)"backing_fmt"Image format of the base image"encryption"If this option is set to "on", the image is encrypted.Encryption uses the AES format which is very secure (128 bit keys). Use a long password (16 characters)to get maximum protection."cluster_size"Changes the qcow2 cluster size (must be between 512 and 2M). Smaller cluster sizes can improve theimage file size whereas larger cluster sizes generally provide better performance."preallocation"Preallocation mode (allowed values: "off", "metadata", "falloc", "full"). An image with preallocatedmetadata is initially larger but can improve performance when the image needs to grow. "falloc" and"full" preallocations are like the same options of "raw" format, but sets up metadata also.

qcow2是QEMU的虚拟磁盘映像格式,它是一种非常灵活的磁盘格式,支持瘦磁盘(类似稀疏文件)格式,可选的AES加密,zlib压缩及多快照功能。在使用qemu-img创建qcow2虚拟磁盘,可以设置磁盘预分配策略,其支持4种格式:

  • off模式
    缺省预分配策略,即不使用预分配策略

  • metadata模式
    分配qcow2的元数据(metadata),预分配后的虚拟磁盘仍然属于稀疏映像类型(allocates qcow2 metadata, and it’s still a sparse image.)分配元数据所需的空间,但不为数据分配任何空间,这是配置最快的,但客户机写入最慢。

  • falloc模式
    使用posix_fallocate()函数分配文件的块并标示它们的状态为未初始化,相对full模式来说,创建虚拟磁盘的速度要快很多(which uses posix_fallocate() to “allocate blocks and marking them as uninitialized”, and is relatively faster than writing out zeroes to a file)。
    为元数据和数据分配空间,但将块标记为未分配, 这将比metadata配置得慢,但比full配置要快。客户机写入性能将比metadata快得多,并且接近full。

  • full模式
    分配所有磁盘空间并置零,预分配后的虚拟磁盘属于非稀疏映像类型(allocates zeroes and makes a non-sparse image)
    为元数据和数据分配空间,因此将消耗所有物理空间(而不是稀疏的), 所有空的已分配空间将设置为零,这是最慢的配置,跟falloc客户机写入性能相近。

3. 测试与验证

使用qemu-img创建qcow2格式虚拟磁盘,并设置不同预配置参数:

[root@CentOS65 kvm]# qemu-img create -f qcow2  /home/kvm/test1-offdata.qcow2 5G
Formatting '/home/kvm/test1-offdata.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536
[root@CentOS65 kvm]# qemu-img create -f qcow2  -o preallocation=metadata /home/kvm/test1-metadata.qcow2 5G
Formatting '/home/kvm/test1-metadata.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 preallocation='metadata'
[root@CentOS65 kvm]# qemu-img create -f qcow2  -o preallocation=full /home/kvm/test1-fulldata.qcow2 5G
Formatting '/home/kvm/test1-fulldata.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 preallocation='full'
[root@CentOS65 kvm]# qemu-img create -f qcow2  -o preallocation=falloc /home/kvm/test1-fallocatdata.qcow2 5G
Formatting '/home/kvm/test1-fallocatdata.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 preallocation='falloc'
[root@CentOS65 kvm]# ls -lash /home/kvm/
total 13G
4.0K drwxr-xr-x. 2 root root 4.0K Jan 29 04:45 .
4.0K drwxr-xr-x. 6 root root 4.0K Jan 25 08:48 ..
5.1G -rw-r--r--. 1 root root 5.1G Jan 29 04:45 test1-fallocatdata.qcow2
5.1G -rw-r--r--. 1 root root 5.1G Jan 29 04:44 test1-fulldata.qcow2
912K -rw-r--r--. 1 root root 5.1G Jan 29 04:44 test1-metadata.qcow2
136K -rw-r--r--. 1 root root 193K Jan 29 04:43 test1-offdata.qcow2

从测试结果上看,可得出以下结论:

  • 缺省策略和metadata策略创建出来的磁盘属于稀疏磁盘格式,而falloc和full策略创建出来的磁盘属于非稀疏磁盘格式。
  • 由于falloc策略,无需对磁盘进行置零操作,因此其创建虚拟磁盘时的速度要比full模式快的多

参考:
http://www.linux-kvm.org/images/9/92/Qcow2-why-not.pdf
https://www.jamescoyle.net/how-to/1810-qcow2-disk-images-and-performance

qemu-img创建qcow2虚拟磁盘的预分配策略相关推荐

  1. 磁盘位置_Win10创建和附加虚拟硬盘|Win10怎么创建VHD虚拟磁盘

    VHD虚拟磁盘,就是在C盘划分一定的空间出来,然后利用这个空间虚拟一个硬盘.VHD虚拟磁盘装系统不受分区限制,也不用格式化某个分区,只要是NTFS的磁盘分区格式就能创建,一般用于安装多个操作系统.这篇 ...

  2. mysql qcow2_如何创建qcow2格式的磁盘镜像并填充数据?

    前言 本次文章的机缘来自于这次在做的qb的Oracle备库部分的功能,需要提供RedHat7.4,Oracle数据库以及MySQL数据库的qcow2磁盘镜像.由于RedHat7.4的镜像已经有了,今天 ...

  3. qcow2虚拟磁盘碎片整理方案一

    qcow2格式的虚拟磁盘在虚拟机使用的过程中所占的宿主机物理磁盘会不断增加,即使虚拟机内部将所占空间释放后,所占的宿主机磁盘依然不会减少,本文验证几种磁盘碎片整理的方案 环境说明: 虚拟机内部磁盘空间 ...

  4. 在windows10系统中,用qemu软件创建ARM构架虚拟机

    因为需要ARM构架机器测试,又不想花钱买,就创建一个虚拟机测试吧! 研究了很久, VMware和VirtualBox不能改变CPU构架,qemu系统可以虚拟不同的CPU构架. 于是--闲话少说-- 重 ...

  5. windows 虚拟磁盘的软链接_如何在Windows的操作系统下创建VHD虚拟磁盘

    VHD文件对很多人来说应该不会陌生,从早期微软使用的虚拟机Virtual PC的硬盘格式文件就是VHD,从Windows 7开始,微软就将VHD植入到了Windows的操作系统当中.可以通过系统中建立 ...

  6. subst 不小心创建出来虚拟磁盘 在磁盘管理中删不掉 使用subst命令删除 完美解决

    win + R 打开资源管理器输入: cmd 点击: 确定 在 cmd 里面输入: subst /? 来查看 subst 命令和参数的使用 语法: subst [drive1: [drive2:]pa ...

  7. AWS创建用户、角色、策略

    登录AWS: Amazon Web Services Sign-In 1.进入IAM控制面板 2. 点击左侧的用户按钮 -> 添加用户 ,来到这个页面 3.输入用户名,勾选编程访问 4.点击下一 ...

  8. Windows Server 2008 域操作(创建域、加入域、创建普通用户、组策略管理设置)

    目录 一.基础知识 1.Domain 2.内网环境: 3.域的特点: 4.域的组成: 5.域的部署: 6.活动目录 7.组策略GPO 8.部署安装活动目录: 9.PC加入域: 10.常见小问题 二.实 ...

  9. 强化学习为 OpenAI 和 Microsoft 创建了有效的防御策略,拓宽了 ChatGPT 的护城河

    在这篇博客中,我将回顾使用强化学习 (RL) 创建和改进大型语言模型(例如 ChatGPT)的过程.然后,我将展示 OpenAI 和 Microsoft 如何使用 RL 来防止竞争对手在生成 AI 市 ...

最新文章

  1. linux wc 命令简介
  2. Apache Solr入门教程(初学者之旅)
  3. 腾讯云AMD服务器8元/月
  4. Swift中一个类中的枚举(enum)类型的数据该如何实现序列化(NSCoder)
  5. 腾讯在「无用」道路上越走越远
  6. java方法生命周期_java – Servlet的生命周期及其方法
  7. 计算机网络英文介绍,计算机网络英文自我介绍
  8. java的安装和配置
  9. 贵州:值得做好“水”文章
  10. 01.26 小组功能初步总结
  11. python编程求n的阶乘_使用Python编程的阶乘
  12. refprop物性库_refprop 9.1 下载-refprop(制冷剂物性查询运算软件)附中文教程 9.1 最新免费版 - 河东下载站...
  13. v-distpicker
  14. 什么是测试用例?什么是测试脚本?两者有什么关系?为什么要编写测试用例?测试用例的作用是什么?
  15. 毕业设计 基于stm32的计步器设计与实现 - 物联网
  16. java导出CSV文件
  17. Java调用 新浪微博API 接口发微博(包含js微博组件、springMVC新浪登录)详解
  18. 胡须清洗的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. 网易AI平台开放多项技术,助力网易七鱼智能客服升级
  20. 用VS2015开发Linux程序详细教程-配置篇

热门文章

  1. JavaScript文本特效实例小结【3个示例】
  2. PHP利用PDO从mysql读取大量数据处理(可做大量数据集的导出,业务调整等)
  3. PHP 递增/递减运算符
  4. 【uTenux实验】写在开始实验之前
  5. 聚集表(clustered table)data page中的数据行可以无序
  6. 09年3月编程语言排行榜:Visual Basic与PHP的暗战
  7. Apache Ant使用过程的总结
  8. python步长为负时的情况
  9. React:Conditional Rendering(条件渲染)
  10. Firefly 3288又一次制作android和lubuntu双系统固件