最近由于服务器需要搬家,所以要把服务器上的一些虚拟机做迁移,以避免产生过长时间的服务中断。
在迁移过程中的大户是gitlab,由于在起初进行配置时,我为其配置了一块200G的超大硬盘,所以如何转移这个200G的大家伙,便成了当下要解决的问题之一。同时,gitlab还通过nfs进行了额外的挂载,所以同时还要解决nfs挂载分区的文件迁移过程。
文件压缩
不进行文件压缩进行迁移是非常费劲的,由于文件过大,所以在下载、上传的过程中对网络的要求都不低。同时,下载文件的时间过程,这要求计算机在下载的过程还不能够有休眠等操作。总之来回折腾后得出的结论就是:必须要进行压缩。
在压缩工具方面,需要指出的是:vmware esxi(6.7)支持tar
及gzip
进行文件压缩,但不要尝试使用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.vmdk
, xxxx-flat.vmdk.gz
,xxx.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(复制)
,然后由于虚拟机的网络发生了变化,所以将原来的网络删除了,然后再添加一个新的适用的网络即可。
祝顺利。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。