华为云国际站个人账号 国际华为云服务器私有镜像制作
国际华为云服务器私有镜像制作:不是复制粘贴,是精密外科手术
别被“制作镜像”四个字骗了——它听起来像给手机截图,实际是给一台漂洋过海的云服务器做全身CT+基因编辑+冷冻保存。你在新加坡Region配好一套完美运行的Java+Redis+Nginx生产环境,想一键复刻到法兰克福或墨西哥城?恭喜,你已踏入华为云国际站镜像世界的灰色地带:文档没写全、控制台藏按钮、CLI报错像谜语、跨Region共享镜像?先烧三炷香再点“复制”。本文不讲理论,只掏真金白银的操作链路,附赠三个我凌晨三点砸键盘后总结的血泪口诀。
第一步:别急着装软件,先给服务器“洗个澡”
镜像不是快照,快照是快照,镜像是镜像——华为云官方文档里这句废话,是无数人翻车的起点。快照只能同Region恢复,而私有镜像可跨Region分发(但有限制!后面撕)。所以,你的源服务器必须是“干净体”:
- 卸载所有临时挂载:检查
mount输出,删掉/dev/sdb这种非系统盘挂载;否则镜像导入后可能卡在启动界面黑屏——因为目标Region根本没有那块磁盘。 - 清空历史命令与敏感日志:执行
history -c && echo '' > /root/.bash_history,顺手rm -f /var/log/secure /var/log/messages*(注意:别删/var/log/audit/audit.log,否则SELinux会暴走)。 - 停掉所有非常驻服务:比如
systemctl stop docker nginx mysql,只留sshd和cloud-init活着。镜像启动时,这些服务该拉起时自然拉起,硬编码开机自启反而导致多Region兼容性崩坏。
记住口诀一:“镜像不记事,启动才认命”——镜像里不该存运行时状态,只存初始化逻辑。
第二步:国际站专属“整容手术”:时区、语言、网络三把刀
国内用户常忽略这点:华为云国际站Region默认时区是UTC,而非CST;语言包默认是en_US.UTF-8,而非zh_CN.UTF-8。你以为改个timedatectl set-timezone Asia/Shanghai就完事?错!镜像导入法兰克福后,系统仍会固执地用UTC,因为cloud-init会在首次启动时重置时区。
解法粗暴有效:
- 编辑
/etc/cloud/cloud.cfg,找到timezone字段,改为timezone: Asia/Shanghai(或你目标Region常用时区); - 执行
localectl set-locale LANG=zh_CN.UTF-8(如需中文),并确保/etc/default/locale同步更新; - 最关键的一步:
sed -i 's//etc/default/grub.*//etc/default/grub/g' /etc/cloud/cloud.cfg.d/99-custom.cfg,再手动追加disable_root: false——否则某些Region的cloud-init会强行禁用root登录,而你根本没配SSH密钥。
网络更魔幻:国际站ECS默认启用cloud-init网络配置,但如果你在镜像里手动写死了/etc/sysconfig/network-scripts/ifcfg-eth0,导入后可能直接失联。正确姿势是:删掉所有静态IP配置,让cloud-init接管,只保留BOOTPROTO=dhcp和ONBOOT=yes。
第三步:GRUB引导——国际站最阴险的坑
在法兰克福Region导出镜像,到墨西哥城导入,启动失败?90%概率是GRUB2配置惹的祸。华为云国际站部分Region(尤其较老的)使用Legacy BIOS启动,而新Region强制UEFI。你的源服务器若用UEFI安装,镜像导入Legacy环境会直接卡在“Loading initial ramdisk…”。
验证方法:ls /sys/firmware/efi/efivars有输出=UEFI,无输出=Legacy。解决方案分两步:
- 统一为UEFI启动(推荐):在源服务器执行
grubby --set-default /boot/vmlinuz-$(uname -r),再grub2-mkconfig -o /boot/grub2/grub.cfg; - 双模式兼容(保命):安装
grub2-efi-x64-modules和grub2-pc-modules,然后grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=centos+grub2-install --target=i386-pc /dev/vda(vda是系统盘)。
口诀二:“UEFI是亲儿子,Legacy是干儿子,镜像得认俩爹”。
第四步:导出镜像——不是点“创建镜像”,是“打包托运”
华为云控制台里那个“制作镜像”按钮,只适用于同Region快照转镜像。国际站跨Region,必须走OBS(对象存储)中转:
- 在源Region创建OBS桶,权限设为“公共读”(仅临时,导出后立刻关);
- 在ECS上安装
qemu-utils:yum install -y qemu-img(CentOS)或apt install -y qemu-utils(Ubuntu); - 华为云国际站个人账号 停机状态下执行:
qemu-img convert -f qcow2 -O raw /dev/vda /tmp/system.img(注意:/dev/vda是系统盘,用lsblk确认); - 压缩上传:
gzip /tmp/system.img && aws s3 cp /tmp/system.img.gz s3://your-bucket-name/image-20240515.img.gz --region ap-southeast-3(华为云OBS支持AWS CLI兼容模式)。
别信“在线导出”——那是营销话术。真实世界里,30GB镜像上传耗时2小时起,建议夜间操作,顺便给自己泡杯咖啡。
第五步:导入镜像——国际站的“海关通关”
目标Region控制台→镜像服务→私有镜像→从OBS导入。此时出现三大拦路虎:
- “OBS文件格式不支持”:因为你传的是.gz,华为云只认.raw/.vhd/.qcow2。解法:上传前不压缩,或用
qemu-img convert -f raw -O vhd /tmp/system.img /tmp/system.vhd; - “架构不匹配”:源Region是x86_64,目标Region选了ARM实例类型?控制台不会报错,但镜像列表里显示“不可用”。务必在导入页面手动选择“x86_64”;
- “导入超时”:OBS桶和ECS不在同一Region?华为云国际站OBS跨Region访问延迟极高。必须确保OBS桶Region与目标ECS Region完全一致(比如都在eu-west-10)。
导入成功后,别急着启动!先检查镜像详情页里的“操作系统类型”是否自动识别为“CentOS 7.9”或“Ubuntu 22.04”——若显示“Other Linux”,说明GRUB或内核模块有问题,启动必跪。
终极避坑口诀:三不三要
三不:
— 不用快照直接转镜像(跨Region无效);
— 不在镜像里写死IP、hostname、SSH密钥(cloud-init会覆盖);
— 不跳过GRUB双模式验证(尤其涉及欧洲→拉美迁移)。
三要:
— 要用qemu-img info system.img确认格式与大小;
— 要在目标Region用最小规格ECS(如t6.small.1)测试镜像启动;
— 要在首次启动后立刻执行cloud-init status --long,看是否完成初始化。
最后说句大实话:华为云国际站镜像机制,本质是“带着镣铐跳舞”。它不开放raw镜像直传,不提供跨Region一键复制,不自动同步cloud-init版本……但正因如此,当你看到法兰克福ECS从你亲手打磨的镜像里亮起SSH登录提示符时,那种掌控感,比喝十杯冰美式还提神。
毕竟,云不是魔法,是代码、耐心和三次重启换来的确定性。


