raw格式镜像导入Xen


导读

1. qemu-kvm disk format
  • raw
  • qcow2
  • tips
2. import raw disk from qemu-kvm to Xen

1. qemu-kvm disk format

在qemu-kvm环境中,rawqcow2格式是最常见的选择。

  • raw镜像格式是原始镜像格式,直接当作一个块设备给虚拟机使用。在使用qemu-img创建时指定raw格式来预先分配磁盘大小,也支持一定程度的扩容。对于ext4系统,会自动生成稀疏的raw格式,磁盘占用得到优化
  • qcow2镜像格式是由cowqcow演进而来的镜像格式,与raw相比,它占用更少的空间,支持写时拷贝,而且支持快照

稀疏格式:通常创建raw格式的磁盘文件时会指定大小,如10G。此时用ls查看会显示文件为10G,但使用du -s查看会发现文件并不占用硬盘空间。具有这种特点的文件就是稀疏文件格式

raw
  1. raw格式是所有qemu-kvm支持的镜像格式中IO效率最高的格式,而且与其他格式相比可以认为是“无格式”。这种特点使得raw格式的虚拟机非常适合从一个虚拟化平台迁移到另一个虚拟化平台,如从qemu-kvm迁移到xen。
  2. raw格式有两个比较大的弊端:
    • 一个问题是不支持快照。这个问题可以通过使用LVM来解决

    • 另一个问题是raw格式通常比较大。如果需要迁移的raw格式超过10G,此时网络IO以及dd的时延就比较难以接受,建议考虑其他办法。反之,如果raw格式分配空间使用率很低时,如分配了40G仅仅使用5G。这时使用raw来迁移虚拟机就比较合适。

      注意 因为事先分配给raw的空间可能很大,用ls看起来也很大,但实际上并不占用太多的磁盘空间。正是可以利用这个特性,能让我们尽可能的减少网络IO的延迟。但是,如果使用tarscp等命令传输raw会导致稀疏格式的空洞被自动填充,直接导致raw镜像文件过大

qcow2
  1. qcow2是qemu-kvm中主流的一种格式,IO速率比raw差一点,但是支持快照,而且磁盘占用比较小
  2. qcow2还支持zlib的磁盘压缩,AES的加密等
tips
  1. qcow2格式的虚拟机中如果存在大量的IO,也会导致qcow2磁盘实际占用空间远比虚拟机磁盘占用空间大的情况。此时可以用dd将虚拟机内部剩余空间用全0的块文件填满,然后删除该文件,最后用qemu-img convert重新转换成新的qcow2文件,此时就会使qcow2文件大小与实际占用保持一致

        # -------------虚拟机内部-----------------
        # 将虚拟机剩余空间用0填满。该操作需要一段时间,长短取决于分配的磁盘大小
        $ dd if=/dev/zero of=/tmp/tmpfile
        # 删除临时文件
        $ rm -f /tmp/tmpfile
        # 关机
        $ shutdown -h now
    
        # --------------宿主机--------------------
        # 根据原有虚拟机镜像文件创建一个新的镜像文件
        # 转换之后,就会发现qcow2_image实际大小与虚拟机内部df -h大小相近
        $ qemu-img convert -f qcow2  
    
  2. raw格式的镜像文件在传输时要特别注意,否则会导致空洞被填满,直接导致文件逼近raw的原始大小。不管是本地拷贝还是向远程主机传输,对推荐使用rsync,可以保留raw的稀疏特性

        # 将传输到本地
        rsync -av --sparse --progress  :
    

2. import raw disk from qemu-kvm to Xen

  1. 首先,想尽一切办法做一个很小的raw格式虚拟机。这里需要注意的是,不建议使用qcow2raw,会导致raw文件的大小直逼虚拟机磁盘大小

  2. 使用rsyncraw磁盘传输到Xen平台上一个可用的虚拟机中

  3. 关机,并克隆虚拟机的主硬盘,然后将克隆盘也挂载到虚拟机上

  4. 重启,修改bootloader,使得虚拟机下一次从第二块盘启动

        # 以grub2为例
        menuentry '...' ... {
            # 假设root分区位于第2分区,两块盘卷标分别为xvda和xvdb,则只需做如下修改
            # linux /vmlinuz... root=/dev/xvda2 ...
            linux /vmlinuz... root=/dev/xvdb2 ...
            initrd initrd...
        }
    
  5. 重启,此时进入第二块盘的系统。然后使用ddraw的内容拷贝到第一块盘中

        # 等待一段时间,取决于大小
        $ dd if= of=/dev/xvda
    
  6. 拷贝成功之后,简单实验第一块盘的所有分区能否成功挂载。

  7. 正确配置第一块盘的bootloader和initrd。主要是因为qemu-kvm平台的块设备文件卷标一般为vdasda,而Xen平台的块设备清一色都是xvda

  8. 确保第一块盘中的Linux kernel支持Xen平台的PVHVM,也即CONFIG_XEN及相关的内核编译选项已经打开

    注意

    1. 利用现有qcow2制作raw镜像时,一个可行的思路是新创建一块raw磁盘,挂载在原先虚拟机上;然后将原虚拟机磁盘的根目录全盘拷贝到新添加的raw磁盘中。这种办法几乎可以保证raw实际占用大小与虚拟机实际使用的空间相近
    2. raw镜像中虚拟机的kernel, initrd和bootloader非常重要,一定要在迁移Xen平台之前做好适配。这几个引起的问题就是开机时出现Kernel Panic

你可能感兴趣的:(raw格式镜像导入Xen)