5

最近由于服务器需要搬家,所以要把服务器上的一些虚拟机做迁移,以避免产生过长时间的服务中断。

在迁移过程中的大户是gitlab,由于在起初进行配置时,我为其配置了一块200G的超大硬盘,所以如何转移这个200G的大家伙,便成了当下要解决的问题之一。同时,gitlab还通过nfs进行了额外的挂载,所以同时还要解决nfs挂载分区的文件迁移过程。

文件压缩

不进行文件压缩进行迁移是非常费劲的,由于文件过大,所以在下载、上传的过程中对网络的要求都不低。同时,下载文件的时间过程,这要求计算机在下载的过程还不能够有休眠等操作。总之来回折腾后得出的结论就是:必须要进行压缩。

在压缩工具方面,需要指出的是:vmware esxi(6.7)支持targzip进行文件压缩,但不要尝试使用zip进行压缩。这是由于:1. esxi默认并没有安装zip 2. esxi虽然安装了unzip,但其仅支持4G以下的文件。

源exsi

停止虚拟机

首先我们需要停止虚拟机,如果该虚拟机有快照的情况下,同时建议删除虚拟机快照,虽然并不清楚不删除快照实际上会带来什么问题,但删除快照绝对不会带来问题。

ssh登录

首先开启esxi的ssh登录,然后使用与exsi同网段的机器,并为了防止在操作大文件时发生ssh自动断联的问题,修改本地的 ~/.ssh/config如下:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 5

这将告诉 SSH 客户端每 60 秒向服务器发送一个保持活跃的信号,并在连续 5 次没有收到响应时断开连接。

接着通过ssh连接到esxi服务器。

这个过程,也是可以进行远程操作的,比如我们创建一个虚拟机,然后把这个虚拟机的网卡的所在网络选成VM NETWORK,这时候便可以远程该虚拟机,然后在虚拟机中连接exsi了。

使用ssh连接到esxi后,找到当前要迁移的虚拟机的所在位置,比如我当前要迁移为虚拟所在存储位置于:ssd/8-ubuntu-gitlab,则应该先进入exsi中的/vmfs/volumes,然后接着进行该文件夹下的ssd/8-ubuntu-gitlab子文件夹。

此时使用ls命令,便可以看到要进行迁移的文件了。

压缩flat文件

虽然虚拟机的存储文件众多,但在进行迁移时,只需要迁移以.vmdk.vmx文件即可,其中.vmdk有两个文件组成,其中小文件保存的是配置,而大文件则保存的是主体的数据。大文件会以-flat.vmdk结尾;而vmx文件则是保存的虚拟机的相关配置,比如虚拟机配置了几个核心,多少内存等。

而在进行压缩时,我们仅仅需要压缩-flat.vmdk文件即可。

# gzip -k xxxx-flat.vmdk
注意:这里-k参数保证了在压缩成功后不删除原文件 xxxx-flat.vmdk

下载文件

下载就变得简单了,可以直接来到目标主机所在网络的任意主机中,使用web的方式进行下载,也可以在目标主机所在网段的机器中用sftp进行下载。下载:xxx.vmdkxxxx-flat.vmdk.gzxxx.vmx即可。

目标esxi

ssh登录

与源esxi类似,样我们需要开启ssh登录,并且找到一个可以访问到esxi的主机,然后在这个主机上设置ssh的心跳时间(这很重要!)。

修改本地的 ~/.ssh/config如下:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 5

上传文件

找到一个足够大的存储,然后将下载的.gz文件通过sftp的形式上传到esxi中,其它的小文件则可以通过web端直接完成上传操作。

需要注意的是,这些文件需要上传到同一个文件夹中。

解压文件

通过ssh登录后,执行gunzip xxx.gz即可完成解压操作,这个过程取决于cpu及磁盘的io性能。只要不报错,耐心等待即可。

注册虚拟机

最后在目标esxi中注册该虚拟机,在出对话框时,推荐选择I copy it(复制),然后由于虚拟机的网络发生了变化,所以将原来的网络删除了,然后再添加一个新的适用的网络即可。

祝顺利。


潘杰
3.1k 声望239 粉丝