QEMU块设备

图片


QEMU有几种将块设备连接到虚拟机的方法。 最初,这是通过以下方式实现的:


-hda /dev/sda1 

因此,虚拟磁盘在虚拟化的过去就可以连接了。 如果我们只想测试一些liveCD,今天就可以使用它。 不幸的是,它有缺点。


  • 连接虚拟磁盘时,可以仅在虚拟机上使用/dev/hda (hda,hdb,hdc,..)接口; 对于CD,提供了-cdrom选项。
  • 当文件(或设备)连接到虚拟机时,QEMU仅使用默认设置。

开车


要设置其他参数(总线类型,缓存使用情况等),将-drive选项添加到-drive 。 尽管最初用于设置后端前端的参数,但目前用于设置后端参数,即影响虚拟机内部虚拟设备连接的参数


 -drive file=/dev/sda1,if=ide,cache=writeback,aio=threads 

装置


事实证明,随时间用一个选项设置块设备的所有参数是不合理的。 因此,选项分为两个。 后端参数,即用于配置虚拟化环境的参数。 和frontend ,它们影响设备在虚拟机中的连接方式。 对于此参数集,引入了新选项-device ,其中包含由-drive参数指定的-driveID的ID


以下配置示例将使用ide0-hd0标识符连接驱动器,结果与连接虚拟驱动器相同,如简介中所示。


 -drive file=/dev/sda1,id=ide0-hd0,if=none,cache=writeback,aio=threads \ -device ide-drive,bus=ide.0,drive=ide0-hd0 

虚拟机中的本地块设备



鉴于虚拟磁盘的广泛使用,目前在虚拟机中使用物理块设备的情况并不广泛。 从技术上讲,我们能够从旧硬盘驱动器上运行带有某些专有系统的虚拟机。 但是,在这种情况下,最好先使用dd制作磁盘映像(映像),然后从中启动系统。


像本地块设备一样,它可以连接到虚拟机..


  • 本地RAID阵列-MD型设备
  • 主DRBD(网络RAID1) -drbd设备
  • 在LVM组中创建的磁盘分区-dm类型的设备
  • 通过循环连接的常规文件是循环设备
  • 阻止通过NBD服务器导出的另一台计算机上的设备-NBD类型设备


    (这里也值得一提的是Ceph设备类型rbd和ZFS设备类型zvol-大约。)


    NBD


    考虑通过网络从远程计算机连接块设备的概念。 请参见有关NBD的单独手册



QEMU具有集成的NBD API,因此可以将通过NBD服务器扩展的远程块设备通过QEMU直接连接到虚拟机-参见左图。


但是,NBD是一个相当简单的协议,它不使用远程服务器上的身份验证,也不控制连接状态。 NBD协议假定如果与服务器的连接中断,则客户端可以重新连接,但不幸的是QEMU不会。


在某种程度上,可以通过连接多个NBD设备并在其中创建虚拟RAID阵列来解决这种情况。 这种方法具有多个优点和一个致命缺陷。 如果其中一台设备关闭,则不会发生任何不良情况。 但是,如果它们一下子飞出去,那就不好了。 虚拟环境中的I / O操作将更快,因为请求将同时与多个物理机(NBD服务器)并行执行。 但是另一方面,它将需要更多的虚拟处理器和虚拟内存资源。


在虚拟机中从NBD设备构建RAID阵列的主要缺点是QEMU设备,如果NBD设备崩溃,则仅在计算机完全重启后才能重新连接,而在虚拟机内部对操作系统进行内部重启是不够的。 但是您可以创建一个没有磁盘的虚拟机,该磁盘可以独立访问NBD服务器并连接必要的NBD设备。 此外,必须将故障设备重新添加到阵列并重新同步,这可以手动完成,也可以使用虚拟机内部的脚本完成。


最好使用NBD虚拟机设备访问NBD服务器。 就I / O性能而言,特别好的是从NBD设备构建RAID阵列。


事实证明,该解决方案绝对是所有测试中效率最高的。 而且,即使随着时间的推移NBD服务器断开连接(或出现故障),虚拟机也能够继续不间断运行。


因此,可以在不稳定的设备上组织一个相对稳定的生产虚拟化环境。


NBD设备顶部的RAID阵列的主要问题是,从NBD服务器连接属于RAID阵列的设备时,需要非常小心。 这是一个相当微妙的过程,极有可能发生致命错误,从而导致数据丢失。 一个小的错别字就足够了。 请参阅“ 花生”页面上2012年7月21日致命车祸的描述。

缺点是,如果文件系统不允许运行已运行一个虚拟机的块设备,则该虚拟设备无法在另一位置连接-这类似于iSCSI (互联网商用计算机用户接口-SCSI的网络版本)或AoE一种以太网技术)。


虚拟磁盘



QEMU不仅可以将块设备连接到虚拟机,而且还可以使用各种api连接常规文件,该文件看起来像计算机内部的块设备。


虚拟磁盘格式


Qemu可以使用各种格式的虚拟磁盘。 对于以普通文件形式显示的那些虚拟磁盘,有一个标准的qemu-img实用程序可用于转换,从而确定所使用的格式及其参数。

检索保存为常规文件的虚拟磁盘信息。 以相同的方式,您可以获得有关存储在GlusterFS上的虚拟磁盘的信息:
 root@stroj~# qemu-img info /path_to_file/soubor.img 


但是,要使用GlusterFS API获得有关虚拟磁盘的信息,您需要使用用于将虚拟磁盘连接到虚拟机的相同参数。 因此,您可以在安装和使用了GlusterFS客户端的计算机上标识内部磁盘:
 root@stroj~# qemu-img info gluster+tcp://192.168.0.2/volume_name/soubor.img 


VDI虚拟磁盘只能通过Sheepdog API进行标识:
 root@stroj~# qemu-img info sheepdog:192.168.0.2:8000:vdi_name 


对于从NBD服务器导出的虚拟磁盘,有必要确保指定了正确的服务器和正确的端口,因为NBD不会使用任何其他标识或身份验证机制来消除与其他虚拟磁盘的混淆(新版本的nbd-server使用仅一个端口,并通过名称标识设备-大约每个)
 root@stroj~# qemu-img info nbd:192.168.0.2:8000 


192.168.0.2
虚拟设备所连接的主机的IP地址。 如果这是与运行qemu-img信息的主机相同的主机,则可以使用localhost代替IP地址

8000
守护程序或服务器正在侦听的端口号。 默认情况下,Sheepdog使用端口7000,但也可以在其他端口上运行以避免与另一个应用程序冲突。 如果导出多个设备,则NBD服务器可以在不同的端口上侦听。

生的
通常,它只是一组以与常规块设备相同的格式记录的数据。 5G文件将占据整个位置,无论它包含有用的数据还是只是空白空间。 (不适用于稀疏文件-大约为per)



它与原始格式的不同之处在于它可以递增,因为它会逐渐增长-这对于不支持稀疏文件的文件系统(例如FAT32)非常方便。 此格式还允许您从单个基本磁盘创建单独的增量副本。 使用这样的“模板”可以节省时间和磁盘空间。 此外,它支持AES加密和zlib压缩。 缺点是,与原始磁盘不同,此类文件无法直接安装在其所在的计算机上。 幸运的是,有一个qemu-nbd实用程序可以将该文件导出为网络阻止设备,然后将其连接到NBD设备。


qcow2
是qcow格式的更新版本。 主要区别在于它支持快照。 否则,它们没有根本不同。 也可以满足内部定义为QCOW版本3的qcow2,该版本曾经包含在qcow2格式中。 实际上,这是带有lazy_refcounts参数的修改后的qcow2,用于快照。 由于差异只有一位,因此1.7版的qemu-img具有“修改”选项以进行更改。 早期版本的qemu-img没有。 如果要更改格式的版本,则有必要将虚拟磁盘转换为新文件,在转换过程中,compat参数与compat参数一起安装,为此必须将“ 1.1”减小为0.10”。 使用“修改”选项很方便,因为这样的微小更改无需覆盖数据。


 qemu-img create -f qcow2 -o compat=1.1 test.qcow2 8G 

http://blog.wikichoon.com/2014/12/virt-manager-10-creates-qcow2-images.html


ed
这是虚拟磁盘的增量COW格式,可在主机上产生最少的负载。 它不支持任何压缩,并使用两个并行表来寻址数据块(群集)。 不幸的是,长期以来没有一个开发人员对它的开发感兴趣,因此使用它会带来一些问题。


vdi
Oracle Virtualbox虚拟化系统使用的虚拟磁盘格式。


vmdk
VMware产品使用的虚拟磁盘格式。 这也是一种允许文件逐渐增长的格式。 但是,与qcow2和qed格式相比,它具有很大的优势,后者也可以与无盘解决方案或网络文件系统一起使用。 它允许您将虚拟磁盘文件分为几个小文件,大小为2 GB。 从文件系统无法创建大于2 GB的文件时起一直存在。 好处是,如果通过网络复制了这样的虚拟磁盘,则传输的数据更少,并且同步速度要快得多(例如,对于GlusterFS)。 在无盘解决方案的情况下,它也仅用于存储每个快照不同的小文件


vhdx
Microsoft Hyper-V虚拟化系统使用的虚拟磁盘格式


虚拟个人电脑
Microsoft VirtualPC虚拟化系统使用的虚拟磁盘格式。


增量式
薄荷
扎根

密码
革新
通讯
压力
这个
前期
位置
沙布尔
奥尼兹
民族
道具
黄鼠狼
部分
图片
里面
快照

验证同意
诺斯蒂
注意事项
生的没有啦没有啦没有啦是的没有啦没有啦没有啦没有啦没有啦可通过回路安装
档案是的没有啦没有啦选项
亲自
没有啦没有啦没有啦没有啦没有啦对于Btrfs,您应禁用写时复制
是的是的是的没有啦是的是的没有啦没有啦没有啦
qcow2是的是的是的选项
亲自
是的是的没有啦是的是的
ed是的没有啦没有啦没有啦是的没有啦没有啦没有啦没有啦
vmdk是的没有啦没有啦选项
亲自
是的??是的没有啦没有啦
vdi是的没有啦没有啦选项
静态(静态)
没有啦没有啦没有啦没有啦是的
vhdx是的没有啦没有啦选项
固定(固定)
没有啦是的 1个没有啦没有啦没有啦
虚拟个人电脑是的没有啦没有啦选项
固定(固定)
没有啦没有啦没有啦没有啦没有啦

  1. 只能在预安装的映像上使用(固定)

使用的API


除文件格式外, qemu-img还可以使用通过API提供的“格式”,通过这些API可以远程访问这些块设备。


nfs
通过NFS协议连接到QEMU的虚拟磁盘文件


伊西
通过iSCSI与块设备进行通信。 一台设备不能同时在多个客户端上使用。


nbd
通过NBD的访问可能非常快。 这是因为该协议非常简单。 这是优点,但同时也是缺点。 如果多个客户端可以通过xnbd服务器使用本地连接,则它们可以方便地连接到同一NBD服务器。 但是,由于nbd不具有安全性或身份验证机制,因此当客户端意外连接到错误的设备时,很容易出现这种情况,该设备在给定的时间可能已经被使用并损坏了它。


ssh
通过sshfs连接到远程服务器


糊状
使用GlusterFS文件系统API访问虚拟磁盘文件。 如果文件是复制卷或分布式卷的一部分,它将在其他节点之间分配存储的数据。 如果发生故障,这使他可以在其他节点上使用。


牧羊犬
也是支持复制的分布式文件系统。 与GlusterFS不同,通过API的虚拟磁盘不是作为文件而是作为块设备可用。 就性能而言,这是有益的,但是如果我们需要超越Sheepdog环境,那么这是不利的。


并列


网络附加存储上的虚拟驱动器


位于虚拟化系统外部的块设备的优势在于,它们不受虚拟机故障的影响。


在这种情况下,还提供了高可用性和足够的远程存储空间。


使用NFS


牧羊犬


GlusterFS


无块虚拟机


没有块设备,可以通过NFS引导或使用Plan9抛出主机文件系统的操作系统都可以工作。

Source: https://habr.com/ru/post/zh-CN412825/


All Articles