块设备映射 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

块设备映射

您启动的每个实例都有一个关联根设备卷,它是 Amazon EBS 卷或实例存储卷。您可以使用块储存设备映射来指定实例启动时要连接的其他 EBS 卷或实例存储卷。您还可以将其他 EBS 卷附加到运行中的实例,请参阅 将 Amazon EBS 卷挂载到实例。然而,将实例存储卷附加到实例的唯一办法是,在实例启动时,使用块储存设备映射来附加这些卷。

有关根设备卷的更多信息,请参阅 将根卷更改为保留

块储存设备映射的概念

块储存设备是一种以字节或位(块)为单位移动数据的存储设备。这些设备支持随机访问并广泛使用缓存 I/O,例如,包括硬盘、CD-ROM 驱动和闪存盘。块设备可以实际连接到计算机,或者就像实际连接到计算机一样对进行远程访问。

Amazon EC2 支持两种类型的块储存设备:

  • 实例存储卷(虚拟设备,其底层硬件实际附加到该实例的主机)

  • EBS 卷(远程存储设备)

块设备映射定义了挂载到某个实例的块储存设备(实例存储卷和 EBS 卷)。您可以指定块储存设备映射作为创建 AMI 的一部分,以便使从该 AMI 启动的所有实例均可使用该映射。或者,您还可以在启动实例时指定块储存设备映射,这样该映射会覆盖您在启动实例的 AMI 中指定的块储存设备映射。请注意,某个实例类型支持的所有 NVMe 实例存储卷将在实例启动时自动枚举并为其分配设备名称;将这些卷包含在您的块储存设备映射中不起作用。

块储存设备映射条目

当您创建块储存设备映射时,可以为需要附加到该实例的每个块储存设备指定以下信息:

  • 在 Amazon EC2 内使用的设备名称。在装载卷时,实例的块储存设备驱动程序将分配实际卷名称。分配的名称可以与 Amazon EC2 建议的名称不同。有关更多信息,请参阅Linux 实例上的设备名称

对于实例存储卷,您还可以指定以下信息:

  • 虚拟设备:ephemeral[0-23]。请注意,对您的实例可用的实例存储卷的数量和大小因实例类型而异。

对于 NVMe 实例存储卷,以下信息也适用:

  • 这些卷将自动枚举并分配设备名称;将这些卷包含在块储存设备映射中将不起作用。

对于 EBS 卷,您还可以指定以下信息:

  • 用于创建块设备的快照的 ID(snap-xxxxxxxx)。只要您指定卷大小,此值为可选。您不能指定已归档快照的 ID。

  • 卷的大小(以 GiB 计算)。所指定的大小必须大于等于指定快照的大小。

  • 是否在实例终止时删除卷(truefalse)。根设备卷的默认值为 true,附加的卷的默认值为 false。当您创建 AMI 时,其块储存设备映射会从该实例继承此设置。当您启动某个实例时,该实例会从 AMI 继承此设置。

  • 卷类型:gp2 和(gp3适用于通用型 SSD)、io1 和(io2适用于预置 IOPS SSD)、st1(适用于吞吐量优化型 HDD)、sc1(适用于 Cold HDD)或(standard适用于磁介质卷)。

  • 该卷支持的每秒进行读写操作的次数(IOPS)。(仅与 io1io2 卷一起使用。)

块储存设备映射实例存储注意事项

使用在其块储存设备映射中具有实例存储卷的 AMIs 启动实例时,要考虑一些注意事项。

  • 有些实例类型包含的实例存储卷多于其他类型,而有些实例类型根本不包含实例存储卷。如果实例类型支持一个实例存储卷,而且 AMI 具有用于两个实例存储卷的映射,则实例会在启动时带有一个实例存储卷。

  • 实例存储卷只能在启动时进行映射。不能停止没有实例存储卷的实例(例如 t2.micro),将实例更改为支持实例存储卷的类型,然后重新启动带有实例存储卷的实例。但是,您可以从实例创建 AMI 并以支持实例存储卷的实例类型启动它,然后将这些实例存储卷映射到实例。

  • 如果您启动映射了实例存储卷的实例,然后停止实例,将它更改为具有较少实例存储卷的实例类型并重新启动它,则来自初始启动的实例存储卷映射会出现在实例元数据中。但是,实例使用的实例存储卷不能超出该实例类型支持的最大数量。

    注意

    实例停止时,实例存储卷上的所有数据都会丢失。

  • 根据启动时的实例存储容量,M3 实例可能会在启动时忽略 AMI 实例存储块设备映射(除非在启动时指定它们)。您应在启动时指定实例存储块储存设备映射(即使启动的 AMI 在 AMI 中映射了实例存储卷),以确保实例存储卷在实例启动时可用。

块储存设备映射示例

此图显示了 EBS 支持的实例的块储存设备映射示例。它将 /dev/sdb 映射到 ephemeral0 并映射两个 EBS 卷,一个映射到 /dev/sdh,另一个映射到 /dev/sdj。它还显示了作为根设备卷的 EBS 卷,即 /dev/sda1


          实例、实例存储卷以及 EBS 卷之间的关系。

请注意,此块储存设备映射示例是在本主题中的示命令和 API 中例使用的。您可以在为 AMI 指定块储存设备映射在启动实例时更新块储存设备映射中找到创建块储存设备映射的示例命令和 API。

如何使设备在操作系统可用

Amazon EC2 使用设备名称(如 /dev/sdhxvdh)来描述块储存设备。Amazon EC2 使用块储存设备映射来指定要附加到 EC2 实例的块储存设备。当块储存设备附加到实例后,您必须先将其装载到操作系统,然后才可以访问此存储设备。当块储存设备从实例分离后,就被操作系统卸载下来,而您也不能再访问该存储设备。

通过 Linux 实例,当实例第一次启动时,在块储存设备映射中指定的设备名称会被映射到相应的块储存设备。默认情况下,实例类型决定要格式化并装载哪个实例存储卷。您可以在启动时装载额外的实例存储卷,前提是不得超过您的实例类型所允许的实例存储卷数量。有关更多信息,请参阅Amazon EC2 实例存储。实例的块储存设备驱动程序决定在格式化和装载卷时要使用哪些设备。有关更多信息,请参阅将 Amazon EBS 卷挂载到实例

AMI 块储存设备映射

各个 AMI 都拥有块储存设备映射,指定实例启动时要附加的块储存设备。要向 AMI 添加更多块储存设备,必须创建自己的 AMI。

为 AMI 指定块储存设备映射

创建 AMI 时,您可以使用两种方法来指定除根卷以外的卷。如果您在从该实例创建 AMI 前已将卷附加到运行中的实例,则 AMI 的块储存设备映射将包括这些相同的卷。对于 EBS 卷,这些现存的数据会保存在一个新的快照中,而且是块储存设备映射指定的新快照。而实例存储卷的数据无法保存。

对于 EBS 支持的 AMI,您可以使用块储存设备映射来添加 EBS 卷和实例存储卷。对于实例存储支持的 AMI,您只能添加实例存储卷,方法是在注册镜像时修改镜像清单文件中的块储存设备映射条目。

注意

对于 M3 实例,您必须在启动实例时,在块储存设备映射中指定适用于实例的实例存储卷。当您启动 M3 实例时,如果在块储存设备映射中为 AMI 指定的实例存储卷未指定为块储存设备映射的一部分,则该卷可能会被忽略。

使用控制台向 AMI 添加卷
  1. 打开 Amazon EC2 控制台。

  2. 在导航窗格中,选择实例

  3. 选择一个实例,再依次选择 Actions(操作)Image and templates(映像和模板)、Create image(创建映像)。

  4. 输入映像的名称和描述。

  5. 实例卷将显示在 Instance volumes(实例卷)下。要添加另一个卷,请选择 Add volume(添加卷)。

  6. 对于 Volume Type(卷类型),选择卷类型。对于 Device(设备),请选择设备名称。对于 EBS 卷,您可以指定其他详细信息,例如快照、卷大小、卷类型、IOPS 和加密状态。

  7. 选择创建映像

使用命令行向 AMI 添加卷

使用 create-image Amazon CLI 命令可为由 EBS 支持的 AMI 指定块储存设备映射。使用 register-image Amazon CLI 命令可为由实例存储支持的 AMI 指定块储存设备映射。

使用 --block-device-mappings 参数指定块储存设备映射。以 JSON 编码的参数可以直接在命令行上提供,也可以通过引用文件提供:

--block-device-mappings [mapping, ...] --block-device-mappings [file://mapping.json]

要添加实例存储卷,请使用以下映射。

{ "DeviceName": "/dev/sdf", "VirtualName": "ephemeral0" }

要添加空的 100 GiB gp2 卷,请使用以下映射。

{ "DeviceName": "/dev/sdg", "Ebs": { "VolumeSize": 100 } }

要添加基于快照的 EBS 卷,请使用以下映射。

{ "DeviceName": "/dev/sdh", "Ebs": { "SnapshotId": "snap-xxxxxxxx" } }

要对设备省略映射,请使用以下映射。

{ "DeviceName": "/dev/sdj", "NoDevice": "" }

或者,您可以将 -BlockDeviceMapping 参数与以下命令(Amazon Tools for Windows PowerShell)结合使用:

查看 AMI 块储存设备映射中的 EBS 卷

您可以轻松列举块储存设备映射中适用于 AMI 的 EBS 卷。

使用控制台查看 AMI 的 EBS 卷
  1. 打开 Amazon EC2 控制台。

  2. 在导航窗格中,选择 AMIs

  3. Filter 列表中选择 EBS images 以获取 EBS 支持的 AMI 的列表。

  4. 选择所需的 AMI,然后查看详细信息选项卡。至少,以下信息适用于根设备:

    • 根设备类型ebs

    • 根设备名称(例如 /dev/sda1

    • 块设备(例如 /dev/sda1=snap-1234567890abcdef0:8:true

    如果使用块设备映射创建的 AMI 带有额外 卷,则块设备字段会显示针对这些额外 EBS 卷的映射。(此屏幕不显示实例存储卷。)

使用命令行查看 AMI 的 EBS 卷

使用 describe-images(Amazon CLI)命令或 Get-EC2Image(Amazon Tools for Windows PowerShell)命令来枚举 AMI 块设备映射中的 EBS 卷。

实例块储存设备映射

默认情况下,您启动的实例包含所有在 AMI 的块设备映射中指定的存储设备(您是从该 AMI 启动实例的)。您可以在启动实例时,为实例指定要对块储存设备映射执行的更改,而这些更新会覆盖 AMI 的块储存设备映射或与其合并。

限制
  • 对于根卷,您只能修改下列内容:卷大小、卷类型和 Delete on Termination 标志。

  • 修改 EBS 卷时,无法减小其大小。因此,您必须指定大小等于或大于 AMI 的块储存设备映射中指定的快照大小的快照。

在启动实例时更新块储存设备映射

您可以在启动实例时向其添加 EBS 卷和实例存储卷。请注意,针对实例更新块储存设备映射不会对启动实例的 AMI 的块储存设备映射造成永久性更改。

使用控制台向实例添加卷
  1. 打开 Amazon EC2 控制台。

  2. 在控制面板中,选择 Launch Instance

  3. 选择一个亚马逊机器映像(AMI)页面上,选择要使用的 AMI 并选择选择

  4. 遵循向导完成 Choose an Instance Type (选择一个实例类型)Configure Instance Details (配置实例详细信息) 页面。

  5. 添加存储页面中,您可以按以下方法修改根卷、EBS 卷和实例存储卷:

    • 若要更改根卷的大小,请查找类型列下的卷,然后更改其大小字段。

    • 要隐藏用于启动实例的 AMI 块设备映射所指定的 EBS 卷,请找到该卷并单击其对应的删除图标。

    • 要添加 EBS 卷,请选择添加新卷,从类型列表中选择 EBS,并填写设备快照等字段。

    • 要隐藏用于启动实例的 AMI 块储存设备映射所指定的实例存储卷,请找到该卷并选择其对应的 Delete 图标。

    • 要添加实例存储卷,请选择 Add New Volume,从 Type 列表中选择 Instance Store,然后从 Device 中选择设备名称。

  6. 完成其余向导页面,然后选择 Launch

使用 Amazon CLI 将卷添加到实例中

使用带 Amazon CLI 选项的 run-instances --block-device-mappings 命令可在启动时为实例指定块储存设备映射。

例如,假定 EBS 支持的 AMI 指定了以下块储存设备映射:

  • /dev/sdb=ephemeral0

  • /dev/sdh=snap-1234567890abcdef0

  • /dev/sdj=:100

要防止 /dev/sdj 连接到从该 AMI 启动的实例,请使用以下映射。

{ "DeviceName": "/dev/sdj", "NoDevice": "" }

要将 /dev/sdh 的大小增加到 300 GiB,请指定以下映射。请注意,您不必为 /dev/sdh 指定快照 ID,因为指定设备名称就足以识别卷。

{ "DeviceName": "/dev/sdh", "Ebs": { "VolumeSize": 300 } }

要在实例启动时增加根卷的大小,请先调用带有 AMI ID 的 describe-images 以验证根卷的设备名称。例如,"RootDeviceName": "/dev/xvda"。要覆盖根卷的大小,请指定 AMI 所使用的根设备的设备名称和新的卷大小。

{ "DeviceName": "/dev/xvda", "Ebs": { "VolumeSize": 100 } }

要附加额外的实例存储卷 /dev/sdc,请指定以下映射。如果实例类型不支持多个实例存储卷,此映射将无效。如果实例支持 NVMe 实例存储卷,则将自动枚举这些卷并为其分配 NVMe 设备名称。

{ "DeviceName": "/dev/sdc", "VirtualName": "ephemeral1" }
使用 Amazon Tools for Windows PowerShell 将卷添加到实例中

-BlockDeviceMapping 参数与 New-EC2Instance 命令(Amazon Tools for Windows PowerShell)结合使用。

更新正在运行的实例的块储存设备映射

您可以使用 modify-instance-attribute Amazon CLI 命令更新正在运行的实例的块储存设备映射。在更改此属性之前,您不需要停止该实例。

aws ec2 modify-instance-attribute --instance-id i-1a2b3c4d --block-device-mappings file://mapping.json

例如,要在实例终止时保留根卷,请在 mapping.json 中指定以下内容。

[ { "DeviceName": "/dev/sda1", "Ebs": { "DeleteOnTermination": false } } ]

或者,您可以将 -BlockDeviceMapping 参数与 Edit-EC2InstanceAttribute 命令(Amazon Tools for Windows PowerShell)结合使用。

查看实例块储存设备映射中的 EBS 卷

您可以轻松枚举映射到实例的 EBS 卷。

注意

对于在 2009-10-31 API 发行之前启动的实例,Amazon 不会显示块储存设备映射。您必须先分离并重新附加卷,Amazon 才能显示块储存设备映射。

使用控制台查看实例的 EBS 卷
  1. 打开 Amazon EC2 控制台。

  2. 在导航窗格中,选择实例

  3. 在搜索栏中,输入 Root device type(根设备类型),然后选择 EBS。此操作会显示 EBS 支持的实例列表。

  4. 选择所需的实例,然后查看 Storage(存储)选项卡中显示的详细信息。至少,以下信息适用于根设备:

    • Root device type(例如 EBS

    • Root Device Name(例如,/dev/xvda

    • Block devices(例如,/dev/xvda/dev/sdf/dev/sdj

    如果使用块储存设备映射启动了带有其他 EBS 卷的实例,则它们将显示在 Block devices(块储存设备)下。此选项卡上不会显示任何实例存储卷。

  5. 要显示有关 EBS 卷的其他信息,请选择其卷 ID 以转到卷页面。有关更多信息,请参阅查看关于 Amazon EBS 卷的信息

使用命令行查看实例的 EBS 卷

使用 describe-instances(Amazon CLI)命令或 Get-EC2Instance(Amazon Tools for Windows PowerShell)命令来枚举实例的块设备映射中的 EBS 卷。

查看实例存储卷的实例块储存设备映射

当您查看实例的块储存设备映射时,可以只查看 EBS 卷,但是不能查看实例存储卷。您用于查看实例的实例存储卷的方法取决于卷类型。

NVMe 实例存储卷

您可以使用 NVMe 命令行程序包 nvme-cli 来查询块储存设备映射中的 NVMe 实例存储卷。运行以下命令,下载程序包,并在实例上安装该程序包。

[ec2-user ~]$ sudo nvme list

以下是实例的示例输出。“模型”列中的文本表示卷是 EBS 卷还是实例存储卷。在这个例子中,/dev/nvme1n1/dev/nvme2n1 均为实例存储卷。

Node SN Model Namespace ---------------- -------------------- ---------------------------------------- --------- /dev/nvme0n1 vol06afc3f8715b7a597 Amazon Elastic Block Store 1 /dev/nvme1n1 AWS2C1436F5159EB6614 Amazon EC2 NVMe Instance Storage 1 /dev/nvme2n1 AWSB1F4FF0C0A6C281EA Amazon EC2 NVMe Instance Storage 1 ...
HDD 或 SSD 实例存储卷

您可以使用实例元数据在块储存设备映射中查询 HDD 或 SSD 实例存储卷。未包含 NVMe 实例储存卷。

所有针对实例元数据的请求的基本 URI 均为 http://169.254.169.254/latest/。有关更多信息,请参阅实例元数据和用户数据

首先,连接到运行中的实例。从该实例中,使用此查询获取其块储存设备映射。

IMDSv2
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/block-device-mapping/
IMDSv1
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/

该响应包含实例的块储存设备名称。举例来说,由实例存储支持的 m1.small 实例的输出如下所示。

ami ephemeral0 root swap

ami 设备是实例所看到的根设备。实例存储卷命名为 ephemeral[0-23]swap 设备用于存储页面文件。如果您还映射了一些 EBS 卷,它们会依次显示为 ebs1ebs2 等。

要了解块储存设备映射中的单个块储存设备的详细信息,可将其名称添加到上述查询,如下所示。

IMDSv2
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0
IMDSv1
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0

实例类型将决定对实例可用的实例存储卷的数量。如果块储存设备映射中的实例存储卷数超过了对实例可用的实例存储卷数,则其他卷将被忽略。要查看实例的实例存储卷,请运行 lsblk 命令。要了解每种实例类型支持的实例存储卷数,请参阅实例存储卷