

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

# Amazon EBS 和 RAID 組態
<a name="raid-config"></a>

運用 Amazon EBS，您可以使用能夠搭配傳統裸機伺服器使用的任何標準 RAID 組態 (只要執行個體的作業系統支援這個特定 RAID 組態)。這是因為所有的 RAID 都在軟體層面實現。

Amazon EBS 磁碟區的資料會複製到可用區域中的多個伺服器上，以防止在任何單一元件故障時遺失資料。這項複寫功能讓 Amazon EBS 磁碟區的可靠性，比典型的商用磁碟機高出 10 倍。如需詳細資訊，請參閱 [Amazon EBS 功能](https://aws.amazon.com/ebs/features/)。

**Topics**
+ [RAID 組態選項](#raid-config-options)
+ [建立 RAID 0 陣列](#create-raid-array)
+ [建立 RAID 陣列磁碟區的快照](#ebs-snapshots-raid-array)

## RAID 組態選項
<a name="raid-config-options"></a>

建立 RAID 0 陣列可讓檔案系統的效能達到更高的水準，超越在單一 Amazon EBS 磁碟區上佈建所能實現的效能。當輸入/輸出效能極為重要時，請使用 RAID 0。使用 RAID 0，輸入/輸出等量分佈於各磁碟區。如果新增磁碟區，就會直接增加資料吞吐量和 IOPS。不過，請記住，等量磁碟區的效能受限於集合中效能最差的磁碟區，而集合中單個磁碟區的遺失會導致陣列的完全資料遺失。

RAID 0 陣列所產生的容量大小，是其中磁碟區大小的加總，頻寬是其中磁碟區可用頻寬的總和。例如，具有 4，000 個佈建 IOPS 的兩個 500 GiB `io1`磁碟區會建立一個 1，000 GiB RAID 0 陣列，其可用頻寬為 8，000 IOPS 和每秒 1，000 MiB 的輸送量。

**重要**  
Amazon EBS 不建議使用 RAID 5 和 RAID 6，因為這些 RAID 模式的奇偶校驗寫入作業，會耗用一些磁碟區可用的 IOPS。取決於 RAID 陣列的組態，這些 RAID 模式能夠提供的可用 IOPS，可能會比 RAID 0 組態少 20% 到 30%。增加的成本也是採用這些 RAID 模式的一個因素；使用相同的磁碟區大小和速度時，2 個磁碟區的 RAID 0 陣列，其效能高於成本為其兩倍的 4 磁碟區 RAID 6 陣列。  
也不建議 RAID 1 與 Amazon EBS 搭配使用。相較於非 RAID 組態，RAID 1 需要更多的 Amazon EC2 至 Amazon EBS 頻寬，因為資料同時寫入多個磁碟區。此外，RAID 1 不會提供任何寫入效能改善。

## 建立 RAID 0 陣列
<a name="create-raid-array"></a>

請使用下列步驟來建立 RAID 0 陣列。

**考量**
+ 執行此程序之前，您必須決定 RAID 0 陣列的大小，以及要佈建的 IOPS 數量。
+ 為陣列建立磁碟區，並且讓這些磁碟區具有相同的容量大小和 IOPS 效能值。所建立的陣列，請務必不要超過 EC2 執行個體的可用頻寬。
+ 您應避免從 RAID 磁碟區開機。如果其中一個裝置失敗，您可能無法啟動作業系統。

### Linux 執行個體
<a name="create-raid-array-linux"></a>

**在 Linux 上建立 RAID 0 陣列**

1. 為陣列建立 Amazon EBS 磁碟區。如需詳細資訊，請參閱[建立 Amazon EBS 磁碟區](ebs-creating-volume.md)。

1. 將 Amazon EBS 磁碟區連結到您想要用來在其上託管陣列的執行個體。如需詳細資訊，請參閱 [將 Amazon EBS 磁碟區連接至 Amazon EC2 執行個體](ebs-attaching-volume.md)。

1. 使用 **mdadm** 指令，從新連結的 Amazon EBS 磁碟區建立邏輯 RAID 裝置。請在 *number\$1of\$1volumes* 填入陣列中的磁碟區數量，在 *device\$1name* 填入陣列中各磁碟區的裝置名稱 (例如 `/dev/xvdf`)。您也可以將陣列的 *MY\$1RAID* 換成自己獨特的名稱。
**注意**  
您可以利用 **lsblk** 命令列出執行個體上的裝置，來尋找裝置的名稱。

   若要建立 RAID 0 陣列，請執行下列命令 (請注意用來分割陣列的 `--level=0` 選項)：

   ```
   [ec2-user ~]$ sudo mdadm --create --verbose /dev/md0 --level=0 --name=MY_RAID --raid-devices=number_of_volumes device_name1 device_name2
   ```
**提示**  
如果發生 `mdadm: command not found` 錯誤，請使用下列命令來安裝 mdadm：`sudo yum install mdadm`。

1.  讓 RAID 陣列有充分的時間進行初始化與同步。您可以使用下列指令來追蹤這些作業的進度：

   ```
   [ec2-user ~]$ sudo cat /proc/mdstat
   ```

   下列為範例輸出：

   ```
   Personalities : [raid0]
   md0 : active raid0 xvdc[1] xvdb[0]
         41910272 blocks super 1.2 512k chunks
   
   unused devices: <none>
   ```

   一般而言，您可以利用下列的指令，來顯示關於 RAID 陣列的詳細資訊：

   ```
   [ec2-user ~]$ sudo mdadm --detail /dev/md0
   ```

   下列為範例輸出：

   ```
   /dev/md0:
              Version : 1.2
        Creation Time : Wed May 19 11:12:56 2021
           Raid Level : raid0
           Array Size : 41910272 (39.97 GiB 42.92 GB)
         Raid Devices : 2
        Total Devices : 2
          Persistence : Superblock is persistent
   
          Update Time : Wed May 19 11:12:56 2021
                State : clean
       Active Devices : 2
      Working Devices : 2
       Failed Devices : 0
        Spare Devices : 0
   
           Chunk Size : 512K
   
   Consistency Policy : none
   
                 Name : MY_RAID
                 UUID : 646aa723:db31bbc7:13c43daf:d5c51e0c
               Events : 0
   
       Number   Major   Minor   RaidDevice State
          0     202       16        0      active sync   /dev/sdb
          1     202       32        1      active sync   /dev/sdc
   ```

1. 在 RAID 陣列上建立檔案系統，並賦予該檔案系統標籤，以在之後掛載此系統時使用。例如，若要建立具備 *MY\$1RAID* 標籤的 ext4 檔案系統，請執行下列命令：

   ```
   [ec2-user ~]$ sudo mkfs.ext4 -L MY_RAID /dev/md0
   ```

   取決於應用程式的要求或作業系統的限制，您可以使用不同的檔案系統類型，例如 ext3 或 XFS (關於對應的檔案系統建立指令，請參閱檔案系統的文件)。

1. 為確保 RAID 陣列會在開機時自動重組，請建立包含 RAID 資訊的組態檔案：

   ```
   [ec2-user ~]$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf
   ```
**注意**  
如果您使用 Linux 發行版本而非 Amazon Linux，您可能需要修改此命令。例如，您可能需要將檔案置於不同的位置，或者您可能需要新增 `--examine` 參數。如需詳細資訊，請在您的 Linux 執行個體上執行 **man mdadm.conf**。

1. 建立新的 ramdisk 映像，以針對新的 RAID 組態，正確地預先載入區塊型儲存設備模組。

   ```
   [ec2-user ~]$ sudo dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
   ```

1. 為 RAID 陣列建立掛載點。

   ```
   [ec2-user ~]$ sudo mkdir -p /mnt/raid
   ```

1. 最後，請在您所建立的掛載點上掛載 RAID 裝置：

   ```
   [ec2-user ~]$ sudo mount LABEL=MY_RAID /mnt/raid
   ```

   您的 RAID 裝置現在已可使用。

1. (選用) 若要在每次系統開機時掛載此 Amazon EBS 磁碟區，請在 `/etc/fstab` 檔案中加入該裝置的資料。

   1. 建立 `/etc/fstab` 檔案的備份，如果在編輯檔案時不小心損毀或刪除了此檔案，即可使用檔案的備份。

      ```
      [ec2-user ~]$ sudo cp /etc/fstab /etc/fstab.orig
      ```

   1. 使用您喜愛的文字編輯器 (例如 `/etc/fstab` 或 **nano**) 來開啟 **vim** 檔案。

   1. 將「`UUID=`」開頭的所有程式行暫時變成註解行，然後使用下列的格式，在檔案的結尾為 RAID 磁碟區加入新的一行：

      ```
      device_label mount_point file_system_type fs_mntops fs_freq fs_passno
      ```

      此行中最後三個欄位是檔案系統掛載點、檔案系統的傾印頻率，以及開機時檔案系統檢查完成的順序。如果您不知道這些值應當設為多少，請使用下例中的值 (`defaults,nofail 0 2)`。如需有關 `/etc/fstab` 項目的詳細資訊，請參閱 **fstab** 手冊頁 (透過在命令列中輸入 **man fstab**)。例如，若要在具有 MY\$1RAID 標籤的裝置上，於掛載點 `/mnt/raid` 掛載 ext4 檔案系統，請在 `/etc/fstab` 中加入下列項目。
**注意**  
如果想要在不掛載此磁碟區的狀態下啟動執行個體 (例如，此磁碟區即可在不同的執行個體之間來回移動)，應加入 `nofail` 掛載選項，以在掛載磁碟區的作業出現錯誤時，仍然讓執行個體繼續啟動。在 Debian 的衍生產品，例如 Ubuntu，也必須加入 `nobootwait` 掛載選項。

      ```
      LABEL=MY_RAID       /mnt/raid   ext4    defaults,nofail        0       2
      ```

   1. 在將新的項目加入 `/etc/fstab` 之後，您需要檢查項目是否能夠運作。執行 **sudo mount -a** 命令在 `/etc/fstab` 中掛載所有檔案系統。

      ```
      [ec2-user ~]$ sudo mount -a
      ```

      如果先前的指令並未發生錯誤，則 `/etc/fstab` 檔案沒有問題，檔案系統將會在下次啟動時自動掛載。如果指令發生了任何錯誤，請檢驗錯誤，並試著修正 `/etc/fstab`。
**警告**  
`/etc/fstab` 檔案中的錯誤可能會造成系統無法開機。如果是在 `/etc/fstab` 檔案中具有錯誤的系統，請勿將此系統關機。

   1. (選用) 如果您不確定要如何修正 `/etc/fstab` 錯誤，可以隨時使用下列的指令，來還原備份的 `/etc/fstab` 檔案。

      ```
      [ec2-user ~]$ sudo mv /etc/fstab.orig /etc/fstab
      ```

### Windows 執行個體
<a name="create-raid-array-windows"></a>

**在 Windows 上建立 RAID 0 陣列**

1. 為陣列建立 Amazon EBS 磁碟區。如需詳細資訊，請參閱[建立 Amazon EBS 磁碟區](ebs-creating-volume.md)。

1. 將 Amazon EBS 磁碟區連結到您想要用來在其上託管陣列的執行個體。如需詳細資訊，請參閱 [將 Amazon EBS 磁碟區連接至 Amazon EC2 執行個體](ebs-attaching-volume.md)。

1. 連接至 Windows 執行個體。如需詳細資訊，請參閱[連線至您的 Windows 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connecting_to_windows_instance.html)。

1. 開啓命令提示並輸入 **diskpart** 命令。

   ```
   diskpart
   
   Microsoft DiskPart version 6.1.7601
   Copyright (C) 1999-2008 Microsoft Corporation.
   On computer: WIN-BM6QPPL51CO
   ```

1. 在 `DISKPART` 提示中，利用下列命令來列出可用的磁碟。

   ```
   DISKPART> list disk
   
     Disk ###  Status         Size     Free     Dyn  Gpt
     --------  -------------  -------  -------  ---  ---
     Disk 0    Online           30 GB      0 B
     Disk 1    Online            8 GB      0 B
     Disk 2    Online            8 GB      0 B
   ```

   找出您想要在陣列中使用的磁碟，並記下其磁碟編號。

1. <a name="windows_raid_disk_step"></a>想要在陣列中使用的每個磁碟，都必須是未包含任何現有磁碟區的線上動態磁碟。請利用下列的步驟，來將基本磁碟轉換為動態磁碟，和刪除任何現有的磁碟區。

   1. 利用下列指令來選取想要在陣列中使用的磁碟，將 *n* 換成磁碟的編號。

      ```
      DISKPART> select disk n
      
      Disk n is now the selected disk.
      ```

   1. 如果所選取的磁碟列為 `Offline`，請執行 **online disk** 命令來讓該磁碟上線。

   1. 如果在先前的 `Dyn` 命令輸出中，所選取的磁碟在 **list disk** 欄中未顯示星號，則需要將該磁碟轉換為動態磁碟。

      ```
      DISKPART> convert dynamic
      ```
**注意**  
如果收到磁碟具有寫入保護的錯誤訊息，您可以使用 **ATTRIBUTE DISK CLEAR READONLY** 命令來清除唯讀旗標，然後再次嘗試進行動態磁碟轉換。

   1. 使用 **detail disk** 命令來查看選定磁碟上的現有磁碟區。

      ```
      DISKPART> detail disk
      
      XENSRC PVDISK SCSI Disk Device
      Disk ID: 2D8BF659
      Type   : SCSI
      Status : Online
      Path   : 0
      Target : 1
      LUN ID : 0
      Location Path : PCIROOT(0)#PCI(0300)#SCSI(P00T01L00)
      Current Read-only State : No
      Read-only  : No
      Boot Disk  : No
      Pagefile Disk  : No
      Hibernation File Disk  : No
      Crashdump Disk  : No
      Clustered Disk  : No
      
        Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
        ----------  ---  -----------  -----  ----------  -------  ---------  --------
        Volume 2     D   NEW VOLUME   FAT32  Simple      8189 MB  Healthy
      ```

      記下磁碟區上的任何磁碟區編號。在此範例中，磁碟區編號為 2。如果沒有磁碟區，您可以跳過下一個步驟。

   1. (只有在先前的步驟中有找到磁碟區時才需要) 在前一個步驟中所找到的磁碟上，選取並刪除所有現有的磁碟區。
**警告**  
這項動作會刪除磁碟區上的所有現有資料。

      1. 選取磁碟區，將 *n* 換成磁碟區編號。

         ```
         DISKPART> select volume n
         Volume n is the selected volume.
         ```

      1. 刪除磁碟區。

         ```
         DISKPART> delete volume
         
         DiskPart successfully deleted the volume.
         ```

      1. 針對想要在所選取磁碟上刪除的每個磁碟區，重複這些子步驟。

   1. 針對想要在陣列中使用的每個磁碟，重複執行[Step 6](#windows_raid_disk_step)。

1. 確認想要使用的磁碟現在已成為動態磁碟。在這種情況下，我們使用磁碟 1 和磁碟 2 作為 RAID 磁碟區。

   ```
   DISKPART> list disk
   
     Disk ###  Status         Size     Free     Dyn  Gpt
     --------  -------------  -------  -------  ---  ---
     Disk 0    Online           30 GB      0 B
     Disk 1    Online            8 GB      0 B   *
     Disk 2    Online            8 GB      0 B   *
   ```

1. 建立 raid 陣列。在 Windows 上，RAID 0 磁碟區稱為等量磁碟區。

   若要在磁碟 1 和磁碟 2 上建立等量磁碟區陣列，請使用下列命令 (請注意用來分割陣列的 `stripe` 選項)：

   ```
   DISKPART> create volume stripe disk=1,2
   DiskPart successfully created the volume.
   ```

1. 確認新的磁碟區。

   ```
   DISKPART> list volume
   
     DISKPART> list volume
   
     Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
     ----------  ---  -----------  -----  ----------  -------  ---------  --------
     Volume 0     C                NTFS   Partition     29 GB  Healthy    System
     Volume 1                      RAW    Stripe        15 GB  Healthy
   ```

   請注意，`Type` 欄位現在表示磁碟區 1 是 `stripe` 磁碟區。

1. 請選取磁碟區並進行格式化，以開始使用。

   1. 選取想要進行格式化的磁碟區，將 *n* 換成磁碟區的編號。

      ```
      DISKPART> select volume n
      
      Volume n is the selected volume.
      ```

   1. 進行磁碟區的格式化。
**注意**  
若要進行完整格式化，請略過 `quick` 選項。

      ```
      DISKPART> format quick recommended label="My new volume"
      
        100 percent completed
      
      DiskPart successfully formatted the volume.
      ```

   1. 指派可用的磁碟代號給磁碟區。

      ```
      DISKPART> assign letter f
      
      DiskPart successfully assigned the drive letter or mount point.
      ```

   新的磁碟區現在已可使用。

## 建立 RAID 陣列磁碟區的快照
<a name="ebs-snapshots-raid-array"></a>

如果想要使用快照，來備份 RAID 陣列 EBS 磁碟區中的資料，則必須確保快照的一致性。因為這些磁碟區的快照是個別建立的。如果從未同步的快照還原 RAID 陣列中的 EBS 磁碟區，將會降低陣列的完整性。

若要針對您的 RAID 陣列建立一組一致的快照，請使用 [EBS 多磁碟區快照](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSnapshots.html)。多磁碟區快照可讓您跨多個連接到 EC2 執行個體的 EBS 磁碟區，擷取時間點、資料協調性和當機一致性快照。由於是跨多個 EBS 磁碟區自動建立快照，因此您不需要為了確保當機一致性，而停止執行個體或在磁碟區之間進行協調。如需詳細資訊，請參閱建立 [Amazon EBS 快照下建立多磁碟區快照](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-creating-snapshot.html)的步驟。