0x01 前言
在使用esxi之前我是用KVM作为我的虚拟化平台,在购买R720后更换为esxi。而KVM平台上有些虚拟机需要做迁移,然后就有了这一篇文章。
过程非常简单,只需要几行命令,最后在esxi上创建虚拟机即可。
0x02 准备
首先需要准备好esxi主机;然后在KVM上找到需要迁移的虚拟机的镜像所在的绝对路径;最后需要找到esxi主机上数据存储的绝对路径,这一步需要通过SSH登入esxi主机,通过以下步骤打开esxi主机的SSH服务:
通过浏览器登入esxi主机,在“主机”标签中找到“操作”按钮在“服务”选项中打开SSH服务。
我的KVM和esxi相关路径如下:
KVM镜像路径:/usr/local/kvm/images/centos-t1.img esxi存储路径:/vmfs/volumes/datastore_1/
在这里先在esxi主机里建立一个文件夹,文件夹的名称为虚拟机的名称:
#进入数据存储 [root@server2:~] cd /vmfs/volumes/datastore_1/ #新建文件夹 [root@server2:/vmfs/volumes/52540d02-86fc97d5-c7a2-d8d38597d7aa] mkdir test-1
使用以下命令可以查看KVM虚拟机的信息:
#列出所有虚拟机,包含已关闭电源的虚拟机 [root@kvm-t1 ~]# virsh list --all Id Name State ---------------------------------------------------- - test-1 shut off #查看虚拟机信息 [root@kvm-t1 ~]# virsh dominfo test-1 Id: - Name: test-1 UUID: 12079e65-01e5-4928-a552-7cd57f473185 OS Type: hvm State: shut off CPU(s): 1 Max memory: 524288 KiB Used memory: 524288 KiB Persistent: yes Autostart: disable Managed save: no Security model: none Security DOI: 0
0x03 KVM 镜像
我的虚拟机镜像使用qcow2格式,进入虚拟机配置文件编辑模式:
[root@kvm-t1 ~]# virsh edit test-1
定位到磁盘节点,在type节点中就是磁盘的格式:
... <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/usr/local/kvm/images/centos-t1.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk> ...
在将KVM虚拟机镜像迁移至esxi之前需要先转换格式,先进入虚拟机镜像所在目录:
#进入目录 [root@kvm-t1 ~]# cd /usr/local/kvm/images/ #查看镜像 [root@kvm-t1 images]# ll -h total 2.1G -rw------- 1 root root 11G Sep 1 10:52 centos-t1.img
磁盘的格式需要转换两次,这一次是在KVM主机上进行,转换为vmdk格式。可是这个镜像还不能直接应用在esxi主机中,还需要在esxi主机转换一次。
在KVM主机中使用以下命令将虚拟机镜像进行转换:
qemu-img convert -f qcow2 centos-t1.img -O vmdk centos-t1_temp.vmdk -o compat6
为了防止镜像被拆分为2GB的小块,需要增加compat6的选项。
需要注意的是,转换过程中并不会出现进度条,完成转换后会出现一个新的镜像:
[root@kvm-t1 images]# ll -h total 4.2G -rw------- 1 root root 11G Sep 1 10:52 centos-t1.img -rw-r--r-- 1 root root 2.1G Sep 1 16:19 centos-t1_temp.vmdk
然后将转换后的镜像复制一份到esxi主机中,你可以使用sftp进行复制,也可以将镜像从KVM主机中下载到本地,再通过esxi的web界面上传:
0x04 esxi 镜像
接下来通过SSH登入esxi主机并进入相关目录:
#进入相关目录 [root@server2:~] cd /vmfs/volumes/52540d02-86fc97d5-c7a2-d8d38597d7aa/test-1 #查看镜像信息 [root@server2:/vmfs/volumes/52540d02-86fc97d5-c7a2-d8d38597d7aa/test-1] ls -lh total 2166784 -rw-r--r-- 1 root root 2.1G Sep 1 07:34 centos-t1_temp.vmdk
在esxi主机里,使用vmkfstools命令进行格式转换:
#转换成精简备置的磁盘 [root@server2:/vmfs/volumes/52540d02-86fc97d5-c7a2-d8d38597d7aa/test-1] vmkfstools -i centos-t1_temp.vmdk -d thin centos-t1.vmdk Destination disk format: VMFS thin-provisioned Cloning disk 'centos-t1_temp.vmdk'... Clone: 100% done.
到这里就完成对镜像的操作,如果不需要KVM的镜像,可以将其删除:
[root@server2:/vmfs/volumes/52540d02-86fc97d5-c7a2-d8d38597d7aa/test-1] rm -f centos-t1_temp.vmdk
0x05 虚拟机
完成镜像的操作,我们需要手动建立虚拟机并指定镜像位置。通过正常的虚拟机建立流程建立虚拟机:
在自定义硬件步骤中可以将光驱、软驱和自动添加的磁盘删除,如果不需要SCSI驱动器,也可以一并删除。
然后添加一个新设备,选择“现有磁盘”,并选择上一步转换的磁盘:
完成后后类似这样:
完成后启动虚拟机即可:
0x06 结语
我有好几台KVM虚拟机都使用以上方法迁移至esxi平台,经过将近一年的运行,一切正常。