设置 Amazon EC2 AMI 的启动模式 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

设置 Amazon EC2 AMI 的启动模式

使用 register-image 命令创建 AMI 时,可将 AMI 的启动模式设置为 uefilegacy-biosuefi-preferred

当 AMI 启动模式设置为 uefi-preferred 时,实例将按如下方式启动:

  • 对于同时支持 UEFI 和传统 BIOS 的实例类型(例如 m5.large),实例通过 UEFI 启动。

  • 对于仅支持传统 BIOS 的实例类型(例如 m4.large),实例通过传统 BIOS 启动。

注意

如果将 AMI 启动模式设置为 uefi-preferred,则操作系统必须支持同时启动 UEFI 和传统 BIOS 的功能。

警告

UEFI 安全启动等部分功能仅适用于在 UEFI 上启动的实例。将 uefi-preferred AMI 启动模式参数与不支持 UEFI 的实例类型结合使用时,实例将以传统 BIOS 启动,并禁用 UEFI 相关功能。如果您依赖于 UEFI 相关功能的可用性,请将 AMI 启动模式参数设置为 uefi

要将现有的基于传统 BIOS 的实例转换为 UEFI,或将现有的基于 UEFI 的实例转换为传统 BIOS,需要执行以下步骤:首先,修改实例的卷和操作系统以支持选定的启动模式。然后,创建该卷的快照。最后,使用 register-image 以通过快照创建 AMI。

您无法使用 create-image 命令设置 AMI 的启动模式。使用 create-image,AMI 可以继承用于创建 AMI 的 EC2 实例的启动模式。例如,如果从传统 BIOS 上运行的 EC2 实例创建 AMI,则 AMI 启动模式将配置为 legacy-bios。如果从通过 AMI(启动模式设置为 uefi-preferred)启动的 EC2 实例创建 AMI,则所创建 AMI 的启动模式也将设置为 uefi-preferred

警告

设置 AMI 启动模式参数不会自动将操作系统配置为指定的启动模式。在继续执行这些步骤之前,必须首先对实例的卷和操作系统进行适当的修改,以支持通过选定的启动模式启动;否则,生成的 AMI 将无法使用。例如,如果要将基于传统 BIOS 的 Windows 实例转换为 UEFI,则可以使用 Microsoft 的 MBR2GPT 工具将系统磁盘从 MBR 转换为 GPT。所需的修改是特定于操作系统的。有关更多信息,请参阅操作系统的手册。

设置 AMI 的启动模式 (Amazon CLI)
  1. 对实例的卷和操作系统进行适当的修改,以支持通过选定的启动模式启动。所需的修改是特定于操作系统的。有关更多信息,请参阅操作系统的手册。

    注意

    如果不执行此步骤,AMI 将无法使用。

  2. 要查找实例的卷 ID,请使用 describe-instances 命令。您将在下一步中创建此卷的快照。

    aws ec2 describe-instances --region us-east-1 --instance-ids i-1234567890abcdef0

    预期输出

    ... "BlockDeviceMappings": [ { "DeviceName": "/dev/sda1", "Ebs": { "AttachTime": "", "DeleteOnTermination": true, "Status": "attached", "VolumeId": "vol-1234567890abcdef0" } } ...
  3. 要创建卷的快照,请使用 create-snapshot 命令。使用上一步中的卷 ID。

    aws ec2 create-snapshot --region us-east-1 --volume-id vol-1234567890abcdef0 --description "add text"

    预期输出

    { "Description": "add text", "Encrypted": false, "OwnerId": "123", "Progress": "", "SnapshotId": "snap-01234567890abcdef", "StartTime": "", "State": "pending", "VolumeId": "vol-1234567890abcdef0", "VolumeSize": 30, "Tags": [] }
  4. 请注意上一步输出中的快照 ID。

  5. 等到快照创建状态为 completed 后,继续执行下一步。要查询快照的状态,请使用 describe-snapshots 命令。

    aws ec2 describe-snapshots --region us-east-1 --snapshot-ids snap-01234567890abcdef

    示例输出

    { "Snapshots": [ { "Description": "This is my snapshot", "Encrypted": false, "VolumeId": "vol-049df61146c4d7901", "State": "completed", "VolumeSize": 8, "StartTime": "2019-02-28T21:28:32.000Z", "Progress": "100%", "OwnerId": "012345678910", "SnapshotId": "snap-01234567890abcdef", ...
  6. 要创建新的 AMI,请使用 register-image 命令。使用您在前面步骤中记下的快照 ID。

    • 要将启动模式设置为 UEFI,请将 --boot-mode 参数添加到命令中并将 uefi 指定为值。

      aws ec2 register-image \ --region us-east-1 \ --description "add description" \ --name "add name" \ --block-device-mappings "DeviceName=/dev/sda1,Ebs={SnapshotId=snap-01234567890abcdef,DeleteOnTermination=true}" \ --architecture x86_64 \ --root-device-name /dev/sda1 \ --virtualization-type hvm \ --ena-support \ --boot-mode uefi
    • 要将启动模式设置为 uefi-preferred,请将 --boot-mode 参数添加到命令中并将 uefi-preferred 指定为值。

      aws ec2 register-image \ --region us-east-1 \ --description "add description" \ --name "add name" \ --block-device-mappings "DeviceName=/dev/sda1,Ebs={SnapshotId=snap-01234567890abcdef,DeleteOnTermination=true}" \ --architecture x86_64 \ --root-device-name /dev/sda1 \ --virtualization-type hvm \ --ena-support \ --boot-mode uefi-preferred

    预期输出

    { "ImageId": "ami-new_ami_123" }
  7. 要验证新创建的 AMI 是否具有您在上一步中指定的启动模式,请使用 describe-images 命令。

    aws ec2 describe-images --region us-east-1 --image-id ami-new_ami_123

    预期输出

    { "Images": [ { "Architecture": "x86_64", "CreationDate": "2021-01-06T14:31:04.000Z", "ImageId": "ami-new_ami_123", "ImageLocation": "", ... "BootMode": "uefi" } ] }
  8. 使用新创建的 AMI 启动新实例。

    如果 AMI 启动模式为 uefilegacy-bios,则从此 AMI 创建的实例所具有的启动模式与 AMI 相同。如果 AMI 启动模式为 uefi-preferred,则在实例类型支持 UEFI 的情况下,实例将通过 UEFI 启动;否则,实例将通过传统 BIOS 启动。

  9. 要验证新实例是否具有预期的启动模式,请使用 describe-instances 命令。