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

启动模式

计算机启动时,它运行的第一个软件负责初始化平台并为操作系统执行特定于平台的操作提供界面。

默认启动模式

在 EC2 中,支持启动模式软件的两种变体:传统 BIOS 和统一可扩展固件接口 (UEFI)。默认情况下,Intel 和 AMD 实例类型在传统 BIOS 上运行,Graviton 实例类型在 UEFI 上运行。

Intel 和 AMD 实例类型可以选择在 UEFI 上运行

大多数 Intel 和 AMD 实例类型 也可以在 UEFI 上而不是在默认的传统 BIOS 上运行。要使用 UEFI,必须选择启动模式参数设置为 uefi 的 AMI,而且 AMI 中包含的操作系统必须配置为支持 UEFI。

AMI 启动模式参数的用途

AMI 启动模式参数向 EC2 发出信号,指明启动实例时要使用哪种启动模式。当启动模式参数设置为 uefi 时,EC2 将尝试在 UEFI 上启动实例。如果操作系统未配置为支持 UEFI,则实例启动可能不成功。

警告

设置启动模式参数不会自动将操作系统配置为指定的启动模式。该配置特定于操作系统。有关配置说明,请参阅适用于操作系统的手册。

AMI 上可能的启动模式参数

AMI 启动模式参数是可选项。AMI 可以具有以下任一启动模式参数值:uefilegacy-bios。某些 AMI 没有启动模式参数。对于没有启动模式参数的 AMI,从这些 AMI 启动的实例在 Graviton 上使用实例类型 — 的默认值 uefi,在所有 Intel 和 AMD 实例类型上使用 legacy-bios

注意事项

  • 默认启动模式:

    • Intel 和 AMD 实例类型:传统 BIOS

    • Graviton 实例类型:UEFI

  • 除了传统 BIOS 外,支持 UEFI 的 Intel 和 AMD 实例类型:

    • 已虚拟化:C5、C5a、C5ad、C5d、C5n、D3、D3en、G4、I3en、M5、M5a、M5ad、M5d、M5dn、M5n、M5zn、R5、R5a、R5ad、R5b、R5d、R5dn、R5n、T3、T3a 和 z1d

  • 当前不支持 UEFI 安全启动。

使用 UEFI 启动实例的要求

要在 UEFI 模式下启动实例,必须选择支持 UEFI 的实例类型,然后为 UEFI 配置 AMI 和操作系统,如下所示:

  • 实例类型 –启动实例时,必须选择支持 UEFI 的实例类型。有关更多信息,请参阅 确定实例类型支持的启动模式

  • AMI –启动实例时,必须选择为 UEFI 配置的 AMI。AMI 必须按如下方式进行配置:

    • OS – AMI 中包含的操作系统必须配置为使用 UEFI;否则,实例启动将失败。有关更多信息,请参阅 确定操作系统的启动模式

    • AMI 启动模式参数 – AMI 的启动模式参数必须设置为 uefi。有关更多信息,请参阅 确定 AMI 的启动模式参数

      注意

      目前 AWS 不提供已配置为支持 UEFI 的 AMI。要使用支持 UEFI 的 AMI,您必须创建 AMI 。有关更多信息,请参阅 设置 AMI 的启动模式

确定 AMI 的启动模式参数

AMI 启动模式参数是可选项。AMI 可以具有以下任一启动模式参数值:uefilegacy-bios

某些 AMI 没有启动模式参数。当 AMI 没有启动模式参数时,从 AMI 启动的实例将使用实例类型的默认值,在 Graviton 上使用 uefi,在 Intel 和 AMD 实例类型上使用 legacy-bios

确定 AMI 的启动模式参数(控制台)

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 AMI,然后选择 AMI。

  3. 详细信息选项卡上,检查启动模式字段。

在启动实例时确定 AMI 的启动模式参数(控制台)

使用启动实例向导启动实例时,请在选择 AMI 的步骤中检查启动模式字段。有关更多信息,请参阅 步骤 1:选择 Amazon 系统映像 (AMI)

确定 AMI 的启动模式参数 (AWS CLI)

使用 describe-images 命令确定 AMI 的启动模式。

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

预期输出

{ "Images": [ { ... ], "EnaSupport": true, "Hypervisor": "xen", "ImageOwnerAlias": "amazon", "Name": "UEFI_Boot_Mode_Enabled-Windows_Server-2016-English-Full-Base-2020.09.30", "RootDeviceName": "/dev/sda1", "RootDeviceType": "ebs", "SriovNetSupport": "simple", "VirtualizationType": "hvm", "BootMode": "uefi" } ] }

确定实例类型支持的启动模式

确定实例类型支持的启动模式 (AWS CLI)

使用 describe-instance-types 命令确定实例类型支持的启动模式。通过包含 --query 参数,您可以筛选输出。在此示例中,将筛选输出以仅返回支持的引导模式。

以下示例显示 m5.2xlarge 支持 UEFI 和传统 BIOS 启动模式。

aws ec2 --region us-east-1 describe-instance-types --instance-types m5.2xlarge --query "InstanceTypes[*].SupportedBootModes"

预期输出

[ [ "legacy-bios", "uefi" ] ]

以下示例显示 t2.xlarge 仅支持传统 BIOS。

aws ec2 --region us-east-1 describe-instance-types --instance-types t2.xlarge --query "InstanceTypes[*].SupportedBootModes"

预期输出

[ [ "legacy-bios" ] ]

确定实例的启动模式

启动实例时,其启动模式参数的值由启动该实例所用的 AMI 的启动模式参数的值决定,如下所示:

  • 启动模式参数为 uefi 的 AMI 会创建一个启动模式参数为 uefi 的实例。

  • 启动模式参数为 legacy-bios 的 AMI 会创建一个没有启动模式参数的实例。没有启动模式参数的实例使用其默认值,在这种情况下,该值为 legacy-bios

  • 没有启动模式参数值的 AMI 将创建一个没有启动模式参数值的实例。

实例的启动模式参数的值决定了它的启动模式。如果没有值,则使用默认启动模式,在 Graviton 上使用 uefi,在 Intel 和 AMD 实例类型上使用 legacy-bios

确定实例的启动模式(控制台)

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Instances,然后选择您的实例。

  3. 详细信息选项卡上,检查启动模式字段。

确定实例的启动模式 (AWS CLI)

使用 describe-instances 命令确定实例的启动模式。

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

预期输出

{ "Reservations": [ { "Groups": [], "Instances": [ { "AmiLaunchIndex": 0, "ImageId": "ami-0e2063e7f6dc3bee8", "InstanceId": "i-1234567890abcdef0", "InstanceType": "m5.2xlarge", ... }, "BootMode": "uefi" } ], "OwnerId": "1234567890", "ReservationId": "r-1234567890abcdef0" } ] }

确定操作系统的启动模式

操作系统的启动模式指导 EC2 使用哪种启动模式来启动实例。要查看实例的操作系统是否为 UEFI 配置,需要通过 SSH 连接到实例。

确定实例操作系统的启动模式

  1. 使用 SSH 连接到 Linux 实例

  2. 要查看操作系统的启动模式,请尝试以下任一操作:

    • 运行以下命令。

      [ec2-user ~]$ sudo /usr/sbin/efibootmgr

      在 UEFI 启动模式下启动的实例的预期输出

      BootCurrent: 0001 Timeout: 0 seconds BootOrder: 0000,0001,0002 Boot0000* UiApp Boot0001* UEFI Amazon Elastic Block Store vol-xyz Boot0002* EFI Internal Shell
    • 运行以下命令以验证 /sys/firmware/efi 目录是否存在。仅当实例使用 UEFI 启动时,此目录才会存在。如果此目录不存在,该命令将返回 Legacy BIOS Boot Detected

      [ec2-user ~]$ [ -d /sys/firmware/efi ] && echo "UEFI Boot Detected" || echo "Legacy BIOS Boot Detected"

      在 UEFI 启动模式下启动的实例的预期输出

      UEFI Boot Detected

      在传统 BIOS 启动模式下启动的实例的预期输出

      Legacy BIOS Boot Detected
    • 运行以下命令以验证 EFI 是否出现在 dmesg 输出中。

      [ec2-user ~]$ dmesg | grep -i "EFI"

      在 UEFI 启动模式下启动的实例的预期输出

      [ 0.000000] efi: Getting EFI parameters from FDT: [ 0.000000] efi: EFI v2.70 by EDK II

设置 AMI 的启动模式

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

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

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

警告

在继续执行这些步骤之前,必须首先对实例的卷和操作系统进行适当的修改,以支持通过选定的启动模式启动;否则,生成的 AMI 将无法使用。所需的修改是特定于操作系统的。有关更多信息,请参阅操作系统的手册。

设置 AMI 的启动模式 (AWS 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

    预期输出

    { "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 创建的所有新实例将继承相同的启动模式。

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