由加利福尼亚大学伯克利分校(University of California-Berkeley)在1988年,发表的文章:“A Case for Redundant Arrays of Inexpensive Disks”。文章中,谈到了RAID这个词汇,而且定义了RAID的5个层级。独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同的地方(因此,冗余地)的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。因为多个硬盘增加了平均故障间隔时间(MTBF),储存冗余数据也增加了容错性。
- RAID的几个常用级别
- raid 0 要2块或2块以上的硬盘,把数据分散在N块硬盘内性能提升极高,无容错能力。
- raid 1 需要2块硬盘,会把一块硬盘写数据,把另一块写入数据镜像,容错性最高,但写入性能会下降。
- raid 4 需要3块或以上的硬盘,多块数据盘进行异或运算,把一块硬盘做专用校验盘,异或相同为假不同为真,有容错性,一块坏掉可以通过校验盘来计算恢复。但已基本不用本文不做详细介绍。
- raid 5 需要3块或3块以上的硬盘,会把1块硬盘的容量来放校验位,有容错性允许一块磁盘损坏,性能有提升,比较常用。磁盘利用率比raid1要高。拥有和raid0相近的读取速度,但写入数据和单个磁盘相比稍慢。把多块数据进行异或运算生成校验信息,然后把数据和与其相对的校验信息保存在raid5各个磁盘中。
- raid 6 需要4块或4块以上的硬盘,会把2块硬盘的容量来放校验位,会计算两个校验位储存在两块盘上,容错性允许两块磁盘损坏,不常用,本文不做详细介绍。
- raid 10 需要4块或2的2倍以上的硬盘,但添加硬盘要一次添加2块。会把硬盘先做raid 1在做raid 0,性能提升较高,但磁盘利用率较低,容错性极高。raid01与其相似但是raid01是先做raid 0再做raid 1.
- raid 50 需要6块或3的2倍以上的硬盘,先把硬盘做成raid5,再做成raid 0,性能提升较高,磁盘利用率较低,容错性极高。
- raid 7 可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上性能最高的raid模式,本文里不做详细介绍。
级别 | 最少硬盘 | 容量 | 读取性能 | 写入性能 | 容错性 |
---|---|---|---|---|---|
raid 0 | 2 | n | n | n | 无容错性 |
raid 1 | 2 | n/2 | n | n/2 | 2块可以坏掉一块 |
raid 5 | 3 | n-1 | n-1 | n-1 | 3块可以坏掉一块 |
raid 10 | 4 | n/2 | n | n/2 | 只要不是同一个raid1的硬盘,可以坏掉一半 |
- 实现
2.1 软raid命令mdadm
-C: 创建模式,参数:
- -n #: 使用 #个块设备来创建此RAID
- -l #:指明要创建的RAID的级别,1表示raid1
- -a {yes|no}:自动创建目标RAID设备的设备文件
- -c CHUNK_SIZE: 指明块大小
- -x #: 指明空闲盘的个数
-D:显示raid的详细信息
- -s:扫描配置文件或/proc/mdstat缺少信息。
-G:更改大小
-I:添加或删除单个硬盘
-F:监控
管理模式
- -f: 标记指定磁盘为损坏
- -a: 添加磁盘
- -r: 移除磁盘
注:要查看raid的状态:cat /proc/mdstat,创建之后要写入配置文件来保存否则在停用设备之后无法启动: mdadm –D –s >> /etc/mdadm.conf
2.2 raid 0
[[email protected] ~]#lsblk #查看硬盘情况
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 100G 0 disk
└─sdb1 8:17 0 30G 0 part /test
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1000M 0 part /boot
├─sda2 8:2 0 97.7G 0 part /
├─sda3 8:3 0 48.8G 0 part /app
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdc 8:32 0 10G 0 disk #这里有4块10GB的硬盘,就是我们做实验要用的
sdd 8:48 0 10G 0 disk
sde 8:64 0 10G 0 disk
sdf 8:80 0 10G 0 disk
[[email protected] ~]#mdadm -C /dev/md0 -n 2 -a yes -l 0 /dev/sdc /dev/sdd
#-C创建md0,-n指定由2块硬盘创建,-a yes自动创建设备文件,-l 指定raid 0,后面指定成员硬盘
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started. #创建md0成功
[[email protected] ~]#mdadm -D /dev/md0 #查看创建的md0的详细信息
/dev/md0:
Version : 1.2
Creation Time : Tue Jun 20 19:53:17 2017
Raid Level : raid0 #raid等级
Array Size : 20955136 (19.98 GiB 21.46 GB) #总容量
Raid Devices : 2 #raid硬盘数
Total Devices : 2 #总硬盘数
Persistence : Superblock is persistent
Update Time : Tue Jun 20 19:53:17 2017
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K #分散在硬盘中块的大小
Name : centos6.9:0 (local to host centos6.9)
UUID : cd351fb1:b45416d3:5ac664ae:6d130fd2 #raid的UUID号
Events : 0
Number Major Minor RaidDevice State
0 8 32 0 active sync /dev/sdc #成员1
1 8 48 1 active sync /dev/sdd #成员2
[email protected] ~]#fdisk /dev/md0 #用fdisk管理/md0分区
Command (m for help): n #创建一个分区
Command action
e extended #扩展分区
p primary partition (1-4) #主分区
p #这里选了p,创建一个主分区
Partition number (1-4): 1 #选择分区编号1
First cylinder (1-5238784, default 257 ): #默认从的257个扇区开始,这里选择默认
Last cylinder, +cylinders or +size{K,M,G} (257-5238784, default 5238784): +10G #创建一个10G的分区
Command (m for help): p #查看分区
Disk /dev/md0: 21.5 GB, 21458059264 bytes
2 heads, 4 sectors/track, 5238784 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Disk identifier: 0x861106f0
Device Boot Start End Blocks Id System
/dev/md0p1 257 2621696 10485760 83 Linux
Command (m for help): w #保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[[email protected] ~]#fdisk -l #查看硬盘分区,因为硬盘比较多所以只显示了md0
Disk /dev/md0: 21.5 GB, 21458059264 bytes #硬盘大小
2 heads, 4 sectors/track, 5238784 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Disk identifier: 0xdbb02828
Device Boot Start End Blocks Id System
/dev/md0p1 257 2621440 10485758 83 Linux #硬盘里的分区
[[email protected] ~]#mkfs.ext4 /dev/md0p1 #格式化md0p1分区,文件系统ext4
[[email protected] ~]#mkdir /raid #创建raid文件夹
[[email protected] ~]#mount /dev/md0 /raid/ #把raid挂载到raid目录上
[[email protected] ~]#df #查看挂载信息
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 100660656 3598692 91941964 4% /
tmpfs 502056 8 502048 1% /dev/shm
/dev/sda3 50264772 56396 47648376 1% /app
/dev/sda1 991512 34932 905380 4% /boot
/dev/sdb1 30838496 45008 29220328 1% /test
/dev/md0 20494972 44992 19402224 1% /raid 挂载成功
[[email protected] ~]#vim /etc/fstab #修改文件保存挂载,如果不写入文件的话,开机之后不会自动挂载
UUID=80f63701-5c1b-4dc1-9864-7c1247ed8561 / ext4 defaults 1 1
UUID=daf6631d-90ab-45dc-b5b5-20eb52476056 /app ext4 defaults 1 2
UUID=87c9aa50-7b7a-459e-babc-87bfaf5b49f2 /boot ext4 defaults 1 2
UUID=2f7f0957-6978-4028-ac0d-966fb8d486e5 swap swap defaults 0 0
UUID=0ec85016-ffa5-4d52-b353-b55b0c239228 /raid ext4 defaults 0 0 #在里面加一行,参考系统的格式写
#在添加的时候要写文件的UUID号,以防止设备名变更无法挂载。
[[email protected] ~]#blkid /dev/md0p1 #查看分区的UUID
/dev/md0p1: UUID="0ec85016-ffa5-4d52-b353-b55b0c239228" TYPE="ext4" #分区的UUID号和文件系统类型
[[email protected] ~]#mdadm -D -s /dev/md0 >> /etc/mdadm.conf #把md0的配置追加进/etc/mdadm.conf文件
2.3 raid 1
[[email protected] ~]#mdadm -C /dev/md1 -n 2 -a yes -l 1 /dev/sdc /dev/sdd #创建raid1
/dev/md1:
Version : 1.2
Creation Time : Tue Jun 20 21:27:53 2017
Raid Level : raid1 #raid 等级
Array Size : 10477568 (9.99 GiB 10.73 GB) #raid1容量
Used Dev Size : 10477568 (9.99 GiB 10.73 GB) #镜像空间大小
Raid Devices : 2 #raid硬盘数
Total Devices : 2 #总硬盘数
Persistence : Superblock is persistent
Update Time : Tue Jun 20 21:28:25 2017
State : clean, resyncing
Active Devices : 2 #主动设备
Working Devices : 2 #工作设备
Failed Devices : 0 #问题设备
Spare Devices : 0 #备用设备
Resync Status : 66% complete
Name : centos6.9:1 (local to host centos6.9)
UUID : 2244ef88:05bcf8d4:3de8c6f6:a65ee55b
Events : 10
Number Major Minor RaidDevice State
0 8 32 0 active sync /dev/sdc #成员
1 8 48 1 active sync /dev/sdd #成员
2.4 raid 5
[[email protected] ~]#mdadm -C /dev/md2 -n 3 -x 1 -a yes -l 5 /dev/sdc /dev/sdd /dev/sde /dev/sdf
#指定三个成员硬盘,同是用-x指定了一个备用盘
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started. #创建成功
[[email protected] ~]#mdadm -D /dev/md2
/dev/md2:
Version : 1.2
Creation Time : Tue Jun 20 21:49:02 2017 #创建时间
Raid Level : raid5 #等级
Array Size : 20955136 (19.98 GiB 21.46 GB) #可用容量
Used Dev Size : 10477568 (9.99 GiB 10.73 GB) #校验数据容量
Raid Devices : 3 #
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Tue Jun 20 21:49:55 2017
State : clean
Active Devices : 3 #raid硬盘数
Working Devices : 4 #总硬盘数
Failed Devices : 0 #损坏硬盘数
Spare Devices : 1 #备用硬盘数
Layout : left-symmetric
Chunk Size : 512K #分散在硬盘中的块大小,不指定默认为512KB
Name : centos6.9:2 (local to host centos6.9)
UUID : e33c123d:e4598fda:c6b15be6:7cc8cf29 #uuid
Events : 18
Number Major Minor RaidDevice State
0 8 32 0 active sync /dev/sdc #成员
1 8 48 1 active sync /dev/sdd
4 8 64 2 active sync /dev/sde
3 8 80 - spare /dev/sdf #空闲备份硬盘
#空闲盘,不用来储存数据,在其中一块raid硬盘出现问题后自动顶替并通过运算恢复数据
2.5 有容错性的raid实验其容错性,这里以raid5来实验。
[[email protected] raid]#echo 11111 > 11 #创建一个文件,在里面写入11111
[[email protected] raid]#cat 11 #查看文件
11111
[[email protected] ~]#mdadm /dev/md2 -f /dev/sdc #把sdc标记为损坏
[[email protected] ~]#mdadm -D /dev/md2 #查看md2状态,因为信息过多,所以这里只显示硬盘的状态
Active Devices : 3
Working Devices : 4
Failed Devices : 1 #这里显示有一个损坏的硬盘
Spare Devices : 0 #没有空闲的硬盘了
Number Major Minor RaidDevice State
3 8 80 0 active sync /dev/sdf #sdf已经替换了sdc
1 8 48 1 active sync /dev/sdd
4 8 64 2 active sync /dev/sde
0 8 32 - faulty /dev/sdc #sdc被标记为坏掉的
[[email protected] raid]#cat 11 #看看数据有没有丢失
11111 #数据没有问题
2.6 移除和添加硬盘,我这里添加了一块硬盘sdg
[[email protected] raid]#mdadm /dev/md2 -r /dev/sdc #把上面实验标记为损坏的sdc从md2中移除
mdadm: hot removed /dev/sdc from /dev/md2
[[email protected] raid]#mdadm -D /dev/md2 #查看md2的状态
/dev/md2:
Version : 1.2
Creation Time : Tue Jun 20 21:49:02 2017
Raid Level : raid5
Array Size : 20955136 (19.98 GiB 21.46 GB)
Used Dev Size : 10477568 (9.99 GiB 10.73 GB)
Raid Devices : 3
Total Devices : 3 #这里的总硬盘数只有三个
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0 #没有损坏硬盘
Spare Devices : 0
Number Major Minor RaidDevice State
3 8 80 0 active sync /dev/sdf
1 8 48 1 active sync /dev/sdd
4 8 64 2 active sync /dev/sde #没有sdc的信息了
[[email protected] raid]#mdadm /dev/md2 -a /dev/sdg #把sdg添加到md2中
[[email protected] raid]#mdadm -D /dev/md2 #查看md2的信息,有省略
/dev/md2:
Raid Devices : 3
Total Devices : 4 #总硬盘数
State : clean
Active Devices : 3
Working Devices : 4 #总硬盘数
Failed Devices : 0 #损坏硬盘数
Spare Devices : 1 #有一个备用盘
Name : centos6.9:2 (local to host centos6.9)
UUID : e33c123d:e4598fda:c6b15be6:7cc8cf29
Events : 39
Number Major Minor RaidDevice State
3 8 80 0 active sync /dev/sdf
1 8 48 1 active sync /dev/sdd
4 8 64 2 active sync /dev/sde
5 8 96 - spare /dev/sdg #sdg为备份盘
如果想要扩展只想raid硬盘的盘数用:
[[email protected] raid]#mdadm -G /dev/md2 -n 4 -a /dev/sdg
Update Time : Tue Jun 20 22:48:47 2017
State : clean, reshaping
Active Devices : 4 #raid盘数
Working Devices : 4 #总盘数
Failed Devices : 0
Spare Devices : 0 #没有备份盘
Number Major Minor RaidDevice State
3 8 80 0 active sync /dev/sdf
1 8 48 1 active sync /dev/sdd
4 8 64 2 active sync /dev/sde
5 8 96 3 active sync /dev/sdg #不会把sdg添加为备用盘,直接参与数据储存
2.7 停用、启动raid设备
[[email protected] ~]#mdadm -D -s >> /etc/mdadm.conf #在创建好raid设备后一定要,把配置写入文件,否则无法启动
[[email protected] ~]#cat /etc/mdadm.conf #查看文件
ARRAY /dev/md2 metadata=1.2 name=centos6.9:2 UUID=cbb20529:52eced42:77605adf:0a416662
[[email protected] ~]#mdadm -S /dev/md2 #停用raid设备md2
mdadm: stopped /dev/md2
[[email protected] ~]#mdadm -D /dev/md2 #再来查看md2的信息
mdadm: cannot open /dev/md2: No such file or directory #提示没有这个目录或文件,无法打开
[[email protected] ~]#mdadm -A -s /dev/md2 #启用设备
mdadm: /dev/md2 has been started with 4 drives. #启动成功
[[email protected] ~]#mdadm -D /dev/md2 #查看md2的状态
/dev/md2:
Version : 1.2 #可以查看了
Creation Time : Tue Jun 20 23:02:38 2017
Raid Level : raid5
Array Size : 31432704 (29.98 GiB 32.19 GB)
Used Dev Size : 10477568 (9.99 GiB 10.73 GB)
Raid Devices : 4
Total Devices : 4
#省略......
Number Major Minor RaidDevice State
0 8 80 0 active sync /dev/sdf
1 8 48 1 active sync /dev/sdd
2 8 64 2 active sync /dev/sde
4 8 96 3 active sync /dev/sdg
注:如果没有写配置文件可以用下面的命令来强制启动,但会丢失一些配置信息
mdadm –R /dev/md2
2.8 删除raid设备
- 1.先用umont取消设备挂载
- 2.停止raid设备
- 3.删除/etc/fstab里挂载信息和/etc/mdadm.conf文件里的配置行
- 4.删除每个磁盘的raid信息:
mdadm --zero-superblock /dev/sdd
注:如果不用第4步的命令,直接格式化硬盘,raid信息会清除不干净有残留,重启之后设备会重新创建。