

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon EBS 和 RAID 配置
<a name="raid-config"></a>

通过 Amazon EBS，您可以使用可与传统裸机服务器结合使用的任何标准 RAID 配置，只要实例的操作系统支持该特定 RAID 配置。这是因为，所有 RAID 都是在软件级别上实现的。

Amazon EBS 卷的数据可在可用区内多个服务器间进行复制，以防由于任何单个组件发生故障导致数据丢失。此复制使得 Amazon EBS 卷的可靠程度比普通磁盘高 10 倍。有关更多信息，请参阅 [Amazon EBS features](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>

相比在单个 Amazon EBS 卷上配置，通过创建 RAID 0 阵列，文件系统可以获得更高性能。如果 I/O 性能至关重要，请使用 RAID 0。I/O 通过 RAID 0 在卷内以条带状分布。如果您添加卷，则会直接增加吞吐量和 IOPS。但是，请记住，条带的性能仅限于集中性能最差的卷，并且集中的单个卷丢失会导致阵列数据完全丢失。

RAID 0 阵列的最终大小是阵列中各个卷的大小之和，带宽是阵列中各个卷的可用带宽之和。例如，预调配 IOPS 为 4,000 的两个 500 GiB `io1` 卷将创建可用带宽为 8,000 IOPS、吞吐量为 1,000 MiB/s 的 1,000 GiB RAID 0 阵列。

**重要**  
不建议对 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 1 需要比非 RAID 配置更大的 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*，用阵列中每个卷的设备名称（例如 `/dev/xvdf`）替换 *device\$1name*。您还可以将 *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 Image 以为新的 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**）。例如，要在设备上的装载点 `/mnt/raid` 装载带 MY\$1RAID 标签的 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)中有关创建多卷快照的步骤。