Linux下软RAID

  sre

RAID
独立冗余磁盘阵列
磁盘阵列(Redundant Arrays of Inexpensive Disks,RAID),有“价格便宜且多余的磁盘阵列”之意。原理是利用数组方式来作磁盘组,配合数据分散排列的设计,提升数据的安全性。磁盘阵列是由 很多便宜、容量较小、稳定性较高、速度较慢磁盘,组合成一个大型的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。同时利用这项技术, 将数据切割成许多区段,分别存放在各个硬盘上。磁盘阵列还能利用同位检查(Parity Check)的观念,在数组中任一颗硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。

优点
提高传输速率。RAID通过在多个磁盘上同时存储和读取数据来大幅提高存储系统的数据吞吐量(Throughput)。在RAID中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个磁盘驱动器几倍、几十倍甚至上百倍的速率。
通过数据校验提供容错功能。普通磁盘驱动器无法提供容错功能,如果不包括写在磁盘上的CRC(循环冗余校验)码的话。RAID容错是建立在每个磁盘驱动器 的硬件容错功能之上的,所以它提供更高的安全性。在很多RAID模式中都有较为完备的相互校验/恢复的措施,甚至是直接相互的镜像备份,从而大大提高了 RAID系统的容错度,提高了系统的稳定冗余性。

RAID技术主要包含RAID 0~RAID 7等数个规范,它们的侧重点各不相同。
raid
raid1-0

raid6
mdadm程序是一个独立的程序,能完成所有的软 RAID管理功能
主要有7 种使用模式:
Create 使用空闲的设备创建一个新的阵列,每个设备具有元数据块
Assemble 将原来属于一个阵列的每个块设备组装为阵列
Build 创建或组装不需要元数据的阵列,每个设备没有元数据块
Manage 管理已经存储阵列中的设备,比如增加热备磁盘或者设置某个磁盘失效,然后从阵列中删除这个磁盘
Misc 报告或者修改阵列中相关设备的信息,比如查询阵列或者设备的状态信息
Grow 改变阵列中每个设备被使用的容量或阵列中的设备的数目
Monitor 监控一个或多个阵列,上报指定的事件

创建分区
查看一下创建的分区
默认的格式是83,RAID分区的ID是 fd
保存分区退出

创建 RAID
用4 个分区做raid,用1 个分区来做热备分区,-n 和-x 都可以指定多个
注:系统默认有个 md0可以给我们用,如果我要多个 raid的话,就需要自己创建设备了,创建 raid设备
块的命令 mknod /dev/md01 b 9 1

注释:
man帮助中的例子:mdadm –create /dev/md0 –level=1 –raid-devices=2 /dev/hd[ac]1
-C 代表创建
-l 代表创建的级别
-n 代表活动的分区,也就是你要给这个级别多少个分区
-x 就是热备份的分区
解释图:-x:是热备分区,raid至少需要 3个分区

查看创建好 RAID的状态
命令:mdadm –detail /dev/md0、mdadm -D /dev/md0
sdb5、sdb6、sdb7、sdb8 是raid 的成员,激活状态;sdb9 是热备分区

格式化并挂载 RAID设备
创建目录并挂载raid 阵列设备,在raid 里面创建文件

故障模拟和恢复
模拟一个raid 故障
mdadm -f /dev/md0 -f /dev/sda5
sdb5 已经不在raid 成员内了
从raid 里删除掉sdb5
mdadm /dev/md0 -r /dev/sda5
再看一下状态,sdb5 已经不在列表中了,原热备分区sdb9 已经到raid 成员中并激活

补充:
1、查看/dev/md0 设备是否存在,以及它的容量;
fdisk -l /dev/md0
df -lh /dev/md0

2、向一个既已存在 RAID 中添加或移除一个硬盘或分区,要用 mdadm 工具的-f -r -a参数
mdadm /dev/mdX -f RAID成员
mdadm /dev/mdX -r RAID成员
mdadm /dev/mdX -a RAID成员

注:
-f 同 –fail 表示把一个设备列为有问题的设备,以便用-r 或–remove参数移除;
-r 同 –remove 表示把 RAID 中的一个成员移出 RAID;
-a 同 –add 表示向一个 RAID中添加一个成员;
–re-add 重新把最近移除的 RAID成员重新添加到 RAID 中;
值得一提的是,这些参数的运用,必须是在RAID 正常运行的情况下进行。其中RAID 设备是/dev/mdX,
X 是一个大于0 的整数,RAID 成员是一个硬盘或分区。添加设备并不会把RAID 的容量扩大,仅仅是为
了添加备用成员,比如在RAID1、RAID5 和RAID10 中有用。当一个RAID 成员发生故障的时候,要用这
种办法来让新成员顶替工作;

3、为 RAID 进行扩充容量;
要用到RAID 的Grow 模式,也就是增长模式。扩充模式,极为简单,有–size 参数,-n 参数–size
是指大定RAID 的大小,这个可以省略,具体由你所做的RAID 级别而定。-n 代表RAID 真正成员的
个数。在这个例子中,RAID5 真正成员是3 个,后来我们又添加了一个备用成员/dev/sdb2 进去。我们所做
的就是把这个备用成员“推”到真正成员的位置上。也就是说RAID 的真正成员由3 个变成4 个。只是这一
简单的指令,就可以让RAID5 容量增加起来。
使用-a的参数并不能使容量增大,默认是添加到了热备分区上面
解决
mdadm -G /dev/md0 -n4 ————>这样就把热备的分区添加到了 raid成员中了,容量也扩大了

4、清除一个 RAID 成员的超级块存储存的 RAID 信息;
RAID 成员在superblock 中所存储的RAID 信息是极为重要的,我们可以根据这个信息轻松恢复RAID。
mdadm –zero-superblock RAID成员;
如果确认RAID 成员这个成员没任何用处,已经把这个成员移除RAID,并且想把这个设备另作他用。
这时可以清除其superblock 的信息。比如;
# mdadm –zero-superblock /dev/sdb12
清除/dev/sdd3 中的超级块中所存储的RAID 信息;
由于raid 需要开机不会自动激活,也没有配置文件,需要手动去添加配置文件使其激活
生成开机激活需要的配置文件
命令:mdadm -D –scan > /etc/mdadm.conf
修改fstab 文件,使raid 开机自动挂载

组raid前需要给子盘分区(未测试mdadm能否认识raw硬盘)
命令:创建 mdadm -Cv /dev/md0 -l0 -n3 /dev/sdb1 /dev/sdc1 /dev/sdd1(其中c为创建,v为显示状态.md0是raid名字,在gui下md是不显示的,l0代表raid0,n3代表三块硬盘)
(未测试分区组建raid情况)
raid5: create :mdadm -CV /dev/md5 -l5 -n3 /dev/sd[b,c,d] -x1 /dev/sde(3个数据盘,一个备份盘)
停掉raid:mdadm -S /dev/md0
删掉:mdadm -Ss /dev/md0
激活raid:mdadm -A /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1

mdadm -Cv /dev/md0 -l0 -n2 /dev/sdb1 /dev/sdc1
表示:C创建,v查看状态 l0等级为0 n硬盘数量,后面接的是组raid的硬盘
lsraid -a /dev/md0 查看md0状态
配置文件: /etc/mdadm.conf

在raid0中装系统,运行不稳定.表现为不定时假死.比如游戏,视频等大io操作。
但是把系统放在raid外,运行大程序就比较稳定了。
ps,在改变cpu外频后,会显示找不到硬盘情况。(怀疑是南桥)

9 thoughts on - Linux下软RAID

  • 在bios组建raid1 ,livecd中fdisk -l 显示 /dev/sda /devsdb /dev/md126(raid1设备),安装打包系统后,给分区打标签后,查看标签,显示/dev/sda2 、/dev/sdb2 为BOOT ,/dev/sda3 、/dev/sdb3为 ROOT ,写grub失败,partprobe后,写grub ->root (hd0,1)->setup (hd0) 显示成功,其他的都失败了,但是进入系统,它将sdb2、sdb3分别挂载为/和boot,并且没有/dev/md126 这个设备
    2、我又尝试永安装光盘全新安装,一路OK,进入系统后,设备都能识别,并且它将md126p2和md126p3分别挂在为/和boot,这个是正确的,并且在给分区打标签后,也只有md126p2和md126p3两个分区
    3、我安装windows后,再进入livecd,写grub,虽然显示成功,但是,重启后直接进入了windows系统
    在windows下,系统就只能识别到一块设备,用centos安装光盘重新修复一下,两个系统都可以进去了
    我就不懂了,这是为什么呢,求解
    我在网上查了一下,好像grub不支持softraid ,grub2支持

  • 单盘、3盘组raid5、4块盘组raid5、5块盘组raid5(没有备份盘,全为数据盘)
    结果是,raid5和单块盘相比,平均读入速度有明显提升,大概是单盘的(N-1)倍

    注:raid5为软raid,用命令mdadm,测试读写速度用命令dd
    综上raid5对磁盘读入速度提升较大,写入速度、读写速度与单盘相比不明显。

  • 为什么有的raid组起来之能看到一块完成的/dev/sda,有的确能看到原来的几块硬盘和/dev/mapper/md127这种的。
    导致这个原因是否跟主板的raid驱动有关?又或者是不是组的是softraid而不是hardraid呢?
    raid识别正常是否与硬件有关? 比如单独raid卡是不是组起来就是/dev/sda这种,而主板集成的就是/dev/mapper/md127这种?

  • 这个应该是和主板有关,以前有过这种状况,有些主板组建raid后,硬盘设备就没有了,直接将raid识别为/dev/sda 主板型号我不记得了,现在在bios中组建出来一般就是/dev/mapper/md127或者/dev/md127,并且/dev/md127还可已用mdadm -D /dev/md127 查看,感觉好像就是以hardraid形式组建了一个softraid

  • 有没有尝试把/boot放到raid0中呢,没google出来。
    如果成功,grub.cfg如何写呢?
    bios升级,或者掉电情况下,会不会影响板载raid?

    • 板载raid的信息也是写在硬盘的,BIOS改变,掉电并不影响RAID,当然,换主板情况下还没有测试。

  • 就我所知,组软raid的话,如果你不把组好的raid写入到配置文件中,重启后会自动变成/dev/md127的!

LEAVE A COMMENT

Captcha Code