范围
本次测试覆盖 CentOS 6.7、7.2、7.4、7.6、7.9 版本
准备
- 账号切换到 管理员权限,包括使用 root 账号。
- 开通对象存储服务,创建存储桶。存储桶所在可用区与要镜像要导入的可用区一致,存储桶权限设置为 公有读私有写。(在创建存储桶的界面可以选择权限。如果但是没有设置,可以进入存储桶的详情页面中,在左侧找到 权限管理 -> 存储桶访问权限 的页面进行设置。)
1. 检查 Virtio 驱动
1.1. 检查是否支持 Virtio
代码语言:javascript复制grep -i virtio /boot/config-$(uname -r)
- 如果在返回结果中
CONFIG_VIRTIO_BLK
参数和CONFIG_VIRTIO_NET
参数取值为y
,表示该操作系统包含了 Virtio 驱动,检查通过。 - 如果返回结果中
CONFIG_VIRTIO_BLK
参数和CONFIG_VIRTIO_NET
参数取值为m
,请继续往下执行。 - 如果在返回结果中没有
CONFIG_VIRTIO_BLK
参数和CONFIG_VIRTIO_NET
参数的信息,需要下载和编译内核,相关指导见https://cloud.tencent.com/document/product/213/9929#DownloadCompileKernel。
本次验证的几个系统,参数值都显示 m ,继续往下执行。
1.2. 检查临时文件系统是否包含 Virtio 驱动
CentOS 6、7 的系统执行如下命令
代码语言:javascript复制lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
- 6.7、7.9 版本中查看,
initramfs
已经包含了virtio_blk
驱动,以及其所依赖的virtio.ko
、virtio_pci.ko
和virtio_ring.ko
,检查通过。 - 7.2~7.6 版本中查询结果都为空,需要继续往下执行。
1.3. 重新配置临时文件系统
CentOS 6、7 的系统执行如下命令
代码语言:javascript复制mkinitrd -f --allow-missing --with=xen-blkfront --preload=xen-blkfront --with=virtio_blk --preload=virtio_blk --with=virtio_pci --preload=virtio_pci --with=virtio_console --preload=virtio_console /boot/initramfs-$(uname -r).img $(uname -r)
执行后再重新执行步骤1.2,可以看到驱动和依赖都有了,检查通过。
2. 安装 cloud-init(7.2~7.9 版本)
2.1. 使用软件源安装 cloud-init
代码语言:javascript复制yum install cloud-init
2.2. 修改 cloud-init 配置文件
代码语言:txt复制# 进 /etc/cloud 目录,备份原来的 cloud.cfg 文件
cd /etc/cloud
mv cloud.cfg cloud.cfg.bak
# 下载腾讯云对应的 cloud.cfg 文件
wget https://cloudinit-1251783334.cos.ap-guangzhou.myzijiebao.com/centos/cloud.cfg
2.3. 检查 cloud-init 配置
代码语言:javascript复制# 检查配置是否成功
cloud-init init --local
显示类似于如下信息表示已经成功。
Cloud-init v. 19.4 running 'init-local' at Sun, 09 Oct 2022 14:51:20 0000. Up 144.72 seconds.99
2.4. 删除 cloudinit 的缓存记录
代码语言:javascript复制rm -rf /var/lib/cloud
执行后关机,不要再启动,否则该操作需要再次执行。
2. 安装 cloud-init(6.7 版本)
centos6.7 版本通过 yum 源安装的 cloud-init 版本低,虽然可以正常导入,但是生成的虚拟机无法获取网络配置。因此需要用腾讯云提供的绿色版进行安装。
代码语言:javascript复制# 下载 cloud-init 安装包
wget https://image-tools-1251783334.cos.ap-guangzhou.myzijiebao.com/greeninit-x64-beta.tgz
# 解压缩
tar xvf greeninit-x64-beta.tgz
# 进入 cloud-init 目录
cd greeninit
# 安装 cloud-init
sh install.sh
安装成功后不要执行其他操作,关机。
如果安装后执行了 cloud-init 命令,需要执行以下命令清理缓存。
代码语言:javascript复制rm -rf /var/lib/cloud
3. 导入镜像
3.1. 上传镜像
将 CentOS 系统对应的 vmdk 镜像文件上传到存储桶中。如果虚拟机的硬盘文件拆分成了多个 vmdk,需要先做合并。
3.2. 导入镜像
- 在腾讯云控制台,云服务器模块中,找到 镜像 菜单,切换到自定义镜像页面。
- 点击 导入镜像 按钮,导入镜像系统选择 linux ,勾选 我已做好准备 ,点击 下一步。
- 按照页面内容填写,注意地域选择要使用的可用区。操作系统类型、版本与实际一致,导入方式并选择 正常导入 。
- 点击下一步,点击开始导入,等待导入结果。
4. 验证
验证内容:
- 使用自定义镜像创建虚拟机,重装系统都成功。
- 新建的虚拟机时设置的密码有效。
- 虚拟机能正确的获取到 IP 地址。
验证结果:
- centos7.2、7.4、7.6、7.9 版本均验证正常。
- centos6.7 版本初次登录密码没有修改,需要再执行一次“rm -rf /var/lib/cloud”并重启才能生效。
5. Q&A
5.1. 如果没有安装cloud-init会怎么样
如果没有安装cloud-init,无法进行初始化。最直观的问题是无法修改密码、无法配置IP。
可以在迁移前,在 /etc/sysconfig/network-scripts/ 文件夹中创建配置文件 ifcfg-eth0,输入一下内容
代码语言:javascript复制BOOTPROTO=dhcp #自动获取 IP 地址
DEVICE=eth0 # 填写需配置的弹性网卡名
ONBOOT=yes
PERSISTENT_DHCLIENT=yes
TYPE=Ethernet
USERCTL=no