一、RAID的简单介绍
RAID(Redundant Arrays Inexpensive Disks) ,便宜的冗余磁盘阵列
RAID级别
0 :(stripe)条带模式,至少需要两块硬盘,每一份数据平均分成多份存储在多个磁盘中,且都处于一个水平条带上
优点:读写速度提高
缺点:无冗余能力(也称容错能力)
空间利用率:多个磁盘的总和
1:(mirror)镜像模式,磁盘数量需要2的倍数,两个磁盘中存储的数据完全一致,当一个盘损坏时,数据依然可以进行读写
优点:读速度提高,有冗余能力
缺点:磁盘利用率 只有50%,写的速度下降
5:check code校验码模式,至少需要三块硬盘,每一次存储数据时,采用条带模式存储到n-1数量的磁盘中,另外一个磁盘存放的是其他几个磁盘中的数据以某种加密方式之后得出的加密数据,且每一次存储,存储加密数据的磁盘都是不断变化的,当其中任何一个盘的数据损坏时,都可以通过加密方式和其余两块磁盘的数据来得知另外一个盘的数据,具有较高的冗余能力
优点:读写速度快,有冗余能力
缺点:磁盘利用率为n-1/n,两个磁盘损坏时,数据将丢失
01:stripe+mirror模式,至少需要4快硬盘,先将两块硬盘组成Raid0,然后将两组Raid0组成Raid1,存储一份数据时,每一个Raid0的组合都需要存储以分完整的数据,然后Raid0组合的磁盘再进行条带化平分存储
优点:读写速度快,冗余能力强
缺点:磁盘利用率为50%
10:mirror+stripe模式,至少需要4快硬盘,先将两块硬盘组成Raid1,然后将两组Raid1组合成Raid0,存储一分数据时,每一Raid1的组合存储的数据都是均分的,然后Raid1组合再用mirror模式存储
优点:读写速度快,冗余能力强
缺点:磁盘利用率为50%
相比于Raid01来说,存储的数据更快一点,
Raid01存储时间=存储一份完整的数据的时间+再存储一半的数据的时间
Raid10存储时间=存储一半的数据的时间+再存储一半的数据时间
50:check code+stripe模式,至少需要6快硬盘,先分别组成两个Raid5组合,然后再组成Raid0,存储一份数据时,每一个Raid5组合存储的数据时均分的,然后Raid5组合再将数据以一个磁盘存储加密数据,另外的磁盘条带化存储
优点:读写速度快,冗余能力强
缺点:磁盘利用率为n-2/n
另外一种存储方式:JBOD
Jbod:(Just a bunch of disks)将多个硬盘组成一个系统,可以随时扩展
特点:数据简单的从第一个磁盘开始存储, 当第一个磁盘的存储空间用完后, 再依次从后面的磁盘开始存储数据。存取性能完全等同于对单一磁盘的存取操作。不提供数据安全保障。它只是简单的提供一种利用磁盘空间的方法,存储容量等于组成Jbod的所有磁盘的容量的总和
性能表现无提升
冗余能力无
磁盘利用率为100%
二、利用mdadm组建软RAID
mdadm:
特点:可以将任何块设备做成RAID,是一个模式化命令
Synopsis:
mdadm [MODE] /dev/md# [ Options ]... /PATH/TO/DEV
MODE 为模式,默认为管理模式
/dev/md#为快设备文件,创建RAID时需要指定一个块设备文件,后面用来挂载,一般都会放在/dev/md#,#代表raid级别
/PATH/TO/DEV:用来指定组建RAID的块设备
mdadm模式介绍:
1).创建模式 -C
常用命令为 mdadm -C /dev/md# [options] /PATH/TO/DEV
对于options,常用的选项如下:
-l # 指定RAID的级别
-n # 指定组建RAID的个数
-a {yes|no} 自动为其创建设备文件,使用时需要加上yes或者no
-c # 指定chunk块的大小,默认为64k
-x # 指定空闲盘的个数,当一个盘损坏时,空闲盘会自动补上
注意:指定RAID的数量和空闲盘数量后,后面的/PATH/TO/DEV的设备块数量要匹配
example
mdadm -C /dev/md0 -l 0 -n 2 -a yes /dev/sda{1,2}
组建一个RAID0,且RAID模块的块设备文件指定为/dev/md0,且自动为其创建块设备文件
实现步骤:
1.首先创建两个块设备文件
dd if=/dev/zero of=/tmp/loop10 seek=511 bs=1M count=1
dd if=/dev/zero of=/tmp/loop11 seek=511 bs=1M count=1
losetup /dev/loop10 /tmp/loop10
losetup /dev/loop11 /tmp/loop11
我们利用dd命令创建两个文件,大小都为512M,再利用losetup 命令将两个文件创建为回环设备
2.将两个块设备文件组成RAID0
mdadm -C /dev/md0 -l 0 -n 2 -a yes /dev/loop{10,11}
3.查看是否创建成功
cat /proc/mdstat
可以看到创建成功,版本为1.2,支持Raid0 到raid10,md0设备激活成功,模式为raid0,两个设备块分别为loop10和loop11
4.为Raid设备块/devmd0创建文件系统
mkfs为创建文件系统的命令,ext4为文件系统的类型,-b指定文件系统中数据块的大小,-L指定卷标,-m指定预留给超级管理员的容量,按百分比计算,当使用-E stride=#时,用来指定chunk/block的比列,如mkfs.ext4 -E stride=16 -b 4096 /dev/md0
则表示,chunk为16*4096b=64k
从上图可以看出,创建成功后,条带stripe的大小为256个数据块,也就是256*4k=1M,文件系统总工包含261120个数据块,总共1G,%3的数据块用来保留给超级用户,其中有8个块组,每一个块组分别有32768个数据块,超级数据块存储在32768等4个块中
5.挂载Raid0到/mnt
mount /dev/md0 /mnt
挂载之后就可以进行数据存储了
2).管理模式
mdadm 命令默认在管理模式下进行
其中options选项如下:
-f |--fail 模拟损坏RAID组合中的块设备
用法:mdadm /dev/md0 -f /dev/loop10
-r 移除RAID
-a 加入新盘
一般用于RAID模式中的某个磁盘损坏后,加入一个新盘用来修复
-D|--detail 查看RAID的详细信息
mdadm -D /dev/md0
-S /dev/md# 用来停用磁盘阵列
-A /dev/md# 启用磁盘阵列
-D --scan 两个命令结合:用来扫描磁盘阵列
注意:RAID0无法模拟损坏,因为RAID0模式下损坏一个设备后,数据会直接丢失
练习:
停用RAID设备/dev/md,在启动
注意:在停用RAID时必须要先卸载该设备
1.先查看RAID目前的状态,然后卸载RAID设备
可以看出,目前有一个RAID0,我们先卸载
umont /mnt
2.停用RAID
3.启用RAID
注意在启用RAID之前,我们需要先将RAID的配置信息保存至RAID配置文件中,/etc/mdadm.conf
保存方法: mdadm -D --scan > /etc/mdadm.conf
只有保存在RAID配置文件后,才可以使用mdadm -A 启用RAID