

# Amazon EC2 实例上卷的块设备映射
<a name="block-device-mapping-concepts"></a>

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

**Topics**
+ [块储存设备映射的概念](#block-device-mapping-def)
+ [将块设备映射添加到 AMI](ami-block-device-mapping.md)
+ [将块设备映射添加到 Amazon EC2 实例](instance-block-device-mapping.md)

## 块储存设备映射的概念
<a name="block-device-mapping-def"></a>

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

Amazon EC2 支持两种类型的块储存设备：
+ 实例存储卷（虚拟设备，其底层硬件实际附加到该实例的主机）
+ EBS 卷（远程存储设备）

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

**Topics**
+ [块储存设备映射条目](#parts-of-a-block-device-mapping)
+ [块储存设备映射实例存储注意事项](#instance_store_caveats)
+ [块储存设备映射示例](#block-device-mapping-ex)
+ [如何使设备在操作系统可用](#bdm-to-os)

### 块储存设备映射条目
<a name="parts-of-a-block-device-mapping"></a>

当您创建块储存设备映射时，可以为需要附加到该实例的每个块储存设备指定以下信息：
+ 在 Amazon EC2 内使用的设备名称。在装载卷时，实例的块储存设备驱动程序将分配实际卷名称。分配的名称可以与 Amazon EC2 建议的名称不同。有关更多信息，请参阅[Amazon EC2 实例上卷的设备名称](device_naming.md)。

对于实例存储卷，您还可以指定以下信息：
+ 虚拟设备：`ephemeral[0-23]`。请注意，对您的实例可用的实例存储卷的数量和大小因实例类型而异。

对于 NVMe 实例存储卷，以下信息也适用：
+ 这些卷将自动枚举并分配设备名称；将这些卷包含在块储存设备映射中将不起作用。

对于 EBS 卷，您还可以指定以下信息：
+ 用于创建块设备的快照的 ID（snap-*xxxxxxxx*）。只要您指定卷大小，此值为可选。您不能指定已归档快照的 ID。
+ 卷的大小（以 GiB 计算）。所指定的大小必须大于等于指定快照的大小。
+ 是否在实例终止时删除卷（`true` 或 `false`）。根卷的默认值为 `true`，附加的卷的默认值为 `false`。当您创建 AMI 时，其块储存设备映射会从该实例继承此设置。当您启动某个实例时，该实例会从 AMI 继承此设置。
+ 卷类型：`gp2` 和（`gp3`适用于通用型 SSD）、`io1` 和（`io2`适用于预置 IOPS SSD）、`st1`（适用于吞吐量优化型 HDD）、`sc1`（适用于 Cold HDD）或（`standard`适用于磁介质卷）。
+ 该卷支持的每秒进行读写操作的次数（IOPS）。（仅与 `io1` 和 `io2` 卷一起使用。）
+ 某些实例类型支持多个 EBS 卡。您可以通过指定 EBS 卡索引来选择要附加的卷的 EBS 卡。有关更多信息，请参阅 [EBS 卡](ebs_cards.md#ebs_cards.title)。

### 块储存设备映射实例存储注意事项
<a name="instance_store_caveats"></a>

使用在其块储存设备映射中具有实例存储卷的 AMIs 启动实例时，要考虑一些注意事项。
+ 有些实例类型包含的实例存储卷多于其他类型，而有些实例类型根本不包含实例存储卷。如果实例类型支持一个实例存储卷，而且 AMI 具有用于两个实例存储卷的映射，则实例会在启动时带有一个实例存储卷。
+ 实例存储卷只能在启动时进行映射。不能停止没有实例存储卷的实例（例如 `t2.micro`），将实例更改为支持实例存储卷的类型，然后重新启动带有实例存储卷的实例。但是，您可以从实例创建 AMI 并以支持实例存储卷的实例类型启动它，然后将这些实例存储卷映射到实例。
+ 如果您启动映射了实例存储卷的实例，然后停止实例，将它更改为具有较少实例存储卷的实例类型并重新启动它，则来自初始启动的实例存储卷映射会出现在实例元数据中。但是，实例使用的实例存储卷不能超出该实例类型支持的最大数量。
**注意**  
实例停止时，实例存储卷上的所有数据都会丢失。
+ 根据启动时的实例存储容量，M3 实例可能会在启动时忽略 AMI 实例存储块设备映射（除非在启动时指定它们）。您应在启动时指定实例存储块储存设备映射（即使启动的 AMI 在 AMI 中映射了实例存储卷），以确保实例存储卷在实例启动时可用。

### 块储存设备映射示例
<a name="block-device-mapping-ex"></a>

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

![\[实例、实例存储卷以及 EBS 卷之间的关系。\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/block_device_mapping_figure.png)


请注意，此块储存设备映射示例是在本主题中的示命令和 API 中例使用的。您可以在[为 AMI 指定块储存设备映射](ami-block-device-mapping.md#create-ami-bdm)和[在启动实例时更新块储存设备映射](instance-block-device-mapping.md#Using_OverridingAMIBDM)中找到创建块储存设备映射的示例命令和 API。

### 如何使设备在操作系统可用
<a name="bdm-to-os"></a>

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

**Linux 实例**：该实例首次启动时，在块设备映射中指定的设备名称会被映射到其相应的块设备。默认情况下，实例类型决定要格式化并装载哪个实例存储卷。您可以在启动时装载额外的实例存储卷，前提是不得超过您的实例类型所允许的实例存储卷数量。有关更多信息，请参阅[适用于 EC2 实例的实例存储临时块存储](InstanceStorage.md)。实例的块储存设备驱动程序决定在格式化和装载卷时要使用哪些设备。

**Windows 实例**：首次启动实例时，将在块设备映射中指定的设备名称映射到其相应的块设备，然后 Ec2Config 服务会初始化并挂载这些驱动器。根卷装载为 `C:\`。实例存储卷装载为 `Z:\`、`Y:\` 等。安装 EBS 卷时，可使用任何可用盘符进行装载。然而，您可以配置如何将驱动器号分配给 EBS 卷；要了解更多信息，请参阅 [Amazon EC2 Windows 实例上的 Windows 启动代理](configure-launch-agents.md)。