问题:可以把阿里云ECS整个系统包括数据导入到本地的VMware中运行吗?
答案是可以!特别是系统中包含大量数据且迁移非常耗时的时候,采用这一方案可以大大缩短系统迁移时间,而且迁移后运行起来还跟线上一模一样!
我用的ECS操作系统版本是CentOS 7.9,主要参考的这一篇 https://blog.csdn.net/mdzz14/article/details/113755963
整体步骤
- ECS打镜像导出后本地后创建虚拟机;
- 先保证虚拟机在恢复模式下能正常运行;
- 禁用多余的服务和内核,开机时则无需选择启动菜单。
镜像导出及VMware虚拟机创建
- 对ECS服务器创建镜像;
- 导出镜像,选择导出到OSS,格式一般是raw;
- 从OSS下载镜像,文件格式为tar.gz,因为是压缩过的所以小于磁盘大小,需要解压出来,解压出来的文件大小跟磁盘大小一致;
- 使用
qemu-img
命令进行格式转换,转成VMware所用的vmdk格式,需要先安装qemu
qemu-img convert -f raw -O vmdk {源文件地址} {目标文件地址}
- VMware中创建自定义虚拟机,前几步直接下一步即可,选择磁盘的时候要特别注意下,选第二个,即使用现有的磁盘。
- 启动虚拟机,在启动菜单中使用上下键选择(一定要快),选择最后一个带rescue的。先按
e
进入编辑页面,删除linux16开头的那一行里的net.ifnames=0 console=tty0 console=ttys0.115200n8 noibrs
,不然启动可能会比较慢。 - 启动过程中
alt + 空格
或win + 空格
进入verbose模式,可以通过日志查看启动过程中的问题,比如我就遇到有个cloud-init
的服务一直在请求一直在超时,耗时将近25分钟才进入系统,还以为启动不起来了呢!所以就需要在进入系统后把它禁掉,通过systemctl disable cloud-init
不管用,得这么做:touch /etc/cloud/cloud-init.disabled
还有可能会遇到 SMBus Host Controller not enabled! 的问题,这个错误也会影响系统启动,需要在原系统中创建blacklist.conf并重新打包(打包完后记得把文件删了以免影响正常启动),或者在新系统启动完成后创建。步骤
- 查看i2c模块
lsmod | grep i2c
,输出类似如下
i2c_piix4 22401 0
那 i2c_piix4就是要加的黑名单。
- 编辑
/etc/modprobe.d/blacklist.conf
,这个文件可能原本就不存在,内容如下
blacklist i2c_piix4
- 保存退出。
如果是在ECS上执行的这步操作,那需要重新打包、导出镜像等一系列操作。
到这里虚拟机就能正常使用了,只是每次启动时还需要手动选择启动项,有点麻烦,也不合适自动化运维,所以还需要做一步配置,一劳永逸。
开机自动选择最后一项
进入系统后,先查看当前安装的内核版本
rpm -qa|grep kernel
再查看当前使用的内核版本
uname -a
把不用的都给删了,如
yum -y remove kernel-3.10.xxxx
修复
dracut -f
修复完成后重启就可以了,再开机时无需再手动选择最后一项。
Ubuntu系统可参考 https://www.jianshu.com/p/473cfbefb08d ,未实际测试,看上去应该可以。