RAID
目的:提高冗余 提高性能
A:array 阵列
R :redundent 冗余
常见级别:0 1 5 6 10
根据硬件或者连接方式的不同,分为软件RAID和硬件RAID(专门的RAID卡)
以硬件方式实现的磁盘阵列,所对应的设备文件在/dev/下都已sd开头。
以软件的方式实现的RAID,是依靠linux自身将设备连接起来,是在内核中实现的,实现的模块为md。所对应的设备文件在/dev/下以md开头。
mdadm 多磁盘管理工具,可以是分区,也可以是独立的一块磁盘。
linear (线性模式),将两个以上的磁盘整合成为一个实体的存数装置。所有的数据是:“一个一个填满之后,才将数据继续写到下一个磁盘上”。由于数据是一个一个写入到不同的磁盘当中,因此整个磁盘的读取性能并不会增加。此外,数据具有连续性,若一个磁盘损毁,导致整个数据丢失。优势是:磁盘的空间会完整的被利用完毕!
RAID0:条带(strip) 将数据分成多块,按等分放在不同的磁盘上交叉进行存储,可以提高磁盘性能,无容错功能。任何一块盘坏掉,会导致整个 数据全部丢失。
RAID1:镜像卷 将数据同时写入两块磁盘中,提供冗余功能。总容量以最小的那块磁盘为主。但是写速度明显降低,读性能明显提高。磁盘利用率百分之五十。
RAID4:至少三块磁盘,有一块盘专门用来做校验盘,缺陷:校验盘会成为系统的瓶颈。
RAID5:至少三块磁盘,轮流做校验盘,前两块磁盘放数据,第三块磁盘放奇偶校验码,二三放数据,第一块磁盘放校验数据,依次轮流。空间利用率(N-1)/ N。只允许坏一块盘。读取性能相当于RAID0,因为要计算写入到磁盘当中的平衡信息(parity information),所以写入的性能增加不会很明显。
PS:可以增加一块空闲盘(spare disk),一旦有一块盘发生故障可以立即顶上去。
RAID6 至少需要四块盘,两块盘做奇偶校验,轮流放奇偶校验数据。
mdadm manage MD devices aka(also known as 众所周知)linux software Raid
创建软raid 模式化工具
格式 mdadm [mode] <raiddevice> [options] <component-devices> 组成模式
常用模式(mode):assemble(装配) create(创建) follow or monitor(监控) grow(增长)manage(管理)
Assemble:把一个从别处移植过来的或者已经停用的raid重新启用起来。不用指定raid中有哪些磁盘组成,可以手动或者自动扫描。
Create :创建一个Raid ,有两个或两个以上的磁盘或者分区。
Follow or monitor:监控模式,监控raid当中磁盘的工作状态,只对1,4,5,6,10(有冗余功能)有效。
Grow:增长或者收缩raid,或者重建raid。所支持功能包括改变活动处于活动状态磁盘的大小及个数,适用于1,4,5,6具有冗余功能的级别下。
Manage:管理模式,实现特殊的管理工作,添加一个新的冗余盘或者移掉一个坏盘。在MISC模式(杂项模式)下同样可以实现。
选项 Options
-A,--assemble assemble a pre-existing array
-C,--create create a new array
-F,--follow,--monitor select monitor mode
-G, --grow change the size or shape of an active array
如果在一个设备之前已经指定了一个选项,例如 -add,--fail ,--remove 将自动被识别为manage模式。
跟模式无关的选项:
-V,--verbose 显示更详细的信息,选项较特殊,只能跟--detail (显示raid设备的详细信息), --scan(扫描) 和 --examine , --scan一起用。
-s,--scan 扫描配置文件或者/proc/mdstat(保留当前系统上处于活动或者停止状态的raid设备)来获取额外的信息。
Create 和grow 的选项
-n --raid-devices= 指定当前创建的raid一共有多少块活动的设备个数
-x --spare-devices= 指定空闲设备的个数
-c --chunk= 定义块大小,默认是64k
-l --level= 指定级别
在VMware上模拟raid0的创建过程:
先创建两个分区
[root@server27 ~]# fdisk /dev/sda
两个5G分区已经创建完毕,注意此时一定不要格式化分区。
[root@server27 ~]# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sda7 /dev/sda8
mdadm: array /dev/md0 started.
-a yes 当设备启动的时候自动创建设备文件
-l 0 创建级别
-n 2 指定磁盘个数
创建完毕后查看一下:
[root@server27 ~]# cat /proc/mdstat
格式化设备:
[root@server27 ~]# mkfs -t ext3 -L RAID0 /dev/md0
创建一个挂载点,然后挂载:
[root@server27 ~]# mkdir /raid
[root@server27 ~]# mount /dev/md0 /raid
/dev/mdo 已经工作正常。
设置开机自动挂载,编辑/etc/fstab 文件,添加:
/dev/md0 /raid ext3 defaults 0 0
在VMware上模拟raid1的创建过程:
三块分区已经创建好了 /dev/sda9, /dev/sda10, /dev/sda11
[root@server27 raid]# partprobe
分区信息与内核同步一下,一定不要忘了
[root@server27 raid]# cat /proc/partitions
准备工作已经完成,下面开始Raid1的创建,过程跟raid0 差不多
[root@server27 raid]# mdadm -C /dev/md1 -a yes -l 1 -n 2 -x 1 -c 32 /dev/sda9 /dev/sda10 /dev/sda11
[root@server27 raid]# cat /proc/mdstat
[root@server27 raid]# mdadm --detail /dev/md1
查看某个Raid设备的详细信息
模拟raid的创建过程:
PS:创建raid5 至少需要三块盘,如果再加一块冗余盘的话,至少需要四块。
四个分区已经准备完毕: /dev/sda12, /devsda13, /dev/sda14 ,/dav/sda15
[root@server27 raid]# partprobe
[root@server27 raid]# mdadm -C /dev/md2 -a yes -l 5 -n 3 /dev/sda{12,13,14}
[root@server27 raid]# cat /proc/mdstat
添加一块冗余盘
[root@server27 raid]# mdadm -a /dev/md2 /dev/sda15
[root@server27 raid]# mdadm --detail /dev/md2
移除一块冗余盘:
[root@server27 raid]# mdadm -r /dev/md2 /dev/sda15
查看一下:
格式化设备
[root@server27 raid]# mkfs -t ext3 /dev/md2
创建一个挂载点,并挂载
模拟磁盘坏掉的情况 --fail --set-faulty
[root@server27 md2]# mdadm --set-faulty /dev/md2 /dev/sda14
依然可以正常访问。
增加一块新盘:
[root@server27 md2]# mdadm -a /dev/md2 /dev/sda15
正在重建,等会儿会显示正常
将坏盘移除
[root@server27 md2]# mdadm -r /dev/md2 /dev/sda14
将Raid停止
先卸载
[root@server27 ~]# mdadm -S /dev/md2
如果想重新使用需要重新装配
[root@server27 ~]# mdadm -A /dev/md2 /dev/sda{12,13,15}
如果想保留raid 的详细信息需要手动去编辑。在/etc/下mdadm.conf(默认不存在)
[root@server27 ~]# mdadm --detail --scan
显示磁盘上所有处于活动装状态的阵列
[root@server27 ~]# mdadm --detail --scan >> /etc/mdadm.conf
再来查看一下mdadm.conf 已经有信息了
来验证一下,看能不能使用
停掉md2 在重新装配一下
[root@server27 ~]# umount /md2
[root@server27 ~]# mdadm -S /dev/md2
mdadm: stopped /dev/md2
[root@server27 ~]# mdadm -A --scan
mdadm: /dev/md2 has been started with 3 drives .
PS:格式化的时候有一个选项要注意
mkfs.ext3 -j -b 4096 -E stride=16 /dev/md0
-E指定扩展选项,stride= chuck/block 写上之后可以提高raid的性能