「Linux」- 组建软件磁盘阵列(mdraid)

  CREATED BY JENKINSBOT

问题描述

通过软阵列技术,可以在没有阵列卡的情况下使用磁盘阵列技术。本文将介绍如何组件磁盘软阵列。

前提条件

关闭磁盘缓存

磁盘通常具有内建缓存(缓冲),用于提高读写速度。如果在缓存中包含文件系统元数据,在断电之前没有写入磁盘,将出现文件系统损坏或数据丢失问题。

对于硬件磁盘阵列,它们附带 BBU 或 ZMCP 模块保护,防止在断电时数据丢失。而软阵列没有断电保护,因此最好关闭磁盘缓存。

但是也有例外,有些磁盘具有断电数据保护功能,比如 Intel 320 Series SSD 磁盘,会在电源故障时将数据写入 FLASH PROM 中,以防止丢失。在这种情况下,就无需关闭磁盘缓存。

软件磁盘阵列级别

LINEAR md devices, RAID0 (striping), RAID1 (mirroring), RAID4, RAID5, RAID6, RAID10, MULTIPATH, FAULTY, and CONTAINER

Superblock

该软件磁盘阵列会将所有与磁盘阵列有关的必要信息写入 superblock 中,该元信息的具体位置与元数据版本有关(可以通过命令 mdadm -E /dev/sdxN | grep "Version: "查看元数据版本)。

创建阵列(RAID 1)

创建阵列

执行命令创建磁盘阵列:

#!/bin/sh

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

查看同步进度

查看初始化创建进度(两种方式):

#!/bin/sh

cat /proc/mdstat

mdadm -D /dev/md0

调整同步速度

当阵列创建完成后,可以立即使用,即使它出于同步状态,但是会影响同步速度。

可以使用如下方法调整同步速率:

#!/bin/sh

cat /proc/sys/dev/raid/speed_limit_max

cat /proc/sys/dev/raid/speed_limit_min

echo 100000 > /proc/sys/dev/raid/speed_limit_min

查看对齐信息

元数据保存在superblock中,使用mdadm -E /dev/sdxN命令查看,重点关注其中的Data OffsetSuper Offset字段。

删除磁盘阵列

#!/bin/sh

mdadm --stop /dev/md0

# 清除在superblock中的元数据,下次可用该磁盘创建新的磁盘阵列
mdadm --zero-superblock /dev/sdxN

常见错误汇总

# mdadm: device /dev/sdxN exists but is not an md array

mdadm “not an md array” using 3tb disks.

问题描述:
执行创建命令(mdadm --create --level=1 --raid-devices=2 /dev/sdb /dev/sdc)时,产生mdadm: device exists but is not an md array错误。

问题原因:
在我们的场景中,该错误是由于没有指定/dev/md0参数而产生的。

参考文献

Intel 320 Series SSDs
Linux Software RAID
17.2. RAID LEVELS AND LINEAR SUPPORT
F.3.2. Creating a Multipath Device With mdadm
man 8 mdadm