读写性能:例如RAID 0可以提高读写性能,让系统I/O可以得到改善
容量:可以把多块磁盘组合起来,让单一文件系统可以有相当大的容量。
数据按系统规定的chunk 为单位依次写入多块磁盘,因此它的读写性能很高,但没有容错能力 ,即任何一块磁盘坏了,数据 就丢失了,而且多块磁盘组合,损坏的几率大大增大。但磁盘利用率为100%
它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据,这样它的写入性能没有提高,因为同样的数据要存储多次,但提供了百分之百的数据冗余,两个磁盘互为镜像,所以无论哪个磁盘坏了,都不会影响数据的读取,因此容错性能非常好,并可以提高读数据的速度;但缺点就是需要双份硬盘,因此价格较高。磁盘利用率只有50%
将数据条块化并分布于不同的磁盘上,但使用一块磁盘作为校验盘,每次写操作都需要访问校验盘,这时校验盘会成为写操作的瓶颈,因此RAID 4在商业环境中也很少使用。如图所示。disk 3 压力会很大,每次读写数据都要访问,容易损坏。
数据存储和raid 4 基本一样,只是校验值不在放在一个固定的磁盘上了,而是轮流放在每个磁盘上,这样每块磁盘的压力 就一样了。
raid 4 和raid 5 一样只允许一块磁盘损坏,有一块磁盘损坏是,数据还可以读取,但读取速度较慢,而且这是还会增大其他磁盘损坏的几率,当有一块磁盘损坏时,应立即换取下这块坏磁盘,换一块好的。
raid 0 性能好但是数据不安全,raid 1 的数据安全但是性能不佳,于是就产生了 10 组合 或是 01组合 。
raid 01: 就是先让两块磁盘组成raid 0而且这样的组合有两组,再把这两组raid 0 组合成raid 1 。
raid 10 就是先组合RAID 1 在组合RAID 0
由于RAID 0 的优点,性能得以提升,由于RAID 1 的优点,数据的已备份,但也有与RAID 1 的缺点,容量会少一半用来备份。
通过磁盘阵列卡来完成数组的目的,磁盘阵列卡上有一个专门的芯片来处理RAID的任务,内核不会识别各个磁盘,内核中识别阵列卡。不会重复消耗原本系统的I/O总线,性能比较好,但是磁盘阵列卡价格有点贵 。因此就产生了软件磁盘阵列。在blos界面配置。操作系统装在RAID上。但内核要可以识别RAID.设别文件名为/dev/sd[a-p].
利用软件来仿真磁盘阵列的功能,但会消耗过多的系统资源,例如cpu的运算与I/O总线的资源。硬盘直接连在主板上,且内核能识别每一块磁盘。MD会把内核识别的磁盘再次封装成RAID,输入到用户空间。因此设别名为/dev/md0,/dev/md1 .不过现在我们的计算机速度都很快,这些速度限制已不再是问题,所以 我们下面就玩玩软件磁盘阵列。
mdadm的配置文件在/etc/mdadm.conf
设备被识别为/dev/md0 /dev/md1
mdadm 可以把底层的块设备组成软RAID
底层块设别 可以是整块磁盘也可以是分区 但如果使用的是分区 创建RAID 1意义就不打了,就一块磁盘 ,磁盘坏了,数据备份多少次都没意义了。但我们做实验可以用分区,来练习一下。
mdadm可以创建的级别有RAID 0 ,RAID 1 ,RAID 4 ,RAID 5 ,RAID 6,RAID 10
还有 linear 模式 即是线性模式,存满一块磁盘再存另外一块磁盘。
mdadm [mode] <raiddevice> [options] <component-devices>
assemble 装配模式 -A
create 创建模式 -C
follow or monitor 监控模式 -F
grow 增长模式 -G
manage 管理模式 --add -fail --remove
要创建的设别名,例如 /dev/md0,/dev/md1 系统默认只 有 /dev/md0 ,如果想创建 /dev/md1 要自己创建。
不同模式下的选项意义不同
-C ,--create create a new array
-n 几块磁盘
-x 几块空闲盘 --spare-devices
-c --chunk 块大小 默认64KB 数据存储时要分为块
-l 级别 0,1,5,
-p layout 左对称 右对称 做非对称 右非对称
-a yes 自动创建 设备名。
--manage 模式下的参数有:
--fail:把后面的设备设置成出错状态
--add:将后面的设备加入到这个MD中
--remove:将后面的设备从这个MD中删除。
RAID 5 的环境 :
用fdisk创建5个1G的分区 类型改为fd
- #fdisk /dev/sdb
- /dev/sdb5 1 123 987934+ fd Linux raid autodetect
- /dev/sdb6 124 246 987966 fd Linux raid autodetect
- /dev/sdb7 247 369 987966 fd Linux raid autodetect
- /dev/sdb8 370 492 987966 fd Linux raid autodetect
- /dev/sdb9 493 615 987966 fd Linux raid autodetect
- #partprobe
- [root@localhost ~]# mdadm -C /dev/md0 -a yes -l 5 -n 4 -x 1 /dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8 /dev/sdb9
- mdadm: array /dev/md0 started.
- [root@localhost ~]# mdadm --detail /dev/md0 #查看/dev/md0 的详细信息
- /dev/md0: #设备文件名
- Version : 0.90
- Creation Time : Wed Jun 20 19:23:34 2012 #创建时间
- Raid Level : raid5 #等级
- Array Size : 2963520 (2.83 GiB 3.03 GB) #可用容量
- Used Dev Size : 987840 (964.85 MiB 1011.55 MB)#每个设备的容量
- Raid Devices : 4 #用作RAID的设备个数
- Total Devices : 5 #总设备个数
- Preferred Minor : 0
- Persistence : Superblock is persistent
- Update Time : Wed Jun 20 19:24:20 2012
- State : clean
- Active Devices : 4 #启用的设备个数
- Working Devices : 5 #可用的设备个数
- Failed Devices : 0
- Spare Devices : 1 #预备的设备个数
- Layout : left-symmetric
- Chunk Size : 64K
- UUID : c4d40765:514c4618:bbdd9c4c:56d359b0
- Events : 0.4
- Number Major Minor RaidDevice State
- 0 8 21 0 active sync /dev/sdb5
- 1 8 22 1 active sync /dev/sdb6
- 2 8 23 2 active sync /dev/sdb7
- 3 8 24 3 active sync /dev/sdb8
- 4 8 25 - spare /dev/sdb9
- #mke2fs -j /dev/md0
- #mkdir /mnt/raid
- #mount /dev/md0 /mnt/raid
- [root@localhost ~]# df
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/mapper/vol0-root
- 29741864 5016520 23190164 18% /
- /dev/mapper/vol0-home
- 4951688 141376 4554724 4% /home
- /dev/sda1 101086 31952 63915 34% /boot
- tmpfs 517336 0 517336 0% /dev/shm
- /dev/md0 2916920 69952 2698792 3% /mnt/raid
#mke2fs -j -b 2048 -E stride=32 /dev/md0
(-b 1024 2048 4096 )
( -c默认 64k) 写明 数据分割的chunk 与磁盘的block 的关系 可以提高写入性能 -L data 卷标
我们现在的raid 5 的容量是4G 如果我们现在需要5G 的空间 可以再加入一块磁盘 假设/dev/sdb10是1G的可以使用
1、加入磁盘
#mdadm -a /dev/md0 /dev/sdb10
#mdadm -G /dev/md0 -n 5 -G增长模式 -n5 增加为5个设备
2、重塑文件系统边界
# resize2fs /dev/md0 默认是重塑到和物理边界一样大 也可以跟具体的容 量(3G扩展或减缩)
#df -lh 查看一下
[解释一下为什么需要重塑文件系统边界,每一个设备都有两个边界,一个是物理边界,既是物理实际的大小,另外一个是文件系统边界,既是格式化以后可以使用的边界,增长的只是物理边界,所以要重塑一下文件系统边界 ]
1、先复制一些数据
#cp /etc/fstab /mnt/raid
2、假设/dev/sdb5 坏了
#mdadm --manage /dev/md0 --fail (-f) /dev/sdb5
- [root@localhost ~]# mdadm --detail /dev/md0
- /dev/md0:
- Version : 0.90
- Creation Time : Wed Jun 20 19:23:34 2012
- Raid Level : raid5
- Array Size : 2963520 (2.83 GiB 3.03 GB)
- Used Dev Size : 987840 (964.85 MiB 1011.55 MB)
- Raid Devices : 4
- Total Devices : 5
- Preferred Minor : 0
- Persistence : Superblock is persistent
- Update Time : Wed Jun 20 20:22:01 2012
- State : clean, degraded, recovering
- Active Devices : 3
- Working Devices : 4
- Failed Devices : 1
- Spare Devices : 1
- Layout : left-symmetric
- Chunk Size : 64K
- Rebuild Status : 1% complete
- UUID : c4d40765:514c4618:bbdd9c4c:56d359b0
- Events : 0.6
- Number Major Minor RaidDevice State
- 4 8 25 0 spare rebuilding /dev/sdb9
- 1 8 22 1 active sync /dev/sdb6
- 2 8 23 2 active sync /dev/sdb7
- 3 8 24 3 active sync /dev/sdb8
- 5 8 21 - faulty spare /dev/sdb5
可以看到/dev/sdb9 已经启用 在重建数据
或者使用 watch -n1 'cat /proc/mdstat'
一段时间后 数据重建好了
- 0 8 25 0 active sync /dev/sdb9
- 1 8 22 1 active sync /dev/sdb6
- 2 8 23 2 active sync /dev/sdb7
- 3 8 24 3 active sync /dev/sdb8
- 4 8 21 - faulty spare /dev/sdb5
#mdadm --manage /dev/md0 --add /dev/sdb10 --remove (-r) /dev/sdb5
这一切都可以在开机的状态下进行 不影响正常操作
设置mdadm的配置文件
[root@localhost ~]# mdadm --detail (-D)/dev/md0 |grep -i uuid
UUID : c4d40765:514c4618:bbdd9c4c:56d359b0
[root@localhost ~]# vim /etc/mdadm.conf
ARRAY /dev/md0 UUID=4d40765:514c4618:bbdd9c4c:56d359b0e
设置开机自动挂载
#vim /etc/fstab
/dev/md0 /mnt/raid ext3 defaults 1 2
#umount /dev/md0
#mount -a 测试一下是否可以挂载
#df 查看
1、先卸载并删除配置文件 并删除/etc/fstab 中刚写入的那行
2、直接关闭
#mdadm --stop(-S) /dev/md0
3、重新启用
[root@localhost ~]# mdadm -A /dev/md0 /dev/sdb{6,7,8,9}
4、将md0的信息保存到配置文件里
[root@localhost ~]# mdadm --examine --scan >>/etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 UUID=4d40765:514c4618:bbdd9c4c:56d359b0e
ARRAY /dev/md0 level=raid5 num-devices=4 UUID=c4d40765:514c4618:bbdd9c4c:56d359b0
拙笔小结,望路过的多多指教。