

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將區塊型儲存設備映射新增至 Amazon EC2 執行個體
<a name="instance-block-device-mapping"></a>

根據預設，您所啟動的執行個體包含啟動執行個體之 AMI 區塊型設備映射中指定的任何儲存設備。您可在啟動執行個體時指定變更執行個體的區塊型設備映射，這些更新將覆寫或合併 AMI 的區塊型設備映射。

**限制**
+ 如為根磁碟區，只能修改：磁碟區大小、磁碟區類型和 **Delete on Termination (在終止時刪除)** 旗標。
+ 修改 EBS 磁碟區時，您無法減少其大小。因此，您所指定的快照大小必須等於或大於 AMI 區塊型設備映射中的快照。

**Topics**
+ [

## 啟動執行個體時更新區塊型儲存裝置對應
](#Using_OverridingAMIBDM)
+ [

## 更新執行中執行個體的區塊型儲存裝置對應
](#update-instance-bdm)
+ [

## 檢視執行個體區塊型儲存裝置對應的 EBS 磁碟區
](#view-instance-bdm)
+ [

## 檢視執行個體區塊型儲存裝置對應的執行個體存放區的磁碟區
](#bdm-instance-metadata)

## 啟動執行個體時更新區塊型儲存裝置對應
<a name="Using_OverridingAMIBDM"></a>

您可在啟動執行個體時新增 EBS 磁碟區和執行個體存放磁碟區至執行個體。但請注意，更新執行個體的區塊型設備映射，不會永久變更啟動執行個體之 AMI 的區塊型設備映射。

------
#### [ Console ]

**若要在啟動時更新執行個體的磁碟區**

1. 遵循程序來[啟動執行個體](ec2-launch-instance-wizard.md)，但在完成下列步驟以更新磁碟區之前，請勿啟動執行個體。

1. (選用) 若要新增磁碟區，請選擇**設定儲存**、**新增新磁碟區**。選取磁碟區大小和磁碟區類型。

1. (選用) 若要隱藏由 AMI 的區塊型儲存設備映射指定的磁碟區，請選擇**設定儲存**、**移除**。

1. (選用) 若要修改 EBS 磁碟區的組態，請在**設定儲存**窗格中選擇**進階**。展開磁碟區的資訊，並進行任何所需變更。

1. 在 **Summary** (摘要) 面板中，檢閱您的執行個體組態，然後選擇 **Launch instance** (啟動執行個體)。如需詳細資訊，請參閱[使用主控台中的啟動執行個體精靈，啟動 EC2 執行個體](ec2-launch-instance-wizard.md)。

------
#### [ AWS CLI ]

**若要在啟動時更新執行個體的磁碟區**  
請使用 `--block-device-mappings` 選項並搭配 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令。

```
--block-device-mappings file://mapping.json
```

例如，假設 AMI 區塊型儲存設備映射可指定下列內容：
+ `/dev/xvda` - EBS 根磁碟區
+ `/dev/sdh` - 從 `snap-1234567890abcdef0` 中建立的 EBS 磁碟區
+ `/dev/sdj` - 空白 EBS 磁碟區，大小為 `100`
+ `/dev/sdb` - 執行個體儲存體磁碟區 `ephemeral0`

假設以下是 `mapping.json` 中的執行個體區塊型儲存設備映射。

```
[
    {
        "DeviceName": "/dev/xvda",
        "Ebs": {
            "VolumeSize": 100
        }
    },
    {
        "DeviceName": "/dev/sdj",
        "NoDevice": ""
    },
    {
        "DeviceName": "/dev/sdh",
        "Ebs": {
            "VolumeSize": 300
        }
    },
    {
        "DeviceName": "/dev/sdc",
        "VirtualName": "ephemeral1"
    }
]
```

執行個體區塊型儲存設備映射會執行下列動作：
+ 覆寫根磁碟區的大小，`/dev/xvda`，將其增加到 100 GiB。
+ 防止 `/dev/sdj` 連接至執行個體。
+ 覆寫 `/dev/sdh` 的大小，將其增加到 300 GiB。請注意，不需要再次指定快照 ID。
+ 新增暫時性磁碟區，`/dev/sdc`。如果執行個體類型不支援多重執行個體儲存體磁碟區，這將沒有效果。如果執行個體類型支援 NVMe 執行個體儲存體磁碟區，會自動列舉這些磁碟區並包含在執行個體區塊型儲存設備映射中，且無法覆寫。

------
#### [ PowerShell ]

**若要在啟動時更新執行個體的磁碟區**  
搭配使用 `-BlockDeviceMapping` 參數與 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet 以及 `-BlockDeviceMapping` 參數。

```
-BlockDeviceMapping $bdm
```

假設以下是 `$bdm` 中的執行個體區塊型儲存設備映射。

```
$bdm = @()

$root = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$root.DeviceName = "/dev/xvda"
$ebs1 = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice
$ebs1.VolumeSize = 100
$root.Ebs = $ebs1
$bdm += $root

$sdj = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$sdj.DeviceName = "/dev/sdj"
$sdj.NoDevice = ""
$bdm += $sdj

$sdh = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$sdh.DeviceName = "/dev/sdh"
$ebs2 = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice
$ebs2.VolumeSize = 300
$sdh.Ebs = $ebs2
$bdm += $sdh

$sdc = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$sdc.DeviceName = "/dev/sdc"
$sdc.VirtualName = "ephemeral1"
$bdm += $sdc
```

執行個體區塊型儲存設備映射會執行下列動作：
+ 覆寫根磁碟區的大小，`/dev/xvda`，將其增加到 100 GiB。
+ 防止 `/dev/sdj` 連接至執行個體。
+ 覆寫 `/dev/sdh` 的大小，將其增加到 300 GiB。請注意，不需要再次指定快照 ID。
+ 新增暫時性磁碟區，`/dev/sdc`。如果執行個體類型不支援多重執行個體儲存體磁碟區，這將沒有效果。如果執行個體類型支援 NVMe 執行個體儲存體磁碟區，會自動列舉這些磁碟區並包含在執行個體區塊型儲存設備映射中，且無法覆寫。

------

## 更新執行中執行個體的區塊型儲存裝置對應
<a name="update-instance-bdm"></a>

您不需要為了變更屬性而停止執行個體。

------
#### [ AWS CLI ]

**若要更新執行中執行個體的區塊型儲存設備映射**  
使用 [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) 命令。

新增 `--block-device-mappings` 選項：

```
--block-device-mappings file://mapping.json
```

在 `mapping.json` 中，指定更新。例如，下列更新會將根磁碟區變更為持續存在。

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

------
#### [ PowerShell ]

**若要更新執行中執行個體的區塊型儲存設備映射**  
使用 [Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) cmdlet。

新增 `-BlockDeviceMapping` 選項：

```
-BlockDeviceMapping $bdm
```

在 `bdm` 中，指定更新。例如，下列更新會將根磁碟區變更為持續存在。

```
$ebd = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice
$ebd.DeleteOnTermination = false
$bdm = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$bdm.DeviceName = "/dev/sda1"
$bdm.Ebs = $ebd
```

------

## 檢視執行個體區塊型儲存裝置對應的 EBS 磁碟區
<a name="view-instance-bdm"></a>

您可輕鬆列舉映射至執行個體的 EBS 磁碟區。

------
#### [ Console ]

**若要檢視執行個體的 EBS 磁碟區**

1. 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇**執行個體**。

1. 選取執行個體，並查看**儲存體**索引標籤中顯示的詳細資訊。根磁碟區至少具有以下資訊 (其中**根裝置**一詞等同於**根磁碟區**)：
   + **根裝置類型** (例如：** EBS**)
   + **Root device name (根裝置名稱)** (例如：`/dev/xvda`)
   + **區塊型儲存設備** (例如：`/dev/xvda`、`/dev/sdf` 和 `/dev/sdj`)

   如果執行個體是使用區塊型儲存裝置對應的其他 EBS 磁碟區來啟動，則其會顯示在 **Block devices (區塊型儲存裝置)**。任何執行個體存放區的磁碟區都不會顯示在此索引標籤上。

1. 若要顯示 EBS 磁碟區的其他資訊，請選擇其磁碟區 ID 以移至磁碟區頁面。

------
#### [ AWS CLI ]

**若要檢視執行個體的 EBS 磁碟區**  
使用 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令。

```
aws ec2 describe-instances \
    --instance-ids i-1234567890abcdef0 \
    --query Reservations[*].Instances[0].BlockDeviceMappings
```

------
#### [ PowerShell ]

**若要檢視執行個體的 EBS 磁碟區**  
使用 [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet。

```
(Get-EC2Instance -InstanceId i-0bac57d7472c89bac).Instances.BlockDeviceMappings
```

------

## 檢視執行個體區塊型儲存裝置對應的執行個體存放區的磁碟區
<a name="bdm-instance-metadata"></a>

執行個體類型會決定執行個體可用執行個體儲存體磁碟區的數量和類型。如果區塊型設備映射中的執行個體存放磁碟區的數量，超過執行個體可用的執行個體存放磁碟區，請忽略額外的磁碟區。若要檢視執行個體的執行個體儲存體磁碟區，請執行 **lsblk**命令 (Linux 執行個體) 或開啟 **Windows Disk Management** (Windows 執行個體)。若要了每個解執行個體類型支援多少執行個體儲存體磁碟區，請參閱 [Amazon EC2 執行個體類型規格](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-instance-type-specifications.html)。

檢視執行個體的區塊型設備映射時，您只會看見 EBS 磁碟區，而非執行個體存放磁碟區。您用來檢視執行個體的執行個體存放區磁碟區的方法取決於磁碟區類型。



### NVMe 執行個體存放區磁碟區
<a name="nvme-instance-store"></a>

#### Linux 執行個體
<a name="nvme-instance-store-linux"></a>

您可以使用 NVMe 命令列套件 ([nvme-cli](https://github.com/linux-nvme/nvme-cli)) 來查詢區塊型設備映射中的 NVMe 執行個體存放區磁碟區。在您的執行個體上下載並安裝套件，然後執行下列命令。

```
[ec2-user ~]$ sudo nvme list
```

以下是執行個體的範例輸出。Model (模型) 欄中的文字指出磁碟區是 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         ...
```

#### Windows 執行個體
<a name="nvme-instance-store-windows"></a>

您可以使用磁碟管理或 PowerShell 同時列出 EBS 和執行個體儲存體 NVMe 磁碟區。如需詳細資訊，請參閱[將 Amazon EC2 Windows 執行個體上的 NVMe 磁碟映射至磁碟區](windows-list-disks-nvme.md)。

### HDD 或 SSD 執行個體存放區磁碟區
<a name="hdd-ssd-instance-store"></a>

您可以使用執行個體中繼資料來查詢區塊型設備映射中的 HDD 或 SSD 執行個體存放區磁碟區。不包含 NVMe 執行個體存放磁碟區。

執行個體中繼資料所有請求的基底 URI 為 `http://169.254.169.254/latest/`。如需詳細資訊，請參閱[使用執行個體中繼資料管理您的 EC2 執行個體](ec2-instance-metadata.md)。

#### Linux 執行個體
<a name="hdd-ssd-instance-store-linux"></a>

首先，連接至執行中的執行個體。從執行個體使用此查詢，取得其區塊型設備映射。

------
#### [ 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" 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 磁碟區，其將顯示為 `ebs1`、`ebs2` 等等。

若要取得區塊型設備映射中個別區塊型儲存設備的詳細資訊，請將其名稱附加到先前的查詢，如下所示。

------
#### [ 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" 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
```

------

#### Windows 執行個體
<a name="hdd-ssd-instance-store-windows"></a>

首先，連接至執行中的執行個體。從執行個體使用此查詢，取得其區塊型設備映射。

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/block-device-mapping/
```

回應將包含執行個體的區塊型儲存設備名稱。例如，執行個體存放區支援的 `m1.small` 執行個體的輸出看起來如下。

```
ami
ephemeral0
root
swap
```

`ami` 設備是執行個體看到的根磁碟區。執行個體存放磁碟區將命名為 `ephemeral[0-23]`。`swap` 設備用於分頁檔。如果您也映射了 EBS 磁碟區，其將顯示為 `ebs1`、`ebs2` 等等。

若要取得區塊型設備映射中個別區塊型儲存設備的詳細資訊，請將其名稱附加到先前的查詢，如下所示。

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0
```