在Linux中构建RAID

本文是记录在服务器上通过Soft RAID实现合并多块磁盘组建大存储的操作步骤。构建的RAID是RAID10同时设置一块hot spare磁盘,以满足一定的容灾和性能要求。

硬件设备检查

lspci | grep -E 'SCSI|SATA'

显示磁盘硬件如下

00:1f.2 SATA controller: Intel Corporation Patsburg 6-Port SATA AHCI Controller (rev 06)
03:00.0 Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2308 PCI-Express Fusion-MPT SAS-2 (rev 05)
09:00.0 Serial Attached SCSI controller: Intel Corporation Patsburg 4-Port SATA Storage Control Unit (rev 06)

服务器只有SATA ACHI磁盘控制器,没有硬件RAID功能

磁盘列表

fdisk -l | grep sd

Disk /dev/sda: 480.1 GB, 480103981056 bytes
/dev/sda1   *           1          33      261120   83  Linux
/dev/sda2              33        6560    52428800   83  Linux
/dev/sda3            6560        6821     2097152   83  Linux
/dev/sda4            6821       58370   414063448    5  Extended
/dev/sda5            6821       58370   414061568   83  Linux
Disk /dev/sdb: 480.1 GB, 480103981056 bytes
Disk /dev/sdc: 480.1 GB, 480103981056 bytes
Disk /dev/sdd: 480.1 GB, 480103981056 bytes
Disk /dev/sde: 480.1 GB, 480103981056 bytes
Disk /dev/sdf: 480.1 GB, 480103981056 bytes
Disk /dev/sdg: 480.1 GB, 480103981056 bytes
Disk /dev/sdh: 480.1 GB, 480103981056 bytes
Disk /dev/sdi: 480.1 GB, 480103981056 bytes
Disk /dev/sdj: 480.1 GB, 480103981056 bytes
Disk /dev/sdk: 480.1 GB, 480103981056 bytes
Disk /dev/sdl: 480.1 GB, 480103981056 bytes
  • 创建磁盘分区并标记为soft raid

/dev/sdb为例

对于上述sdbsdl磁盘,可以使用以下命令一次完成

上述对磁盘进行分区并且加上raid这个FLAG很重要,我的同事在做Soft RAID的时候,操作命令中少了这步分区和设置flag步骤,虽然构建RAID时候没有报错,并且也能够对RAID设备进行文件系统创建。但是操作系统重启后,md设备丢失(无法挂载文件系统)。推测是没有标记raid分区,系统重启后就无法扫描到RAID标记来激活md设备。

此外,我发现这里使用 parted 命令有没有使用 -a optimal 都没有区别,分区以后显示都是相同位置,不确定在底层是否需要这个参数。或许还是加上比较好。注意,可以使用以下命令检查分区是否对齐:

  • 创建RAID10

这里 /dev/sd{b..k}1 是shell展开为 /dev/sdb1 到 /dev/sdk1

这里使用参数 --name=metadata 可以体现在mdadm --detail信息输出以及/etc/mdadm.conf配置中,方便后续维护

suse 文档:创建复杂 RAID 10 使用了以下参数

  • --run 强制运行,对于某些属于其他array的组件也确认执行,由于我们是空白的存储,所以不需要这个参数

  • --chunk=4 (也就是4k的条带大小),这个对性能有比较大的影响,以后需要调优

    -R, --run Insist that mdadm run the array, even if some of the components appear to be active in another array or filesystem. Normally mdadm will ask for confir- mation before including such components in an array. This option causes that question to be suppressed.

    -c, --chunk= Specify chunk size of kibibytes. The default when creating an array is 512KB. To ensure compatibility with earlier versions, the default when Building and array with no persistent metadata is 64KB. This is only mean- ingful for RAID0, RAID4, RAID5, RAID6, and RAID10.

  • 检查RAID配置

输出显示如下

  • 生成mdadm的配置文件,这样系统启动时候回自动启动软raid

    mdadm -Ds >> /etc/mdadm.conf

或者等同命令

  • 检查RAID的build进度

SoftRAID在sync的时候就可以直接使用(创建文件系统和挂载),即使此时显示正在进行resync还没有完成

输出类似

创建文件系统并挂载

  • /dev/md0磁盘分区

由于/dev/md0磁盘设备大于2T,所以不能使用fdisk,需要使用parted分区并设置为GPT分区表

分区对齐方式

使用fdisk -l可以看到分区信息

注意:这里提示GPT分区不是物理扇区边界开始,这个警告可能不正确

  • /dev/md0p1创建文件系统ext4

ext4文件系统目前对SSD磁盘支持较好,并且稳定可靠

  • 挂载 /dev/md0p1

由于是Ext4分区性能提升,使用noatime

原先对/metadata目录需要移除,重建空目录挂载

简单汇总脚本

通过LVM实现Soft RAID

LVM可以实现Soft RAID的功能,但是要求较新版本(参考 ⁠4.4.16. RAID Logical Volumes⁠4.4.3. Creating Mirrored Volumes

Red Hat Enterprise Linux 6.3开始 LVM 支持 RAID4/5/6 和 raid1

Red Hat Enterprise Linux 6.4开始 LVM 支持 raid10

为了稳妥起见,应该升级到RHEL最新 6.7 版本,以便能够实现LVM下的Soft RAID。

使用LVM实现RAID注意点:

  • 新的raid1在每个镜像磁盘保存了完成的冗余位图(fully redundant bitmap),增加了故障处理能力

  • 镜像可以临时分裂然后再合并回RAID

  • 新的镜像实现支持快照(类似高层次的RAID实现)

  • 新的RAID实现不支持cluster-aware

参考

Last updated

Was this helpful?