全国业务电话:
4.5 RAID 管理
4.5 RAID 管理
 
4.5.1 RAID 是什么?
 
  RAID(独立磁盘冗余阵列)的基本目的是把多个磁盘驱动器结合成一组虚拟大容量的驱动器阵列使用,其特色是提升设备的访问性能和提供容错功能。这个驱动器阵列从用户角度看就如同一个单一的逻辑贮存单元或驱动器。
 
  RAID 是一种在多个磁盘上分散信息的方法。它使用磁盘分条(disk striping,RAID 级别 0)、磁盘镜像(disk mirroring,RAID 级别 1)、和带有奇偶校验的磁盘分条(disk striping with parity,RAID级别 5)之类的技术来达到冗余性,降低潜伏时间,并且(或者)增加磁盘读写的带宽,提高从硬盘崩溃中恢复的能力。
 
  RAID 的基本原理是:数据必须使用一致的形式被分散到阵列中的驱动器上。要达到这个目的,数据必须被分割成大小一致的“块”(大小通常是 32K 或 64K,也可使用不同大小)。每一块都会根据所用的RAID级别而写入其中的一个硬盘驱动器。当数据要被读取时,这个进程就会反过来进行,造成多个驱动器好象是一个大驱动器的假象。
 
4.5.2 谁应该使用 RAID
 
  任何需要使大量数据便于存取的用户(如一般的系统管理员)都可以从 RAID 技术中受益。使用RAID的主要原因包括:
 
  ●加快速度
 
  ●增加贮存容量
 
  ●减少磁盘失效带来的不利影响
 
4.5.3 硬件 RAID 和软件 RAID
 
  RAID 技术有两种:硬件 RAID 和软件 RAID。
 
4.5.3.1 硬件 RAID
 
  基于硬件的系统从主机之外独立地管理 RAID 子系统,并且它在主机处把每一组 RAID 阵列只显示为一个磁盘。硬件 RAID 对于操作系统来说是透明的,操作系统层识别到的就是一个普通的硬盘,其管理方法与普通硬盘一致,不在此赘述。
 
4.5.3.2 软件 RAID
 
  软件 RAID 由操作系统实现,因为它不需要昂贵的磁盘控制器卡或热交换底盘,软件RAID 提供了最廉价的解决方法。它还可以用在较便宜的 IDE 盘以及 SCSI 磁盘。
 
  CGSL 内核的 MD 驱动程序是完全独立于硬件的RAID解决方案的范例。基于软件的阵列性能独立于服务器 CPU 的性能和载量之外。以下列举软件 RAID 的一些最重要的特性:
 
  ●使用线程的进程重建
 
  ●基于内核的配置
 
  ●不必重建而可在 Linux 机器间迁移阵列
 
  ●使用空闲的系统资源在后台重建阵列
 
  ●对可热交换的驱动器的支持
 
  ●对 CPU 的自动检测以便利用某些 CPU 优化功能
 
  提示:热交换底盘允许您不必给系统断电而移除硬盘驱动器。
 
4.5.3.3 RAID 级别和线形支持
 
  RAID 支持各类配置,包括级别 0、1、4、5 和线形。这些RAID类型的定义如下:
 
  级别 0 —RAID 级别 0,经常被称作“分条”,它是面向性能的分条数据映射技术。这意味着被写入阵列的数据被分割成条,然后被写入阵列中的其它磁盘成员,从而允许低费用的高度 I/O 性能,但是它不提供冗余性。级别 0 阵列的贮存能力等于硬件 RAID 所有成员磁盘的总能力或软件 RAID 中所有成员分区的总能力。
 
  级别 1 —RAID 级别 1,或“镜像”,被使用的时期长于任何其它形式的 RAID。级别 1 通过在阵列中的每个成员磁盘上写入相同的数据(在磁盘上留一个“镜像”副本)来提供冗余性。由于镜像的简单性和高度的数据可用性,它目前仍然很流行。使用两个以上磁盘操作的级别 1 可能会在读取时使用并行访问来获得高速数据传输,但是它更常用的是独立操作以提供高速 I/O 传输率。级别 1 提供了极佳的数据可靠性,并提高了读取任务繁重的程序的执行性能,但是它相对的费用也较高。级别 1 阵列的贮存能力与硬件 RAID 中被镜像的硬盘之一或软件 RAID 中被镜像的分区之一的贮存能力相同。
 
  级别 4 —级别 4 使用集中到单个磁盘驱动器上的奇偶校验来保护数据。它更适合于事务性的 I/O 而不是大型文件传输。由于专职的奇偶校验磁盘代有固有瓶颈,级别 4 极少在没有写回缓存之类技术陪同的情况下使用。虽然 RAID 级别 4 在某些分区方案中是一种可选项目,它在 CGSL RAID 安装中却不是一个允许的选项。硬件级别 4 的贮存能力相当于所有成员磁盘去掉一个后的贮存能力。软件级别 4 的贮存能力相当于所有成员分区去掉一个后的贮存能力(如果它们的大小相同的话)。
 
  级别 5 —这是最普遍的 RAID 类型。通过在某些或全部阵列成员磁盘驱动器中分布奇偶校验,RAID 级别 5 避免了级别4中固有的写入瓶颈。唯一的性能瓶颈是奇偶计算进程。

  使用现代的 CPU 和软件 RAID,这种情况通常不是什么大问题。与级别 4 一样,其结果是非对称性能,读取大大地超过了写入性能。级别 5 经常与写回缓存一起使用来降低这种非对称性。硬件级别 5 的贮存能力相当于所有成员磁盘去掉一个后的贮存能力。软件 RAID 级别 5 的贮存能力相当于所有成员分区去掉一个后的贮存能力(如果它们的大小相同)。
 
  线形 RAID —线形 RAID 是一种用简单的驱动器聚组来创建一个较大的虚拟驱动器的方法。在线形 RAID 中,区块从一个成员驱动器到另一个成员驱动器被依次分配,只有在第一个驱动器被完全填充后,才转到下一个驱动器。这种聚组没有提供任何性能方面的利益,因为 I/O 操作不太可能在成员驱动器间被分开。线形 RAID 也没有提供任何冗余性,事实上,它降低了可靠性 — 如果任何一个成员驱动器失效了,整个阵列都不能被使用。它的贮存能力是所有成员磁盘的总和。
 
  提示:RAID 级别 1 的代价很高,因为您把相同的信息写入阵列中的所有磁盘,这浪费了驱动器空间。譬如,如果您设立了 RAID 级别 1,因而您的根分区(/)存在于两个大小各为 40G 的驱动器上,您虽然总共有 80G 空间,却只能实际利用其中的 40G,因为另外的 40G 就如同前 40G 的镜像一样。
 
  提示:奇偶校验的信息是基于阵列中的其它磁盘成员的内容来计算的。当阵列中的某个磁盘上的数据失效时,这则信息就会被用来重建数据。然后,在替换失效磁盘之前,被重建的数据可以用来满足失败磁盘上的 I/O 请求;在替换失效磁盘之后,它可以用来在新磁盘上重建数据。
 
  提示:RAID 级别 4 与级别 5 所占空间相同,但是级别5却优于级别 4。由于这个原因,级别 4 不被支持。

4.5.4 mdadm 管理软 RAID 阵列
 
4.5.4.1 创建新的阵列
 
  mdadm 使用--create(或其缩写 -C)参数来创建新的阵列,并且将一些重要阵列的标识信息作为元数据可以写在每一个底层设备的指定区间。--level(或者其缩写 -l)表示阵列的 RAID 级别,--chunk(或者其缩写 -c)表示每个条带单元的大小,以 KB 为单位,默认为 64KB,条带单元的大小配置对不同负载下的阵列读写性能有很大影响。--raid-devices(或者其缩写 -n)表示阵列中活跃的设备个数,而--spare-devices(或者其缩写 -x)表示阵列中热备盘的个数,一旦阵列中的某个磁盘失效,MD内核驱动程序自动将热备磁盘加入到阵列,然后重构丢失磁盘上的数据到热备磁盘上。
 
  创建一个 RAID 0 设备:
 
    #mdadm --create  /dev/md0 --level=0 --chunk=32 --raid-devices=3 /dev/sd[i-k]1  

  使用阵列:
 
  MD 设备可以像普通块设备那样直接读写,也可以做文件系统格式化。
 
    #mkfs.ext4 /dev/md0  
 
    #mkdir -p /mnt/md-test  
 
    #mount /dev/md0 /mnt/md-test  
 
  停止正在运行的阵列:
 
  当阵列没有文件系统或者其他存储应用以及高级设备使用的话,可以使用--stop(或者其缩写-S)停止阵列;如果命令返回设备或者资源忙类型的错误,说明/dev/md0 正在被上层应用使用,暂时不能停止,必须要首先停止上层的应用,这样也能保证阵列上数据的一致性。
 
    #mdadm --stop /dev/md0  
 
4.5.4.2 组装曾创建过的阵列
 
  模式--assemble 或者其缩写(-A)主要是检查底层设备的元数据信息,然后再组装为活跃的阵列。如果我们已经知道阵列由那些设备组成,可以指定使用那些设备来启动阵列。
 
    #mdadm -A /dev/md0 /dev/sd[b-h]  
 
  配置文件:
 
  /etc/mdadm.conf 作为默认的配置文件,主要作用是方便跟踪软 RAID 的配置,尤其是可以配置监视和事件上报选项。Assemble 命令也可以使用--config(或者其缩写-c)来指定配置文件。我们通常可以如下命令来建立配置文件。
 
    #echo DEVICE /dev/sd[b-h] /dev/sd[i-k]1 > /etc/mdadm.conf  
 
    #mdadm -Ds >>/etc/mdadm.conf  
 
    #cat /etc/mdadm.conf  
 
4.5.4.3 查询阵列的状态
 
  我们可以通过 cat /proc/mdstat 信息查看所有运行的 RAID 阵列的状态,在第一行中首先是MD的设备名,active 和 inactive 选项表示阵列是否能读写,接着是阵列的 RAID 级别,后面是属于阵列的块设备,方括号[]里的数字表示设备在阵列中的序号,(S)表示其是热备盘,(F)表示这个磁盘是 faulty 状态。在第二行中首先是阵列的大小,单位是 KB,接着是 chunk-size 的大小,然后是 layout 类型,不同 RAID 级别的 layout 类型不同,[6/6]和[UUUUUU]表示阵列有 6 个磁盘并且 6 个磁盘都是正常运行的,而[5/6]和[_UUUUU] 表示阵列有 6 个磁盘中 5 个都是正常运行的,下划线对应的那个位置的磁盘是 faulty 状态的。

    #cat /proc/mdstat  
 
4.5.4.4 管理阵列
 
  mdadm 可以在 Manage 模式下,对运行中的阵列进行添加及删除磁盘。常用于标识 failed 磁盘,增加 spare(热备)磁盘,以及从阵列中移走已经失效的磁盘等等。使用--fail(或者其缩写-f)指定磁盘损坏。
 
    # mdadm /dev/md0 --fail /dev/sdb  
 
  当磁盘已经损坏时,使用--remove(或者其缩写--f)参数将这个磁盘从磁盘阵列中移走;但如果设备还正在被阵列使用,则不能从阵列中移走。
 
    # mdadm /dev/md0 --remove /dev/sdb  
 
4.5.4.5 监控阵列
 
  可以使用 mdadm 对 RAID 阵列进行监控,监控程序定时查询指定的事件是否发生,然后根据配置来妥善处理。
 
    #mdadm --monitor --mail=root@localhost --program=/root/md.sh  
 
    --syslog --delay=300 /dev/md0 --daemonise  
 
  查看系统日志信息,可以看到哪个阵列或者阵列中的哪个设备发生过的哪些事件。
 
    #mdadm -f /dev/md0 /dev/sdb  
 
4.5.4.6 扩展阵列
 
  如果在创建阵列时不想使用整个块设备,可以指定用于创建 RAID 阵列每个块设备使用的设备大小。
 
    #dadm -CR /dev/md0 -l5 -n6 /dev/sd[b-g] -x1 /dev/sdh --size=102400  
 
  然后在阵列需要扩展大小时,使用模式--grow(或者其缩写-Q)以及--size 参数(或者其缩写-z) 在加上合适的大小数值就能分别扩展阵列所使用每个块设备的大小。

    [root@fc5 mdadm-2.6.3]#./mdadm -Q /dev/md0  
 
    /dev/md0: 500.00MiB raid5 6 devices, 1 spare. Use mdadm --detail for more detail.  
 
    [root@fc5 mdadm-2.6.3]#./mdadm --grow /dev/md0 --size=204800  
 
    [root@fc5 mdadm-2.6.3]#cat /proc/mdstat  
 
    Personalities : [raid0] [raid10] [raid6] [raid5] [raid4]  
 
    md0 : active raid5 sdh[6](S) sdg[5] sdf[4] sde[3] sdd[2] sdc[1] sdb[0]  
 
      1024000 blocks level 5, 64k chunk, algorithm 2 [6/6] [UUUUUU]  
 
      [============>......]  resync = 69.6% (144188/204800) finish=0.0min speed=10447K/sec  
 
    unused devices: <none>  
 
    [root@fc5 mdadm-2.6.3]#./mdadm -Q /dev/md0  
 
    /dev/md0: 1000.00MiB raid5 6 devices, 1 spare. Use mdadm --detail for more detail.  

4.5.4.7 Bitmap 记录
 
  使用 bitmap 模式记录 RAID 阵列有多少个块已经同步(resync)。参数--bitmap(或者其缩写-b)指定记录 bitmap 信息的文件名,如果是 interval 参数表示 bitmap 记录在每个设备的元数据区。--bitmap-chunk 表示每个 bit 位代表 RAID 设备多大的数据块,单位是 KB;而--delay(或者其缩写-d)指定多长事件同步 bitmap 信息到文件或者设备上,单位是秒,默认是 5 秒。--force(或者其缩写)表示覆盖掉已经存在 bitmap 文件。而且使用参数--examine-bitmap(或者其缩写-X)能够查看存储在文件或者设备元数据中的 bitmap 记录的信息。
 
    #mdadm -CR /dev/md1 -l1 -n2 /dev/sdi1 /dev/sdj1 --bitmap=internal  

  • 操作系统微信公众号

  • CPI微信公众号

© 2004-2020 广东中兴新支点技术有限公司  版权所有  (www.gd-linux.com)  粤ICP备15061780号-2

新支点OS业务:

QQ客服