OpenStack迁移到KVM

之前遇到一个问题,我们有台OpenStack的机器,上面跑了好多实例,后来机器挂掉了,想把其中的某个实例的数据恢复出来。 我的想法是,既然底层用的都是KVM,那么把实例镜像文件拷贝到任何一台KVM机器上,就可以将数据恢复出来

首先找到实例对应的数据文件,文件包括disk文件以及_base目录下对应的文件
  • 拷贝 /var/lib/nova/instances/dcc11116-8b8b-4277-8517-bc186b9baaa2 到目标机器

  • 拷贝_base目录下的对应目录到目标机器

# qemu-img info /var/lib/nova/instances/dcc11116-8b8b-4277-8517-bc186b9baaa2/disk
image: /var/lib/nova/instances/dcc11116-8b8b-4277-8517-bc186b9baaa2/disk  
file format: qcow2  
virtual size: 80G (85899345920 bytes)  
disk size: 79G  
cluster_size: 65536  
backing file: /var/lib/nova/instances/_base/5a764d70be5c1cb6105ee0405ea66c4e8a5ea21c  
找一台kvm虚拟机添加硬盘
<disk type='file' device='disk'>  
      <driver name='qemu' type='qcow2' cache='none'/>
      <source file='/data2/vm-images/track_img/disk'/>
      <target dev='vdb' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>

同时需要把之前的base目录文件放到相应位置 不然会提示

2015-07-09 09:16:06.751+0000: 2238: error : virFindBackingFile:528 : Can't canonicalize path '/var/lib/nova/instances/_base/5a764d70be5c1cb6105ee0405ea66c4e8a5ea21c': No such file or directory  
2015-07-09 09:16:06.751+0000: 2238: warning : virStorageFileGetMetadataInternal:782 : Backing file '/var/lib/nova/instances/_base/5a764d70be5c1cb6105ee0405ea66c4e8a5ea21c' of image '/data2/vm-images/track_img/disk' is missing.  
201  

剩下的事情就很简单了,启动kvm虚拟机就可以进到机器里面了。