一、准备工作
准备工作 1:禁用 Cloud-init 相关服务
通过 Service 管理服务,禁用方法如下
1. 查看 Cloud-init 相关服务
代码语言:javascript复制chkconfig | grep "cloud"
显示如下
如 centos6.7 这样的老系统,是使用 service 管理服务的。而较新版本的系统,很多采用 systemctl 管理服务。
如果执行时有如下提示,可以使用往下看 systemctl 对应的方法。
代码语言:javascript复制chkconfig: command not found
2. 禁用服务,需管理员权限
代码语言:javascript复制chkconfig cloud-config off
chkconfig cloud-final off
chkconfig cloud-init off
chkconfig cloud-init-local off
3. 在做完快照或镜像后,再把服务启用。如果服务没有启用,修改密码、网络变配等能力无法生效。
代码语言:javascript复制chkconfig cloud-config on
chkconfig cloud-final on
chkconfig cloud-init on
chkconfig cloud-init-local on
通过 systemctl 管理服务,禁用方法如下
1. 查看 cloud 服务
代码语言:javascript复制systemctl list-unit-files | grep "cloud"
如 centos6.7 这样的老系统是使用 service 管理服务。
如果执行时有如下提示,可以翻到前面查看使用 service 禁用服务的方法
代码语言:javascript复制-bash: systemctl: command not found
2. 禁用服务,需管理员权限
代码语言:javascript复制systemctl disable cloud-config cloud-final cloud-init cloud-init-local
3. 在做完快照或镜像后,再把服务启用。如果服务没有启用,修改密码、网络变配等能力无法生效。
代码语言:javascript复制systemctl enable cloud-config cloud-final cloud-init cloud-init-local
准备工作 2:修改系统配置
修改 fstab 配置
查看 fstab 配置
代码语言:javascript复制cat /etc/fstab
如果用 UUID 的配置,则不用修改,可以往下看网络配置的部分。
否则就需要修改为如下样式,UUID可以用 lsblk -f 查看。
修改网络配置
centos:修改 /etc/sysconfig/network-scripts/ifcfg-eth0 文件,删除或者注释掉HWADDR一行
准备工作 3:配置磁盘驱动
检查驱动
用如下命令检查驱动,如果检查结果是 y 则不用再处理,可以到准备工作 4。
代码语言:javascript复制grep -e CONFIG_BLK_DEV_SD -e CONFIG_FUSION_SPI /boot/config-`uname -r`
如果结果是 m 则可能需要手工配置。
再用下面命令进一步检查
代码语言:javascript复制# Centos 或 RadHat 用如下命令
lsinitrd | grep -e sd_mod -e mptspi
# ubuntu 用如下命令
lsinitramfs /boot/initrd.img-$(uname -r) | grep -e sd_mod -e mptspi
如果两个驱动都包含就没问题
如果没有或者只有一个,则需要进一步配置驱动
代码语言:javascript复制# Centos 或 RadHat 用如下命令
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
mkinitrd -f --allow-missing --with=sd_mod --with=crc_t10dif --with=mptspi --with=mptscsih --with=mptbase --with=scsi_transport_spi /boot/initramfs-$(uname -r).img $(uname -r)
# ubuntu 用如下命令
mv /boot/initrd.img-$(uname -r) /boot/initrd.img-$(uname -r).bak
echo -e 'sd_modnmptspi' >> /etc/initramfs-tools/modules
mkinitramfs -o /boot/initrd.img-$(uname -r)
准备工作 4:准备对象存储空间
创建对象存储空间
- 开通对象存储服务。
- 创建存储桶,与要导出镜像是同一账号,并且与导出镜像的环境在同一个可用区。
二、导出镜像
导出步骤 1:CVM 实例生成镜像
CDC 环境生成自定义镜像
- 腾讯云控制台,云服务器模块中,找到云硬盘菜单。
- 找到要导出的虚拟机对应的云硬盘,创建快照。
- 在 快照=》快照列表 这个页面下查看快照进度。
- 快照创建好,在列表右侧更多菜单中选择创建自定义镜像。(创建好快照后,记得把 Cloud-init 服务重新启用)
- 在 镜像 菜单中查看镜像进度。
公有云环境生成自定义镜像
- 腾讯云控制台,服务器云模块中,找到实例菜单。
- 在虚拟机列表中找到要导出的虚拟机,在右侧的更多中,找到【制作镜像】这个功能。
- 把虚拟机做成自定义镜像。制作完成后,在镜像菜单,自定义镜像中可以看到。(创建好镜像后,记得把 Cloud-init 服务重新启用)
导出步骤 2:导出自定义镜像
导出镜像
- 腾讯云控制台,服务器云模块中,找到镜像菜单,自定义镜像页。
- 在导出的镜像右侧选择【导出镜像】这个功能。
- 设置存储桶(页面中显示为 COS Bucket)和导出文件的前缀名字。(如果没有合适的存储桶,请检查同一账号、同一可用区是否已经创建了存储桶,参考 准备工作 2。)
- 导出成功后,在对象存储中可以看到这个文件。
下载镜像
在存储桶中查看导出的镜像文件。如果之前已经设置过公有读私有写,可以使用文件地址直接下载。如果是私有读写,那就只能通过文件列表右侧的下载按钮进行下载。
自定义镜像导出文件比较大,建议通过下载工具下载。
三、导入镜像
导入步骤 1:转换镜像格式
RAW to VMDK
- 安装 qemu-img,地址(https://www.qemu.org/download/#source)。根据操作系统不同,这里有 windows、linux、mac 对应的版本。
- 转换镜像
windows执行:
代码语言:javascript复制"C:Program Filesqemuqemu-img" convert -f raw -O vmdk centos7.9-export.raw centos7.9-export-tcloud.vmdk
mac 执行
代码语言:javascript复制qemu-img convert -f raw -O vmdk centos7.9-export.raw centos7.9-export-tcloud.vmdk
注:
- "C:Program Filesqemuqemu-img"为windows 下 qemu 程序的安装地址
- -f raw,表示原文件是 raw 格式
- -O vmdk,表示要转换成 vmdk 格式,其中-O 是大写字母 O不是数字 0。
普通 VMDK to ESXi 的 VMDK
通过 qemu-imq 转换的 VMDK,在 vmware workstation 中已经可以使用。但是在 vmware ESXi 中无法使用,需要再转换一次。
1. 打开 esxi 的 ssh 和 shell 服务。
2. vmdk 文件导入到 esxi 的存储中。
3. 远程到 exsi 上,找到导入的 vmdk 文件,使用 vmkfstools 转换 vmdk 格式。
代码语言:javascript复制vmkfstools -i 不兼容原文件.vmdk 转换后的新文件名.vmdk
导入步骤 2:创建虚拟机
vmware Playstation 新建虚拟机
- 新建虚拟机,选择“自定义(高级)”。
- 操作系统那一步选择“稍后安装操作系统”。
- 【关键】选择磁盘那一步,选择“使用现有虚拟磁盘”。
- 选择刚才用 raw 转换的 vmdk 文件,生成虚拟机即可。
vmware esxi 新建虚拟机
- 新建虚拟机,默认的硬盘删掉,再选择“添加硬盘”,选项中选择“现有硬盘”,选择刚才通过 vmkfstools 转换的 vmdk 文件。
- SCSI 控制器选择 LSI Logic Parallel 。其他两个控制器的话,硬盘无法识别。
- 其他选项正常选择即可。
四、其他说明
哪些地方可以加速
下载镜像加速
导出的镜像是RAW格式,文件大小受虚拟机的硬盘大小决定,实际数据可能很小。例如云硬盘是50GB,而实际只占用了不到10GB,那么剩下的40GB就是无效的下载数据。这不仅会让下载时间长,而且会产生无效的下载流量费用。
可以在腾讯云内申请一个普通配置的windows虚拟机,装上qemu。把导出的镜像下载到这台虚拟机上转换为vmdk再下载。一方面腾讯云的虚拟机与对象存储之间属于内网连接,下载速度快、无下载流量费用。另一方面转换后的文件小很多,再下载到vmware所在环境时,时间会短很多。