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秒