EC2 Windows 根盘导出为 VMDK 并在 VMware 启动
EC2 Windows 根盘导出为 VMDK 并在 VMware 启动
从 AWS 公有 Windows AMI 启动的 EC2 实例不能直接通过 VM Import/Export 导出为 VMDK,因为包含 AWS 授权软件。替代方案是停机后块级读取 EBS 根卷,用 qemu-img 转换,并离线启用 Windows 通用存储驱动,避免在 VMware 中蓝屏。
VM Export 为什么失败
执行 create-instance-export-task 时可能报:
An error occurred (NotExportable) when calling the CreateInstanceExportTask operation:
The image ID (ami-xxxxxxxx) provided contains AWS-licensed software and is not exportable.这是产品限制,不是 IAM 权限问题。从 AWS 公有 AMI 启动的 Windows / SQL Server / Marketplace 镜像通常不可导出。
替代方案
可选方案:
- 实例能登录:用 Disk2vhd。
- 不想起救援实例:用 coldsnap + qemu-img。
- 可以停机或系统已崩溃:用救援实例块级读取 EBS,再 qemu-img 转换。
本文记录第三种方案。
关键坑:存储控制器驱动
EC2 Windows 通常运行在 NVMe 设备上。导出到 VMware 后,控制器可能变成 LSI Logic SAS、SATA 或 IDE。如果 Windows 注册表中这些驱动没有设置为 Boot 加载,启动时会蓝屏:
UNMOUNTABLE_BOOT_VOLUME所以转换前要离线修改 SYSTEM hive,把常见存储驱动 Start 值设为 0。
操作步骤
1. 停机并摘卷
aws ec2 stop-instances --instance-ids <instance-id>
aws ec2 wait instance-stopped --instance-ids <instance-id>
aws ec2 detach-volume --volume-id <volume-id>
aws ec2 wait volume-available --volume-ids <volume-id>
aws ec2 attach-volume \
--volume-id <volume-id> \
--instance-id <helper-instance-id> \
--device /dev/sdg操作前建议先给卷创建快照。
2. 在救援实例识别磁盘
sudo lsblk -o NAME,SIZE,SERIAL,MOUNTPOINT,FSTYPENitro 实例上 EBS 会显示为 /dev/nvmeXn1,可以通过 SERIAL 对应卷 ID。
3. 挂载工作盘
sudo mkfs.xfs -f /dev/nvme1n1
sudo mkdir -p /mnt/work
sudo mount /dev/nvme1n1 /mnt/work工作盘大小要大于目标卷实际输出大小。
4. 安装工具
sudo dnf install -y qemu-img gcc make perl如果仓库没有 hivex,需要从源码安装,用于编辑 Windows 注册表 hive。
5. 挂载 NTFS 并备份 SYSTEM hive
sudo modprobe ntfs3
sudo mkdir -p /mnt/windows
sudo mount -t ntfs3 -o rw /dev/nvme2n1p1 /mnt/windows
sudo cp /mnt/windows/Windows/System32/config/SYSTEM /mnt/work/SYSTEM_BACKUP
sudo cp /mnt/windows/Windows/System32/config/SYSTEM /tmp/SYSTEM_EDIT6. 启用通用存储驱动
需要把这些服务的 Start 设置为 0:
| 服务 | 用途 |
|---|---|
storahci | SATA AHCI |
intelide | IDE |
pciide | PCI IDE |
LSI_SAS | VMware 常用 SCSI |
iaStorV | Intel 存储虚拟化 |
stornvme | 保持 EC2 NVMe 可启动 |
如果使用 Windows 机器编辑,可以:
reg load HKLM\OFFLINE C:\Temp\SYSTEM
reg add "HKLM\OFFLINE\ControlSet001\Services\LSI_SAS" /v Start /t REG_DWORD /d 0 /f
reg add "HKLM\OFFLINE\ControlSet001\Services\storahci" /v Start /t REG_DWORD /d 0 /f
reg add "HKLM\OFFLINE\ControlSet001\Services\stornvme" /v Start /t REG_DWORD /d 0 /f
reg unload HKLM\OFFLINELinux 上可以用 hivex 完成同样操作。
写回后卸载:
sudo cp /tmp/SYSTEM_EDIT /mnt/windows/Windows/System32/config/SYSTEM
sudo sync
sudo umount /mnt/windows7. 转换为 VMDK
必须输入整块盘,而不是分区:
sudo qemu-img convert -p \
-f raw -O vmdk \
-o subformat=monolithicSparse \
/dev/nvme2n1 /mnt/work/instance-fixed.vmdkmonolithicSparse 适合 VMware Workstation 本地使用。
8. VMware 创建虚拟机
关键配置:
| 配置项 | 建议值 |
|---|---|
| Firmware | BIOS(MBR 分区表) |
| I/O 控制器 | LSI Logic SAS |
| 磁盘类型 | SCSI |
| 磁盘 | 使用现有 VMDK |
首次启动可能安装驱动并重启,属于正常现象。
常见问题
| 问题 | 原因 | 处理 |
|---|---|---|
| UNMOUNTABLE_BOOT_VOLUME | 存储驱动没启用 | 离线修改 SYSTEM hive |
| 启动进 UEFI 循环 | MBR 盘选了 UEFI | 改 BIOS |
| VMDK 不可用 | 只转换了分区 | 重新转换整盘 |
| Windows 未激活 | AWS KMS 不适用于本地 | 测试可忽略或使用自有许可 |
总结
EC2 Windows 根盘导出到 VMware 的关键点有三个:
- VM Export 对 AWS 授权 Windows 镜像有限制,不能直接导出。
- 用救援实例块级读取 EBS,再用
qemu-img转 VMDK。 - 转换前离线启用 VMware 可用的存储驱动,否则会蓝屏。
这个方案适合停机迁移、离线取证、故障实例本地验证等场景。
