18.5. 软 RAID 设备

Originally contributed by Warren Block.

一些主板和扩展卡添加一些简单的硬件,通常只是一个ROM,允许计算机从RAID阵列启动。启动后,对RAID阵列的访问由在计算机主处理器上运行的软件处理。此硬件辅助软件RAID提供不依赖于任何特定操作系统的RAID阵列,这些阵列甚至在加载操作系统之前也能正常工作。

支持多个级别的RAID,具体取决于正在使用的硬件。完整列表请参阅graid(8)

graid(8)需要geom_raid.ko内核模块,从FreeBSD 9.1 以后GENERIC 内核中已有此模块。如果需要,可以使用graid load手动加载。

18.5.1. 创建阵列

RAID设备通常有一个菜单,可以在计算机启动时按特殊键输入。该菜单可用于创建和删除RAID阵列。graid(8)还可以直接从命令行创建数组。

graid label用于创建新阵列。此示例中使用的主板具有英特尔软件RAID芯片组,因此指定了英特尔元数据格式。新的数组被赋予标签gm0,它是一个镜像(RAID1),并使用驱动器ada0ada1

小心:

当驱动器上的一些空间被制成新阵列时,这些空间将被覆盖。注意备份数据!

# graid label Intel gm0 RAID1 ada0 ada1
GEOM_RAID: Intel-a29ea104: Array Intel-a29ea104 created.
GEOM_RAID: Intel-a29ea104: Disk ada0 state changed from NONE to ACTIVE.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:0-ada0 state changed from NONE to ACTIVE.
GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from NONE to ACTIVE.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NONE to ACTIVE.
GEOM_RAID: Intel-a29ea104: Array started.
GEOM_RAID: Intel-a29ea104: Volume gm0 state changed from STARTING to OPTIMAL.
Intel-a29ea104 created
GEOM_RAID: Intel-a29ea104: Provider raid/r0 for volume gm0 created.

状态检查显示新镜像已准备就绪,可供使用:

# graid status
   Name   Status  Components
raid/r0  OPTIMAL  ada0 (ACTIVE (ACTIVE))
                  ada1 (ACTIVE (ACTIVE))

阵列设备出现在/dev/raid/中。第一个阵列称为r0。其他阵列(如果存在)的命名类似 r1, r2

其中一些设备上的BIOS菜单可以创建名称中具有特殊字符的阵列。为了避免这些特殊字符出现问题,阵列被赋予简单的编号名称,如r0。要显示实际标签(如上例中的gm0),请使用sysctl(8)

# sysctl kern.geom.raid.name_format=1

18.5.2. 多磁盘区

某些软RAID设备支持阵列上的多个。卷的工作方式类似于分区,允许以不同方式拆分和使用物理驱动器上的空间。例如,英特尔软RAID设备支持两个卷。本示例创建一个 40 G 镜像,用于安全存储操作系统,然后创建一个 20 G RAID0(stripe)卷,用于临时存储:

# graid label -S 40G Intel gm0 RAID1 ada0 ada1
# graid add -S 20G gm0 RAID0

卷在/dev/raid/中显示为附加rX条目。具有两个卷的存储队列将显示r0r1

欲知不同软RAID设备支持的卷数量,请参阅graid(8)

18.5.3. 转换单一磁盘为镜像

在特定条件下,可以将现有的单个驱动器转换为graid(8)阵列,无需重新格式化。为避免在转换过程中丢失数据,现有驱动器必须满足以下最低要求:

  • 驱动器必须使用MBR分区方案进行分区。GPT或其他在驱动器末尾具有元数据的分区方案将被graid(8)元数据覆盖和损坏。

  • 驱动器末尾必须有足够的未分区和未使用的空间来保存graid(8)元数据。此元数据的大小不同,但最大不超过 64 M,建议留出超过 64M 的空闲空间。

如果驱动器满足这些要求,则首先进行完整备份。然后创建具有该驱动器的单驱动器镜像:

# graid label Intel gm0 RAID1 ada0 NONE

graid(8) 元数据在未使用的空间中写入驱动器的末尾。现在可以将第二个驱动器插入镜像:

# graid insert raid/r0 ada1

来自原始驱动器的数据将复制到第二个驱动器。镜像将以降级状态运行,直到复制完成。

18.5.4. 插入新磁盘到数组

驱动器可以插入到阵列中,作为故障驱动器的备件。如果没有故障驱动器,则新驱动器将成为备用驱动器。例如,将新驱动器插入工作双驱动器后视镜会导致双驱动器镜像具有一个备用驱动器,而不是三驱镜像。

在示例镜像阵列中,数据立即开始复制到新插入的驱动器。新驱动器上的所有信息将被覆盖。

# graid insert raid/r0 ada1
GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from NONE to ACTIVE.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NONE to NEW.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NEW to REBUILD.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 rebuild start at 0.

18.5.5. 从数组移除磁盘

可以从阵列中永久删除单个驱动器,并擦除其元数据:

# graid remove raid/r0 ada1
GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from ACTIVE to OFFLINE.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-[unknown] state changed from ACTIVE to NONE.
GEOM_RAID: Intel-a29ea104: Volume gm0 state changed from OPTIMAL to DEGRADED.

18.5.6. 停止数组

可以在不从驱动器中删除元数据的情况下停止阵列。启动系统时,将重新启动阵列。

# graid stop raid/r0

18.5.7. 检查阵列状态

可以随时检查阵列状态。在上述示例中将驱动器添加到镜像后,数据将从原始驱动器复制到新驱动器:

# graid status
   Name    Status  Components
raid/r0  DEGRADED  ada0 (ACTIVE (ACTIVE))
                   ada1 (ACTIVE (REBUILD 28%))

某些类型的队列,如 RAID0 CONCAT ,可能不会显示在状态报告中,如果磁盘出现故障。若要查看这些部分失败的阵列,请添加-ga

# graid status -ga
          Name  Status  Components
Intel-e2d07d9a  BROKEN  ada6 (ACTIVE (ACTIVE))

18.5.8. 删除阵列

通过从阵列中删除所有卷来销毁阵列。删除最后一个卷时,阵列将停止,元数据将从驱动器中删除:

# graid delete raid/r0

18.5.9. 删除预期之外的数组

硬盘可能会意外地包含graid(8)元数据,这可能是以前使用或制造商测试的结果。graid(8)将检测到这些驱动器并创建阵列,干扰对单个驱动器的访问。删除不需要的元数据:

  1. Boot the system. At the boot menu, select 2 for the loader prompt. Enter:

    OK set kern.geom.raid.enable=0
    OK boot

    系统将在禁用graid(8)的情况下启动。

  2. 备份受影响驱动器上的所有数据。

  3. 作为一种解决方法,graid(8)阵列检测可以通过添加

    kern.geom.raid.enable=0

    /boot/loader.conf

    要从受影响的驱动器中永久删除graid(8)元数据,请使用 FreeBSD 安装CD-ROM或 U 盘启动计算机,然后选择Shell。使用status查找阵列的名称,通常为 raid/r0

    # graid status
       Name   Status  Components
    raid/r0  OPTIMAL  ada0 (ACTIVE (ACTIVE))
                      ada1 (ACTIVE (ACTIVE))

    按名称删除卷:

    # graid delete raid/r0

    如果显示多个卷,请为每个卷重复此过程。删除最后一个阵列后,将销毁该卷。

    重新启动并检查数据,必要时从备份中恢复。删除元数据后,还可以删除/boot/loader.conf中的kern.geom.raid.enable=0条目。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.