

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 对 VM Import/Export 进行故障排除
<a name="vmimport-troubleshooting"></a>

导入或导出虚拟机（VM）时，大多数错误是因为您尝试执行不受支持的操作而发生的。为避免此类错误，请务必仔细核查要求和限制。

导入任务可能会在完成之前停止，然后失败。您可以在导入任务看似因失败而停止但还未变为 `completed` 状态之前，收集这些导入任务的详细信息。要收集此类详细信息，请使用适用于所用导入操作的命令，来描述正在进行的转换任务的详细信息：
+ **ImportInstance** 和 **ImportVolume** – 使用 [https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_DescribeConversionTasks.html](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_DescribeConversionTasks.html) 操作。
+ **ImportImage** – 使用 [https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_DescribeImportImageTasks.html](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_DescribeImportImageTasks.html) 操作。
+ **ImportSnapshot** – 使用 [https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_DescribeImportSnapshotTasks.html](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_DescribeImportSnapshotTasks.html) 操作。

**Topics**
+ [

## 导入映像错误
](#import-image-errors)
+ [

## 导入实例错误
](#import-instance-errors)
+ [

## VM Export 错误
](#instance-export-errors)
+ [

## Windows VM 错误
](#windows-vm-errors)
+ [

## Linux VM 错误
](#linux-vm-errors)

## 导入映像错误
<a name="import-image-errors"></a>

**错误代码: InvalidParameter，错误消息：消息：参数 disk-image-size =0 的格式无效**  
不支持指定的映像格式。请使用支持的一种映像格式 (VHD、VHDX、VMDK 或原始格式) 重试操作。

**调用 CreateRole操作时出现客户端错误 (MalformedPolicyDocument)：策略中有语法错误**  
您必须在策略文档名称前包含 `file://` 前缀。

**ClientError: 磁盘验证失败 [OVF 文件解析错误：不支持带有分块磁盘文件的 OVA]**  
VM Import/Export 不支持导入分成多个文件的磁盘。检查磁盘格式，然后将 VM 磁盘作为单个文件重试该操作。

**ClientError: 磁盘验证失败 [不支持的 VMDK 文件格式]**  
VMDK 文件必须是流优化型。有关更多信息，请参阅 [VM Import/Export 支持的映像格式](prerequisites.md#vmimport-image-formats)。

**ClientError: 找到了多个不同的 grub/menu.lst 文件**  
VM 在导入任务期间 Import/Export 发现了以下至少一项的重复文件：`grub.cfg``grub.conf`、或`menu.lst`。 VMs 不支持双启动配置。有关更多信息，请参阅 [使用 VM Import/Export 导入资源的限制](limitations-image-importing.md)。

**服务角色 `vmimport` 不存在或没有让服务继续的足够权限**  
VM Import 服务角色缺失或不正确。如果尝试开始导入的用户、小组或角色对 Amazon EC2 资源没有足够的访问权限，您也可能收到此错误。  
如果调用 `ImportImage` 的用户具有 `Decrypt` 权限，但 `vmimport` 角色不具备此权限，也可能发生此错误。如果您使用[带有 Amazon KMS托管密钥的服务器端加密 (SSE-KMS)](https://docs.amazonaws.cn/AmazonS3/latest/userguide/UsingKMSEncryption.html) 来保护 Amazon S3 中的静态数据，则需要为服务角色分配额外`Decrypt`权限，如以下 JSON 代码所示：

```
{
   "Sid":"Allow vmimport to decrypt SSE-KMS key",
   "Effect":"Allow",
   "Principal":{
      "AWS":[
         "arn:aws:iam::accountid:role/vmimport"
      ]
   },
   "Action":[
      "kms:Decrypt"
   ],
   "Resource":"*"
}
```

## 导入实例错误
<a name="import-instance-errors"></a>

**错误代码: InvalidParameter，错误消息：消息：参数 disk-image-size =0 的格式无效**  
不支持指定的映像格式。请使用支持的映像格式 (OVA、VHD、VMDK 或原始格式) 重试操作。

**Client.Unsupported：未找到可启动的分区。<RequestID>（服务：AmazonEC2；状态码：400；错误代码：不支持；请求编号：）**  
根卷采用 GUID 分区表 (GPT) 分区。不支持采用 GPT 分区的卷。请将根卷转换为 MBR 分区并重试。

**ClientError: 页脚不一样**  
您尝试导入差异 VHD，或在创建 VHD 时出错。重新导出您的 VM，然后将其重新导入 Amazon EC2。

**ClientError: 未压缩的数据长度无效**  
VMDK 文件已损坏。您可以尝试修复或重新创建 VMDK 文件，或使用其他的文件。

**错误：Bucket < MyBucketName > 不在 < RegionName > 区域中，而是在 < RegionName >**  
亚马逊简单存储服务 (Amazon S3) Semple Service 存储桶与您要导入的实例 Amazon Web Services 区域 不同。请尝试添加 `--ignore-region-affinity` 选项，它将忽略存储桶的区域是否与创建导入任务的区域相符。您也可以使用 Amazon Simple Storage Service 控制台创建 S3 存储桶并将区域设置为想要导入虚拟机的区域。再次运行命令并指定您刚创建的新存储桶。

**ERROR: File uses unsupported compression algorithm 0**  
使用 OVA 格式而非 OVF 格式创建 VMDK。以 OVF 格式创建 VMDK。

**S3 源位置无效**  
命令语法或 S3 存储桶名称不正确。请在仅用于 VM Import 的合适区域中创建 S3 存储桶，然后将虚拟机文件上传到该存储桶的根。

**给定的 S3 存储桶不在该区域本地**  
用于 VM Import 的 S3 存储桶必须与想要导入的虚拟机位于同一 Amazon Web Services 区域 。

**ClientError: 未知操作系统/缺少操作系统文件**  
无法识别操作系统。确认您的操作系统已在虚拟机中列为支持操作系统 Import/Export [VM Import/Export 的资源导入要求](prerequisites.md)。

## VM Export 错误
<a name="instance-export-errors"></a>

**客户。 UnsupportedOperation：此实例已连接多个卷。请删除额外的卷。**  
分离根卷以外的卷并重试。如果您需要这些卷上的数据，可以将它们复制到根卷，或将这些卷导入到 Amazon EBS 中。

**客户。 NotExportable：无法导出此实例。（服务：AmazonEC2；状态码：400；错误代码： NotExportable；请求编号：<RequestID>）**  
您只能导出某些实例。有关更多信息，请参阅 [实例导出的注意事项](vmexport-limits.md)。

**Error starting instances: Invalid value <instance ID> for instanceId。Instance does not have a volume attached at root (/dev/sda1)。**  
您尝试在 VM Import 过程和所有转换任务完成之前启动实例。请等待 VM Import 过程和所有转换任务全部完成后再启动实例。

**调用 CreateInstanceExportTask操作时出错 (InvalidParameter)：给定的 S3 对象不是该区域的本地对象。**  
EC2 实例和 S3 存储桶必须位于同一 Amazon Web Services 区域。您还必须确保该`create-instance-export-task`命令在与导出资源的同一区域中运行。您可以使用 `--region` 参数指定区域。有关更多信息，请参阅*Amazon Command Line Interface 《用户指南》*中 [Amazon CLI 支持的全局命令行选项](https://docs.amazonaws.cn/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list)。

## Windows VM 错误
<a name="windows-vm-errors"></a>

### ClientError: failure/instance 无法访问启动器网络。请在安装.Net 框架 3.5 SP1 或更高版本后重试。
<a name="ClientErrorBooterNetworkingFailure"></a>

EC2 Config 服务需要 Microsoft .NET Framework 3.5 Service Pack 1 或更高版本。请在您的 Windows VM 上安装 Microsoft .NET Framework 3.5 Service Pack 1 或更高版本并重试。

### FirstBootFailure：此导入请求失败，因为 Windows 实例无法启动和建立网络连接。
<a name="FirstBootFailures"></a>

当您收到 `FirstBootFailure` 错误消息时，意味着您的虚拟磁盘映像无法执行以下步骤之一：
+ 启动并开始 Windows。
+ 安装 Amazon EC2 联网和磁盘驱动程序。
+ 使用一个 Dhcp 配置的网络接口接收 IP 地址。
+ 使用 Amazon EC2 Windows 批量许可激活 Windows。

以下最佳实践可帮助您避免 Windows 首次启动失败：
+ **禁用防病毒和反间谍软件及防火墙** — 这些类型的软件可能会阻止安装新的 Windows 服务或驱动程序，或阻止运行未知的二进制文件。软件和防火墙可在导入后重新启用。
+ **不要强化您的操作系统** — 安全配置（有时称为强化）可能会阻止自动安装 Amazon EC2 驱动程序。还有其他 Windows 配置设置可防止导入。这些设置可在导入时重新使用。
+ **禁用或删除多个可启动的分区** — 如果您的虚拟机启动并需要您选择使用的启动分区，导入可能会失败。

虚拟磁盘映像无法启动和建立网络连接可能是由于以下任一原因：

**TCP/IP 网络和 DHCP 未启用**  
**原因**：必须启用 TCP/IP 网络和 DHCP。  
**解决**：确保 TCP/IP 网络已启用。有关更多信息，请参阅 Microsoft Support 网站上的[更改 TCP/IP 设置](https://support.microsoft.com/en-us/help/15089/windows-change-tcp-ip-settings)。确认 DHCP 已启用。有关更多信息，请参阅 Microsoft 网站上的[动态主机配置协议 (DHCP)](https://docs.microsoft.com/en-us/windows-server/networking/technologies/dhcp/dhcp-top) 。

**Hyper-V 服务器角色已安装**  
**原因**：不支持导入安装了 Hyper-V 角色的虚拟机。  
**解决方案**：从虚拟机中移除 Hyper-V 角色，然后重试导入。

**虚拟机上丢失了 Windows 需要的卷**  
**原因**：将 VM 导入 Amazon EC2 时只导入启动盘，必须断开所有其他磁盘，而且在导入虚拟机前 Windows 必须能够启动。例如，Active Directory 通常会将 Active Directory 数据库存储在 `D:\` 驱动器上。如果 Active Directory 数据库丢失或无法访问时，域控制器无法启动。  
**解决**：在导出前，断开所有连接到 Windows VM 的二级和网络磁盘。将所有 Active Directory 数据库从辅助驱动或分区移至主要 Windows 分区。有关更多信息，请参阅 Microsoft Support 网站上的[启动基于 Windows 或基于 SBS 的域控制器时出现“Directory Services cannot start”（目录服务无法启动）错误消息](https://learn.microsoft.com/en-us/troubleshoot/windows-server/active-directory/0xc00002e1-error-start-domain-controller)。

**Windows 始终启动到 System Recovery Options**  
**原因**：Windows 可能出于多种原因启动 “系统恢复选项”，包括将 Windows 从物理机拉入虚拟化环境时，也称为 physical-to-virtual (P2V) 转换过程。  
**解决**：在导出或准备导入之前，确保 Windows 启动到登录提示。不要导入来自物理设备的虚拟 Windows 实例。

**虚拟机是使用 physical-to-virtual (P2V) 转换过程创建的**  
**原因**：通过在物理机上执行 Windows 安装过程然后将该 Windows 安装的副本导入到虚拟机中来创建磁盘映像，就会发生 P2V 转换。 VMs 虚拟机不支持通过 P2V 转换创建的镜像，Import/Export. VM Import/Export仅支持原生安装在源虚拟机内的 Windows 映像。  
**解决**：在虚拟化环境中安装 Windows，将安装的软件迁移至新的 VM。

**Windows 激活失败**  
**原因**：在启动过程中，Windows 将检测硬件更改并尝试激活。在导入进程中，我们尝试将 Windows 中的授权机制转换为 Amazon Web Services 提供的批量许可。但是，如果 Windows 激活过程失败，那么导入也会失败。  
**解决措施**：确保要导入的 Windows 版本支持批量许可。Windows 测试版或预览版可能不会。

**未找到可启动的分区**  
**原因**：在虚拟机的导入过程中，未能找到启动分区。  
**解决措施**：确保要导入的磁盘有启动分区。

## Linux VM 错误
<a name="linux-vm-errors"></a>

**ClientError: 配置无效-无法读取 fstab**  
不支持 VMs 具有双启动卷或多个`/etc`目录的 Linux。

**ClientError: 已找到 BLSC 样式的 GRUB，但无法检测到默认内核**  
VM Import/Export 无法检测到默认内核。当它被移出主`grub.cfg`文件时，可能会发生这种情况。您可以将配置设置为 `$saved_entry` 并确保 `grubenv` 默认包含 `bootloader` 条目。

**ClientError: 我们无法读取您的导入内容 initramfs/initrd 以确定您的导入需要哪些驱动程序才能在 EC2 中运行**  
在导入您的 Linux 虚拟机以使其准备在 Amazon EC2 中作为实例运行时，我们无法读取所需的文件。您可以使用此 `lsinitramfs` 命令来验证文件的完整性。例如，您可以使用以下 命令：  

```
lsinitramfs /boot/initrd.img-5.4.0-77-generic 2>&1 | less
```
如果输出中返回错误，则可以尝试重建 `initramfs` 文件以解决问题，然后再次导入 VM。

**ClientError: 不支持的配置-逻辑卷组激活失败 **  
未能激活虚拟磁盘映像上的逻辑卷。这可能表示文件或磁盘损坏。验证上传的磁盘映像文件。

**ClientError: 不支持的配置-找到多个目录**  
不支持 VMs 具有多启动卷或多个`/etc`目录的 Linux。

**ClientError: 不支持的内核版本**  
操作系统使用的内核版本不受支持。确认您的导入符合操作系统列出的要求。有关更多信息，请参阅 [VM Import/Export 支持的操作系统](prerequisites.md#vmimport-operating-systems)。

**请求的实例不支持 Linux**  
Linux VMs 可以导入到特定的实例类型。请使用以下支持的实例类型并重试。  
+ 通用型：`t2.micro` \$1 `t2.small` \$1 `t2.medium` \$1 `m3.medium` \$1 `m3.large` \$1 `m3.xlarge` \$1 `m3.2xlarge`
+ 计算优化型：`c3.large` \$1 `c3.xlarge` \$1 `c3.2xlarge` \$1 `c3.4xlarge` \$1 `c3.8xlarge` \$1 `cc1.4xlarge` \$1 `cc2.8xlarge`
+ 内存优化：`r3.large` \$1 `r3.xlarge` \$1 `r3.2xlarge` \$1 `r3.4xlarge` \$1 `r3.8xlarge` \$1 `cr1.8xlarge`
+ 存储优化型：`i2.xlarge` \$1 `i2.2xlarge` \$1 `i2.4xlarge` \$1 `i2.8xlarge` \$1 `hi1.4xlarge` \$1 `hi1.8xlarge`