如何将本地Ubuntu Server 20.04 VM上传至Google Cloud并保留配置?
问题诊断与修复方案
一、你操作踩的坑
1. OVA导入的问题
- 导出OVA时虚拟机没完全关机:VirtualBox如果导出的是运行/休眠状态的VM,生成的OVA只会包含快照而非完整系统状态,导入GCP后自然是空的。
- GCP自动覆盖了系统配置:GCP导入自定义镜像后会强制注入
cloud-init,重置SSH密钥、用户账户甚至网络设置,直接冲掉了你本地的配置。 - 格式转换不彻底:VirtualBox的VDI转OVA时,可能没正确转换成GCP支持的raw格式,导致磁盘内容没被正确识别。
2. 磁盘导入的问题
- 导错了磁盘:你可能把虚拟机的数据盘当成系统盘导入了,GCP启动时找不到根分区,就自动加载了默认临时系统。
- 分区引导没适配:本地Ubuntu的GRUB是针对VirtualBox硬件做的,导入GCP后没适配NVMe磁盘、GCP虚拟网卡,启动失败后系统自动初始化。
- 没清理本地残留:本地的cloud-init配置或VirtualBox工具没删,导致导入后系统冲突,触发重置。
二、正确的迁移步骤(Ubuntu Server 20.04专属)
1. 本地VM先做预处理
- 彻底关机Ubuntu VM(别休眠/挂起),确保所有文件都写入磁盘。
- 删掉VirtualBox专属工具:
sudo apt remove --purge virtualbox-guest-* - 重置网络配置:删掉
/etc/netplan/*.yaml里的静态IP,换成GCP兼容的DHCP配置:network: ethernets: ens4: dhcp4: true version: 2 - 清空旧SSH密钥:删掉
/root/.ssh/authorized_keys和你用户目录下的同文件,避免和GCP注入的密钥冲突。 - 清理cloud-init残留:
sudo cloud-init clean
2. 导出磁盘并上传到GCP
- 把VDI转成raw格式(GCP认这个):
VBoxManage clonehd /你的虚拟机路径/xxx.vdi /导出路径/ubuntu-disk.raw --format raw - 上传到GCP云存储:
gsutil cp /导出路径/ubuntu-disk.raw gs://你的存储桶名/ubuntu-disk.raw - 创建自定义镜像:
gcloud compute images create ubuntu-imported --source-uri gs://你的存储桶名/ubuntu-disk.raw --os-family ubuntu --os-version 20.04
3. 创建云VM并验证
- 用刚创建的
ubuntu-imported镜像开VM,记得开SSH、HTTP/HTTPS的防火墙规则。 - 登录后先查
/var/www/html(WordPress目录)、数据库文件是不是都在,再启动Apache/Nginx服务:sudo systemctl start apache2 - 测试远程SSH和WordPress访问,没问题就搞定了。
三、核心注意点
- 一定要导系统盘,别把数据盘当成系统盘上传。
- GCP不认VDI格式,必须转成raw或qcow2。
- 预处理阶段一定要删VirtualBox工具和旧配置,不然到GCP会出各种兼容问题。
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

