关于 RAID

被称为 RAID(独立磁盘冗余阵列)的存储技术将多个物理磁盘组合成一个逻辑单元。通常可以将驱动器组合起来以提供数据冗余,或将逻辑单元的大小扩展到超出物理磁盘的能力范围,或两者兼而有之。该技术还允许在不关闭系统的情况下进行硬件维护。

RAID 组织的类型在 RAID Wiki 中有描述。

请注意,虽然 RAID 可防范磁盘故障,但它不能替代备份。删除的文件在 RAID 阵列的所有磁盘上仍会被删除。现代备份通常通过 rsync-3.4.4 完成。

RAID 实现有三种主要类型:硬件 RAID、基于 BIOS 的 RAID 和软件 RAID。

硬件 RAID

基于硬件的 RAID 通过专有硬件和数据布局提供功能。控制和配置通常通过固件以及设备制造商提供的可执行程序来完成。这些功能通常通过 PCI 卡提供,但也有部分 RAID 组件集成在主板上。硬件 RAID 也可以以独立机箱的形式提供。

基于硬件的 RAID 的一个优点是,驱动器作为逻辑驱动器提供给操作系统,无需依赖操作系统的配置。

缺点包括将驱动器从一个系统转移到另一个系统、更新固件或更换发生故障的 RAID 硬件时存在困难。

基于 BIOS 的 RAID

某些计算机在系统 BIOS 中提供类似硬件的 RAID 实现。有时这被称为“伪”RAID,因为其功能通常集成在固件中,没有任何硬件加速。

基于 BIOS 的 RAID 的优点和缺点通常与硬件 RAID 相同,但额外缺点是没有硬件加速。

在某些情况下,基于 BIOS 的 RAID 固件默认启用(例如某些 DELL 系统)。如果需要软件 RAID,则必须在 BIOS 中明确禁用此选项。

软件 RAID

基于软件的 RAID 是最灵活的 RAID 形式。它易于安装和更新,并且对系统中可用任何驱动器的全部或部分提供完整功能。在 BLFS 中,RAID 软件位于 mdadm-4.6

使用 mdadm 配置 RAID 设备非常简单。通常,设备在 /dev 目录中创建为 /dev/mdx,其中 x 是一个整数。

创建 RAID 阵列的第一步是使用分区软件(如 fdiskparted-3.7)定义阵列所需的分区。通常,参与 RAID 阵列的每个驱动器上会有一个分区,但这并非严格必要。在本示例中,将有四个磁盘驱动器: /dev/sda/dev/sdb/dev/sdc/dev/sdd。它们的分区如下:

分区       大小     类型               用途
sda1:      100 MB   fd Linux raid auto  /boot    (RAID 1)/dev/md0
sda2:       10 GB   fd Linux raid auto  /        (RAID 1)/dev/md1
sda3:        2 GB   83 Linux swap       swap
sda4       300 GB   fd Linux raid auto  /home    (RAID 5)/dev/md2

sdb1:      100 MB   fd Linux raid auto  /boot    (RAID 1)/dev/md0
sdb2:       10 GB   fd Linux raid auto  /        (RAID 1)/dev/md1
sdb3:        2 GB   83 Linux swap       swap
sdb4       300 GB   fd Linux raid auto  /home    (RAID 5)/dev/md2

sdc1:       12 GB   fd Linux raid auto  /usr/src (RAID 0)/dev/md3
sdc2:      300 GB   fd Linux raid auto  /home    (RAID 5)/dev/md2

sdd1:       12 GB   fd Linux raid auto  /usr/src (RAID 0)/dev/md3
sdd2:      300 GB   fd Linux raid auto  /home    (RAID 5)/dev/md2 

在这种安排中,创建了一个单独的引导分区作为第一个小型 RAID 阵列,以及一个根文件系统作为第二个 RAID 阵列,两者都是镜像。第三个分区是一个大型(约 1 TB)阵列,用于 /home 目录。这提供了跨多个设备条带化数据的能力,提高了读写大文件的速度。最后,创建了第四个阵列,将两个分区连接成一个更大的设备。

[注意]

注意

所有 mdadm 命令都必须以 root 用户身份运行。

要创建这些 RAID 阵列,命令为:

/sbin/mdadm -Cv /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
/sbin/mdadm -Cv /dev/md1 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2
/sbin/mdadm -Cv /dev/md3 --level=0 --raid-devices=2 /dev/sdc1 /dev/sdd1
/sbin/mdadm -Cv /dev/md2 --level=5 --raid-devices=4 \
        /dev/sda4 /dev/sdb4 /dev/sdc2 /dev/sdd2 

创建的设备可以按设备进行检查。例如,要查看 /dev/md1 的详细信息,请使用 /sbin/mdadm --detail /dev/md1

        Version : 1.2
  Creation Time : Tue Feb  7 17:08:45 2012
     Raid Level : raid1
     Array Size : 10484664 (10.00 GiB 10.74 GB)
  Used Dev Size : 10484664 (10.00 GiB 10.74 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Tue Feb  7 23:11:53 2012
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : core2-blfs:0  (local to host core2-blfs)
           UUID : fcb944a4:9054aeb2:d987d8fe:a89121f8
         Events : 17

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1

至此,可以使用所选的文件系统(例如 ext3、ext4、xfsprogs-7.0.1 等)格式化这些分区。然后可以挂载格式化后的分区。/etc/fstab 文件可以使用创建的设备在启动时挂载,并且 /boot/grub/grub.cfg 中的 Linux 命令行可以指定 root=/dev/md1

[注意]

注意

交换设备应照常在 /etc/fstab 文件中指定。内核通常将交换数据条带化到多个交换文件上,因此不应将其作为 RAID 阵列的一部分。

有关 RAID 设备的更多选项和管理细节,请参阅 man mdadm

有关监控 RAID 阵列和处理问题的更多详细信息,请参见 Linux RAID Wiki