RAID:  独立冗余磁盘阵列。

Redundant Arrays of Independent Disks。


raid级别:

级别仅代表组织方式不同,没有上下之分。 


1.raid0 条带卷

将1块数据分成多块存储在多个磁盘上,最少需要2块磁盘。

使用环境:需要大量临时数据存储,如swap分区等等。

1.读写性能好,分块写入,分块读取。基本是保持线性增加,

2.没有容错能力。

3.可用磁盘空间=磁盘个数*单个磁盘空间

4.每个磁盘容量大小最好一致。

5.读写性能=单个磁盘性能*磁盘总个数。


2.raid1 镜像卷

使用环境:对安全稳定有需求。最少需要2块磁盘。

1.保证业务不会终止,数据不会丢失。

2.写入性能=单个磁盘性能 。

4.读取性能=单个磁盘性能*磁盘总个数。

3.可用磁盘空间=1*单个磁盘空间。


3.raid4 

组合至少3块磁盘,每次存储前,先计算校验码(CHECK_SUM),而且是两两分段进行计算。数据存储在前2块磁盘中,最后一块数据存储校验码(CHECK_SUM)。

1.最多允许从3块中坏1块磁盘。

2.读写性能=(总磁盘个数-1)*单个磁盘性能。

3.可用磁盘空间=(磁盘总个数-1)*单个磁盘空间


4.raid5

组合最少3块磁盘,数据段都是对称的,一般是左对称,效验码是轮流存放在磁盘上。

1.最多允许从3块中坏1块磁盘。

2.读写性能=(总磁盘个数-1)*单个磁盘速度。

3.可用磁盘空间=(总磁盘个数-1)*单个磁盘空间。


5.raid6

和raid5类似,区别是效验码存放2次。最少需要4块磁盘。

1.最多允许从4块中坏2块磁盘。

2.读写性能=(总磁盘个数-2)*单个磁盘速度。

3.可用磁盘空间=(总磁盘个数-2)*单个磁盘空间。


6.raid10

raid1和raid0的组合。至少需要4块磁盘。

1.先做多个raid1分组,再把分组做raid0。形成2层结构。

2.只要保证同一个raid1组中的磁盘不要同时损坏就保证数据完整性。

3.写入性能=单个磁盘速度*raid1组个数/2。

4.读取速度=raid1组个速*单个磁盘速度。

5.可用磁盘空间=总磁盘个数*总磁盘空间/2。


7.raid50

raid5和raid0组合,最少需要6块磁盘。

1.先做多个raid5分组,再把分组做成raid0。

2.可用磁盘空间=单个磁盘空间*raid5分组个数*(raid5组内磁盘总个数-1)。

3.读写速度=单个磁盘速度*raid5分组个数*(raid5分组内磁盘总个数-1)。


raid的创建:

在linux中,是由内核模块(multi disk,md)来提供raid软件驱动。

/dev/mdXXXX。

组成软raid可以是任意的块设备。例如2个分区等等。


#mdadm [MODE] <RAIDDEVICE> [OPTIONS] <COMPONET-DEVICES>

模式化工具。

[OPTION]

装配模式:

-A assemble 将此前做过的raid重新装配起来。

例如:将此前做过的/dev/md1更名为/dev/md2重新装配起来:

#mdadm -A /dev/md2 /dev/sda{7,8,9} 


--scan 搜索配置文件自动重新装配。

配置文件在/etc/mdadm/conf,默认无此文件,需要使用-D选项来新建。


例如:#mdadm -D --scan >>/etc/mdadm.conf

例如:使用配置文件重新装配/dev/md1:

#mdadm -A /dev/md1 --scan


创建模式:

-C create 新建raid设备。

-l,--level= RAID_LEVEL raid的级别。


-c,--chunk=NUM 指定块大小,默认64KB,大小必须是磁盘块(block)的2的n次方倍。


-a,--auto= yes,no,md,mdp,part,p  默认值是yes。

yes 如果对应的设备文件不存在,自动为其创建。


-n,--raid-devices= 指定组成raid设备中设备的个数。


-x NUM 指定空闲盘的个数为NUM个。


例如:创建1个raid0设备:

#fdisk 创建新分区(最好使用不同硬盘)。

#n /dev/sda5 /dev/sda6

#p /dev/sda5 /dev/sda6 fd raid磁盘格式为fd。

#w

#partprobe /dev/sda 

#mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sda{5,6}

#cat /proc/mdstat  查看raid设备的状态。

#mke2fs -j /dev/md0 格式化raid分区。


例如:创建1个raid1设备:

#fdisk 创建新分区(最好使用不同硬盘)。

#n /dev/sda5 /dev/sda6

#p /dev/sda5 /dev/sda6 fd raid磁盘格式为fd。

#w

#partprobe /dev/sda 

#mdadm -C /dev/md0 -a yes -l 1 -n 2 /dev/sda{5,6}

#cat /proc/mdstat  查看raid设备的状态。

#mke2fs -j /dev/md0 格式化raid分区。

例如:创建1个raid10设备:

#watch -n 1 'cat /proc/mdstat'  每隔1秒钟自动刷新raid情况。


监控模式:

-F follow or moniton 监控raid1、4、5、6 、10级别的状态。需要制定一个邮件地址。


-m --mail 制定邮件地址。

-G grow 扩展或缩小阵列。


管理模式:

-a --add 添加一块磁盘。


-f --fault 标识损坏磁盘。


-r --remove 移除一块磁盘。


例如:将/dev/md0中的磁盘/dev/sda8标记为损坏,将/dev/sda9加入后移除/dev/sda8。磁盘修复完成后将/dev/sda8再添加进去成为热空闲磁盘。


#mdadm /dev/md0 -f /dev/sda8

#mdadm /dev/md0 -a /dev/sda9

#mdadm /dev/md0 -r /dev/sda8

#mdadm /dev/md0 -a /dev/sda8


--auto-detcet 自动探测要使用的模式。


杂项模式:

-D --detail 显示一个或多个md设备的详细信息。


例如:显示一个md设备的详细信息:

#mdadm -D /dev/md0


-S --stop 停止raid设备。

例如:

#mdadm -S /dev/md0


chunk和block的关系:

chunk默认大小是64KB,但是一定是block大小的2的n次方倍。存取数据的时候是要每次计算chunk中block个数的,对系统资源造成浪费。这就需要在格式化磁盘的时候使用mke2fsde -E stride=BLOCK_SUM来手工指定一个chunk中包含BLOCK_SUM个block。


#mke2fs -j -b <BLOCK-SIZE> -E stride=<64K/BLOCK_SIZE>

例如:格式化/dev/md1。block大小为4k,那chunk中包含block的个数为16个。

#mke2fs -j -b 4096 -E stride=16 /dev/md1



#watch [OPTION] COMMAND 周期性执行指定命令,并以全屏的方式显示结果。退出的使用使用ctrl^c退出。

[OPTION]

-n NUM 指定周期长度为NUM秒,默认2秒