raw格式镜像导入Xen

2017-08-24  本文已影响315人  分享放大价值

导读

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

1. qemu-kvm disk format

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

稀疏格式:通常创建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>创建一个新的镜像文件<new_image>
        # 转换之后,就会发现qcow2_image实际大小与虚拟机内部df -h大小相近
        $ qemu-img convert -f qcow2 <qcow2_image> <new_image>
    
  2. raw格式的镜像文件在传输时要特别注意,否则会导致空洞被填满,直接导致文件逼近raw的原始大小。不管是本地拷贝还是向远程主机传输,对推荐使用rsync,可以保留raw的稀疏特性

        # 将<raw_image>传输到本地<path>或<host>的<path>
        rsync -av --sparse --progress <raw_image> <host>:<path>
    

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的内容拷贝到第一块盘中

        # 等待一段时间,取决于<raw_image>大小
        $ dd if=<raw_image> 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
上一篇 下一篇

猜你喜欢

热点阅读