img 转esxi vmdk_KVM qcow2、raw、vmdk等镜像格式和转换

2023-05-16

云计算用一个朋友的话来说:”做云计算最苦逼的就是得时时刻刻为一些可能一辈子都碰不到的事做好准备。更苦逼的就是刚以为一个问题不会遇到,立刻就发生了。。。“。这个还真的没有办法,谁让哥我是搞云计算的呢,简单一个虚拟化就搞的你蛋疼,你还能想其它的吗?

一直纠结在做虚拟化使用什么镜像格式,刚刚开始用了raw的file,后来发现LVM的很多特性对于虚拟化还是有比较理想的能力,而且性能也很不错就用了LVM。后来被VMware骗了跑去搞Esxi接触了VMDK,最近研究openstack发现了qcow2格式,貌似现在很流行呀。也说不上分析这些镜像格式的能力,就简单说说自己的一些使用心得。

目前主要有那些格式来作为虚拟机的镜像:

raw

(default) the raw format is a plain binary image of the disc image, and is very portable. On filesystems that support sparse files, images in this format only use the space actually used by the data recorded in them.

老牌的格式了,用一个字来说就是裸,也就是赤裸裸,你随便dd一个file就模拟了一个raw格式的镜像。由于裸的彻底,性能上来说的话还是不错的。目前来看,KVM和XEN默认的格式好像还是这个格式。因为其原始,有很多原生的特性,例如直接挂载也是一件简单的事情。 裸的好处还有就是简单,支持转换成其它格式的虚拟机镜像对裸露的它来说还是很简单的(如果其它格式需要转换,有时候还是需要它做为中间格式),空间使用来看,这个很像磁盘,使用多少就是多少(du -h看到的大小就是使用大小),但如果你要把整块磁盘都拿走的话得全盘拿了(copy镜像的时候),会比较消耗网络带宽和I/O。接下来还有个有趣的问题,如果那天你的硬盘用着用着不够用了,你咋办,在买一块盘。但raw格式的就比较犀利了,可以在原来的盘上追加空间:

ddif=/dev/zeroof=zeros.raw bs=1024k count=4096   # 先创建4G的空间catforesight.img zeros.raw > new-foresight.img    # 追加到原有的镜像之后

当然,好东西是吹出来的,谁用谁知道,还是有挺多问题的。由于原生的裸格式,不支持snapshot也是很正常的。传说有朋友用版本管理软件对raw格式的文件做版本管理从而达到snapshot的能力,估计可行,但没试过,这里也不妄加评论。但如果你使用LVM的裸设备,那就另当别论。说到LVM还是十分的犀利的,当年用LVM做虚拟机的镜像,那性能杠杠的。而且现在好多兄弟用虚拟化都采用LVM来做的。在LVM上做了很多的优化,国外听说也有朋友在LVM增量备份方面做了很多的工作。目前来LVM的snapshot、性能、可扩展性方面都还是有相当的效果的。目前来看的话,备份的话也问题不大。就是在虚拟机迁移方面还是有很大的限制。但目前虚拟化的现状来看,真正需要热迁移的情况目前需求还不是是否的强烈。虽然使用LVM做虚拟机镜像的相关公开资料比较少,但目前来看牺牲一点灵活性,换取性能和便于管理还是不错的选择。

cow

copy-on-write format, supported for historical reasons only and not available to QEMU on Windows

曾经qemu的写时拷贝的镜像格式,目前由于历史遗留原因不支持窗口模式。从某种意义上来说是个弃婴,还没等它成熟就死在腹中,后来被qcow格式所取代。

qcow

the old QEMU copy-on-write format, supported for historical reasons and superseded by qcow2

一代的qemu的cow格式,刚刚出现的时候有比较好的特性,但其性能和raw格式对比还是有很大的差距,目前已经被新版本的qcow2取代。

qcow2

QEMU copy-on-write format with a range of special features, including the ability to take multiple snapshots, smaller images on filesystems that don’t support sparse files, optional AES encryption, and optional zlib compression

现在比较主流的一种虚拟化镜像格式,经过一代的优化,目前qcow2的性能上接近raw裸格式的性能,这个也算是redhat的官方渠道了。

对于qcow2的格式,几点还是比较突出的,qcow2的snapshot,可以在镜像上做N多个快照:

  1. 更小的存储空间,即使是不支持holes的文件系统也可以(这下du -h和ls -lh看到的就一样了)
  2. Copy-on-write support, where the image only represents changes made to an underlying disk image(这个特性SUN ZFS表现的淋漓尽致)
  3. 支持多个snapshot,对历史snapshot进行管理
  4. 支持zlib的磁盘压缩
  5. 支持AES的加密

vmdk

VMware 3 & 4, or 6 image format, for exchanging images with that product

VMware的格式,这个格式说的蛋疼一点就有点牛X,原本VMware就是做虚拟化起家,自己做了一个集群的VMDK的pool,做了自己的虚拟机镜像格式。又拉着一些公司搞了一个OVF的统一封包。从性能和功能上来说,vmdk应该算最出色的,由于vmdk结合了VMware的很多能力,目前来看,KVM和XEN使用这种格式的情况不是太多。但就VMware的Esxi来看,它的稳定性和各方面的能力还是可圈可点。

vdi

VirtualBox 1.1 compatible image format, for exchanging images with VirtualBox.

SUN收购了VirtualBox,Oracle又收购了SUN,这么说呢,vdi也算虚拟化这方面的一朵奇葩,可惜的是入主的两家公司。SUN太专注于技术(可以说是IT技术最前端也不为过),Oracle又是开源杀手(mysql的没落)。单纯从能力上来说vdi在VirtualBox上的表现还是不错的。也是不错的workstation级别的产品。

说了这么多虚拟机镜像格式,这么多虚拟化,做云计算的伤不起呀,得为长期发展考虑,也有朋友对镜像的转换做了很多事情,简单看看几种镜像的转化:

转换工具

  • VMDK–>qcow2qemu-img convert -f vmdk -O qcow2 SLES11SP1-single.vmdk SLES11SP1-single.img
  • qcow2–>rawqemu-img convert -O qcow2 image-raw.raw image-raw-converted.qcow
  • raw-> qcow2
  • qemu-img convert -f raw -O qcow2 2fuel2.img 2fuel2.qcow2
  • 将OVA或VMDK格式转换为Xen可运行格式
  • 将VMDK转换为Xen可运行格式
  • 假设待转换vmdk格式的硬盘为origin.vmdk
  • 要有qemu-img和vmware-vdiskmanager两个工具
  • 安装qemu来获得qemu-img工具
  • 安装vmware server来获得vmware-vdiskmanager工具
  • 首先运行:vmware-vdiskmanager -r origin.vmdk -t 0 temp.vmdk
  • 然后运行:qemu-img convert -f vmdk temporary_image.vmdk -O raw xen_compatible.img
  • 将ova格式转换为Xen可读格式
  • 假设待转换文件为origin.ova,在windows下将其改为origin.rar直接解压缩或在Linux下使用tar xvf oringin.ova解压缩。
  • 解压缩后生成三个文件:
  • xxx.vmdk
  • xxx.mf
  • xxx.ovf
  • 使用上文方法一的步骤将xxx.vmdk转为Xen可运行格式。
  • 转换VMWare的image让KVM能使用
  • 我们先要安装一个小软件virt-goodies: sudo apt-get install virt-goodies
  • 然后使用vmware2libvirt来给VMWare VM的基本资料vmx转成KVM可以读入的XML. 如: vmware2libvirt -f myvm.vmx > myvm.xml
  • 使用qemu-img将VMWare VM的disk image转成KVM能读的文件: qemu-img convert -f vmdk myvm.vmdk -O qcow2 myvm.qcow2
  • 可能还需要修改一下vmx转成的xml
  • disk中的target dev,在VMWARE是ide(target dev=’hda’ bus=’ide’)可能要修改成scsi(target dev=’sda’ bus=’scsi’),我们看能不能找到ROOT就知道是不是用对了;
  • bridge mode, 给interface type=’network’修改成interface type=’bridge’, 而source network=’default’修改成source bridge=’br0′.
  • qcow选项,则会创建QCOW(写时复制)格式修改后给VM的配置加入到libvirtd中.
  • virsh -c qemu:///system define myvm.xml
  • virsh -c qemu:///system list --all
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

img 转esxi vmdk_KVM qcow2、raw、vmdk等镜像格式和转换 的相关文章

  • 四旋翼无人机物理基础

    四旋翼无人机物理基础 1 结构形式2 运动原理 垂直运动 俯仰运动 滚转运动 xff1a 偏航运动 xff1a 前后运动 xff1a 倾向运动 xff1a 1 结构形式 旋翼对称分布在机体的前后 左右四个方向 xff0c 四个旋翼处于同一高
  • npm 清理缓存命令

    npm cache clean f 有些时候npm下载资源出错 xff0c 再次下载的时候可能因为之前错误的缓存造成一直下载不成功 此时可以清一下npm的缓存 xff0c 然后尝试重新下载 使用 可以多清理几次 npm cache clea
  • Taro 和 uni-app选型对比

    Taro 和 uni app选型对比 一 Taro和uni app的介绍 1 taro的介绍 taro是多端统一开发框架 xff0c 支持用 React 的开发方式编写一次代码 xff0c 生成能运行在微信 百度 支付宝 字节跳动小程序 H
  • 小程序 连接websocket 开发者工具上可以,但是真机上不行

    连接websocket 开发者工具上可以 xff0c 但是真机上不行 一定要保证真机和websocket机器在同一个网段 xff1b 基础库 2 4 0 提供了 wx startLocalServiceDiscovery 等一系列 mDNS
  • JS filter()方法 介绍和使用

    filter方法是js中常用的方法 xff1b 一 xff0c 作用 xff1b filter用于对数组进行过滤 它创建一个新数组 xff0c 新数组中的元素是通过检查指定数组中符合条件的所有元素 注意 xff1a filter 不会对空数
  • JS object对象转为array数组

    在开发中经常会遇到接口返回的是对象 xff0c 我们需要转为数组 xff0c 下面提供两种方法 xff1a 第一种方法 xff0c Object values span class token keyword var span data s
  • JS关闭当前页面

    JS关闭当前页面 span class token operator lt span button onclick span class token operator 61 span span class token string 34 C
  • 【马井堂】Js 去掉对象前后空格

    Js 去掉对象前后空格 function emptyParams data const temporary 61 Object assign data for const key in temporary if key if tempora
  • VMware 虚拟机与主机通信三种方式总结

    背景 xff1a ubuntu16 04安装vmware14pro xff0c 开了两台ubuntu12 04的虚拟机 第一台基于NAT方式连接 xff0c 第二台基于Bridged方式连接 主机IP xff1a 192 168 100 1
  • JS 下载-支持多个浏览器(马井堂)

    JS 下载 支持多个浏览器 const downLoadXls 61 fileArrayBuffer filename 61 gt let data 61 new Blob fileArrayBuffer type 39 applicati
  • js微信小程序-版本更新管理器wx.getUpdateManager()、UpdateManager

    js微信小程序 版本更新管理器wx getUpdateManager UpdateManager 1 wx getUpdateManager 官方文档 版本更新管理器wx getUpdateManager 官方文档 wx getUpdate
  • 串口通信+TCP网络通信简单综合实例

    串口通信 43 TCP网络通信简单综合实例 串口通信加上TCP网络通信之后就可以简单实现本地设备的联网功能了 xff0c 哈哈 xff0c 话不多说 xff0c 直接上代码 总体上还是C S模式 xff0c 但是这个客户端加上了对串口的操作
  • Java设计模式(八)过滤器模式

    一 概要 过滤器模式是一种结构型设计模式 xff0c 它允许通过一系列条件来筛选对象 xff0c 并提供一种灵活的方式来组合和操作这些条件 过滤器模式将过滤条件封装成独立的过滤器类 xff0c 然后使用这些过滤器来过滤对象集合 xff0c
  • 基于ROS的STDR仿真模拟的介绍和使用

    STDR仿真介绍 stdr robot 包实现了模拟机器人 和所有的模拟传感器以及运动控制器 到目前为止 实现了以下传感器 激光雷达 提供了 sensor msgs LaserScan消息类型 超声波传感器 提供sensor msgs Ra
  • docker 删除所有未启动的容器_Docker容器的创建、启动、和停止

    1 容器是独立运行的一个或一组应用 xff0c 及他们的运行环境 容器是Docker中的一个重要的概念 2 docker容器的启动有三种方式 a 交互方式 xff0c 基于镜像新建容器并启动 例如我们可以启动一个容器 xff0c 打印出当前
  • 使用了withoutoverlapping进程还是有多个_进程和线程

    一 进程和线程基本概念 进程 进程是程序的一次执行过程 xff0c 是一个动态概念 xff0c 是程序在执行过程中分配和管理资源的基本单位 xff0c 每一个进程都有一个自己的地址空间 xff0c 至少有 5 种基本状态 xff0c 它们是
  • 查看mysql主从命令_MYSQL主从同步的管理

    这里介绍一些管理MYSQL主从同步的命令 xff1a 1 停止MYSQL同步 STOP SLAVE IO THREAD 停止IO进程 STOP SLAVE SQL THREAD 停止SQL进程 STOP SLAVE 停止IO和SQL进程 2
  • python 带参装饰器_python带参数的装饰器

    装饰器更高级的用法是可以带参数 带参数的装饰器 先来看一个不带参数的装饰器 1 2 3 4 5 6 7 8 9 10 11 12 13 14import time def timeit fn def wrap args kwargs sta
  • linux内核设计与实现 怎么读,《Linux内核设计与实现》读书笔记(一)

    第一次写读书笔记 xff0c 有什么套路呢 xff1f 还没来得及去学习 linux kernel的设计与实现 真的是一本好书 xff0c 里面的东西解答了很多工作中的疑问 如显示地调用schedule 进行调度 xff0c 系统调用 sy
  • Linux上ARP表,路由表的解释

    为厘清数据在网络中的传输流向和具体的实现过程 xff0c 现对ARP表 xff0c 路由表进行学习如下 ARP xff08 Address Resolution Protocol xff09 地址解析协议 IP数据包经常通过以太网进行发送

随机推荐