您的位置:首页 > 运维架构 > Linux

Linux入门之磁盘管理(7)RAID的实现

2016-08-30 21:03 561 查看
Linux入门之磁盘管理(7)RAID的实现RAID(Redundant Arrays of Inexpensive Independent Disks)被称为廉价冗余阵列,为了提高磁盘的性能或者保存数据完整,将多个磁盘合成一个“阵列”来提供更好的性能、冗余等。RAID一般使用硬件raid,并配合指定 raid的接口或者raid卡来组成硬件raid,但是开销一般比较大,于是在linux中也提供了软件raid的实现。 raid的好处:提高IO能力: 磁盘的并行读写提高耐用性: 磁盘冗余来实现 RAID技术分类:多个磁盘组成条带化RAID1:镜像,mirror 保证数据的可用性校验码 等 raid各个级别:RAID level(级别):仅代表磁盘组织方式不同,没有上下之分RAID-0:条带化性能提升:读、写冗余能力 (容错能力):无空间利用率:nS至少需要2块磁盘RAID-1:镜像性能提升:写性能下降,读性能提示冗余能力:有空间利用率:1/2至少需要2块RAID-4:多块数据盘异或运算值,存于专用校验盘RAID-5:性能表现:读、写提升冗余能力:有空间利用率:(n-1)/n至少需要3块盘RAID-10:性能表现:读、写提升冗余能力:有空间利用率:1/2至少需要4块盘RAID-01:性能表现:读、写提升冗余能力:有空间利用率:1/2至少需要4块盘RAID-50:性能表现:读、写提升冗余能力:有空间利用率:(n-2)/n至少需要6块盘 jdod :将多个小盘组合成一个大盘性能表现:无提升冗余能力:无空间利用率:100%至少需要2块 软硬RAID的使用区别:硬件RAID:BIOS主板下调整、RAID卡软件RAID:内核模块支持 (md:multi disks) 使用命令实现软件raid:mdadm 管理命令,将任何设备做成RAID,并有多种模式选项命令模式化的命令: 创建模式:-C --create 专用选项:-l # :指定raid级别 --level-n # : 设备个数 -num-a {yes|no}:是否自动为其创建设备文件 --auto-x # :指定空闲盘个数-c CHUNK_SIZE:指定chunk大小 管理模式: -a,--add :添加raid成员 -r,--remove :移除raid成员 -f,--fail : 模拟损坏raid成员 监控模式: -F 增长模式: -G 装配模式: -A 查看RAID阵列的详细信息 mdadm -D /dev/md# --detail 停止阵列: mdadm -S /dev/md# 特例:格式化md0设备指定分配条带和block:
mke2fs -j -E stride=16 -b 4096 /dev/md0

RAID5案例:1、创建一个3G的raid5级别设备(那么至少需要3个1G的设备):#在/dev/sdb下创建6个分区,其类型指定为fd编号,表示为Linux raid
[root@mzf ~]# fdisk -l /dev/sdb 2> /dev/null | grep '^/dev'
/dev/sdb1          1     132     1060258+   fd  Linux raid autodetect
/dev/sdb2         133     264     1060290   fd  Linux raid autodetect
/dev/sdb3         265     396     1060290   fd  Linux raid autodetect
/dev/sdb4         397     2610    17783955   5  Extended
/dev/sdb5         397     528     1060258+  fd  Linux raid autodetect
/dev/sdb6         529     660     1060258+  fd  Linux raid autodetect
2、使用mdadm命令#使用mdadm创建为level 5级别raid
[root@mzf ~]# mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb{1,2,3,5}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
#查看md0设备信息及成员
[root@mzf ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb3[4] sdb5[3](S) sdb2[1] sdb1[0]
2117632 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>
#查看md0的raid级别
[root@mzf ~]# mdadm -D /dev/md0 | grep -i 'level.*'
Raid Level : raid5
#查看成员信息及其状态:
[root@mzf ~]# mdadm -D /dev/md0 | grep '.*/dev/sdb[0-9]$'
0     8     17      0      active sync   /dev/sdb1
1     8     18      1      active sync   /dev/sdb2
4     8     19      2      active sync   /dev/sdb3
3     8     21      -      spare         /dev/sdb5
#要使用md0设备必须先格式化
[root@mzf ~]# mke2fs -t ext4 /dev/md0
#挂载md0设备
[root@mzf ~]# mkdir /mnt/md0
[root@mzf ~]# mount /dev/md0 /mnt/md0
#查看md0是否已经被识别为一个单个磁盘设备
[root@mzf ~]# fdisk -l 2> /dev/null | grep 'md0'
Disk /dev/md0: 2168 MB, 2168455168 bytes
#查看挂载点
[root@mzf ~]# df | grep '/md0'
/dev/md0         2018796    3120   1909796   1% /mnt/md0
#拷贝配置文件到此挂载点
[root@mzf ~]# cp /etc/issue /etc/inittab /mnt/md0
#ls列出文件,发现出现了lost+found表示已经被识别了单个硬盘的单个分区
[root@mzf ~]# ls /mnt/md0
inittab  issue  lost+found

3、损坏模拟#下面进行模拟损坏一块磁盘#先查看此时md0成员信息,/dev/sdb5表示为备用,其它都是完好的
[root@mzf ~]# mdadm --detail /dev/md0 | grep '.*/dev/sdb[0-9]$'
0     8       17        0      active sync   /dev/sdb1
1     8       18        1      active sync   /dev/sdb2
4     8       19        2      active sync   /dev/sdb3
3     8       21        -      spare   /dev/sdb5
#使用-f或者--fail 选项模拟时/dev/sdb3分区损坏
[root@mzf ~]# mdadm /dev/md0  --fail /dev/sdb3
mdadm: set /dev/sdb3 faulty in /dev/md0
#再次查看分区信息,此时备用的sdb5已经自动顶了上去
[root@mzf ~]# mdadm --detail /dev/md0 | grep '.*/dev/sdb[0-9]$'
0      8      17      0       active sync     /dev/sdb1
1      8      18      1      active sync   /dev/sdb2
3      8       21      2      spare rebuilding /dev/sdb5
4      8      19      -      faulty   /dev/sdb3
#这时我们查看文件看看有没有损坏
[root@mzf ~]# cat /mnt/md0/issue
CentOS release 6.8 (Final)
Kernel \r on an \m
#下面修改此文件内容
[root@mzf ~]# sed -i '$a \new line \n hello world' /mnt/md0/issue
#查看修改后的文件内容
[root@mzf ~]# cat /mnt/md0/issue
CentOS release 6.8 (Final)
Kernel \r on an \m

new line
hello world

4、移除成员#这时我们移掉一块分区
[root@mzf ~]# mdadm /dev/md0 -r /dev/sdb3
mdadm: hot removed /dev/sdb3 from /dev/md0
说明:这里的热移除表示正在使用时进行移除#再次查看成员
[root@mzf ~]# mdadm -D /dev/md0 | grep '.*/dev/sdb[0-9]$'
0     8      17        0      active sync   /dev/sdb1
1     8      18        1      active sync   /dev/sdb2
3     8      21        2      active sync   /dev/sdb5

5、添加成员接管#添加一个分区加入md0,这里要指定-n 表示为第4块硬盘
[root@mzf ~]# mdadm -G /dev/md0 -n 4 -a /dev/sdb6
mdadm: added /dev/sdb6
mdadm: Need to backup 3072K of critical section..
#再次查看md0磁盘阵列成员
[root@mzf ~]# mdadm -D /dev/md0 | grep '.*/dev/sdb[0-9]$'
0     8       17        0      active sync   /dev/sdb1
1     8       18        1      active sync   /dev/sdb2
3     8       21        2      active sync   /dev/sdb5
4     8       22        3      active sync   /dev/sdb6
#再次查看数据,文件读取正常
[root@mzf ~]# cat /mnt/md0/issue
CentOS release 6.8 (Final)
Kernel \r on an \m

new line
hello world
#再次加入
[root@mzf ~]# mdadm -G  /dev/md0 -n 5  -a /dev/sdb3
mdadm: added /dev/sdb3
mdadm: Need to backup 6144K of critical section..
#使用watch工具进行动态数据查看
[root@mzf ~]# watch -n 3 'cat /proc/mdstat'
解析:这里表示数据同步中,使用watch可以不断进行读秒查看

#数据仍然存在
[root@mzf ~]# cat /mnt/md0/issue
CentOS release 6.8 (Final)
Kernel \r on an \m

new line
hello world

6、保存md0阵列配置#保存阵列数据配置
[root@mzf ~]# mdadm -D --scan /dev/md0 > /etc/mdadm.conf

7、停止md0阵列#卸载md0设备
[root@mzf ~]# umount /mnt/md0
#停止磁盘阵列
[root@mzf ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
#内存中已经没有md0阵列了
[root@mzf ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
unused devices: <none>
#md0真的被停止了
[root@mzf ~]# fdisk -l 2> /dev/null | grep 'md0'

8、重启启动磁盘阵列#重新启用md0阵列
[root@mzf ~]# mdadm -A -s /dev/md0
mdadm: /dev/md0 has been started with 5 drives.
#md0中5个设备都列了出来
[root@mzf ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb1[0] sdb3[5] sdb6[4] sdb5[3] sdb2[1]
4235264 blocks super 1.2 level 5, 512k chunk, algorithm 2 [5/5] [UUUUU]

unused devices: <none>
#挂载md0设备
[root@mzf ~]# mount /dev/md0 /mnt/md0
#文件数据依然存在
[root@mzf ~]# cat /mnt/md0/issue
CentOS release 6.8 (Final)
Kernel \r on an \m

new line
hello world
注意:如果相要重新启用md0并读取原有设备成员,那么就需要madm -D -s的配置信息保存至/etc/mdadm.conf文件中,否则无法重新启用的。 9、测底清除设备成员的raid信息#先卸载设备
[root@mzf ~]# umount /dev/md0
#停止阵列设备
[root@mzf ~]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
#清除radi的超级块信息
[root@mzf ~]# mdadm --zero-superblock /dev/sdb{1,2,3,5,6}
#删除配置文件
[root@mzf ~]# rm -f /etc/mdadm.conf
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux