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平台,经过将近一年的运行,一切正常。