RAID管理及命令mdadm详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RAID管理及命令mdadm详解相关的知识,希望对你有一定的参考价值。
磁盘阵列
磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。
磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。
分类
磁盘阵列其样式有三种,一是外接式磁盘阵列柜、二是内接式磁盘阵列卡,三是利用软件来仿真。
外接式磁盘阵列柜最常被使用大型服务器上,具可热交换(Hot Swap)的特性,不过这类产品的价格都很贵。
内接式磁盘阵列卡,因为价格便宜,但需要较高的安装技术,适合技术人员使用操作。硬件阵列能够提供在线扩容、动态修改阵列级别、自动数据恢复、驱动器漫游、超高速缓冲等功能。它能提供性能、数据保护、可靠性、可用性和可管理性的解决方案。阵列卡专用的处理单元来进行操作。
利用软件仿真的方式,是指通过网络操作系统自身提供的磁盘管理功能将连接的普通SCSI卡上的多块硬盘配置成逻辑盘,组成阵列。软件阵列可以提供数据冗余功能,但是磁盘子系统的性能会有所降低,有的降低幅度还比较大,达30%左右。因此会拖累机器的速度,不适合大数据流量的服务器。
RAID优缺点
优点
提高传输速率。RAID通过在多个磁盘上同时存储和读取数据来大幅提高存储系统的数据吞吐量(Throughput)。在RAID中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个磁盘驱动器几倍、几十倍甚至上百倍的速率。这也是RAID最初想要解决的问题。因为当时CPU的速度增长很快,而磁盘驱动器的数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。RAID最后成功了。
通过数据校验提供容错功能。普通磁盘驱动器无法提供容错功能,如果不包括写在磁盘上的CRC(循环冗余校验)码的话。RAID容错是建立在每个磁盘驱动器的硬件容错功能之上的,所以它提供更高的安全性。在很多RAID模式中都有较为完备的相互校验/恢复的措施,甚至是直接相互的镜像备份,从而大大提高了RAID系统的容错度,提高了系统的稳定冗余性。
缺点
RAID0没有冗余功能,如果一个磁盘(物理)损坏,则所有的数据都无法使用。
RAID1磁盘的利用率最高只能达到50%(使用两块盘的情况下),是所有RAID级别中最低的。
RAID0+1以理解为是RAID 0和RAID 1的折中方案。RAID 0+1可以为系统提供数据安全保障,但保障程度要比 Mirror低而磁盘空间利用率要比Mirror高。
RAID级别
RAID 0: RAID 0连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率,但它没有数据冗余,因此并不能算是真正的RAID结构。RAID 0只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0不能应用于数据安全性要求高的场合。
RAID 1: 它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能。RAID 1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。
RAID 5: RAID 5不单独指定的奇偶盘,而是在所有磁盘上交叉地存取数据及奇偶校验信息。在RAID 5上,读/写指针可同时对阵列设备进行操作,提供了更高的数据流量。RAID 5更适合于小数据块和随机读写的数据。RAID 3与RAID 5相比,最主要的区别在于RAID 3每进行一次数据传输就需涉及到所有的阵列盘;而对于RAID 5来说,大部分数据传输只对一块磁盘操作,并可进行并行操作。在RAID 5中有“写损失”,即每一次写操作将产生四个实际的读/写操作,其中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。
RAID 01/10: 根据组合分为RAID 10和RAID 01,实际是将RAID 0和RAID 1标准结合的产物,在连续地以位或字节为单位分割数据并且并行读/写多个磁盘的同时,为每一块磁盘作磁盘镜像进行冗余。它的优点是同时拥有RAID 0的超凡速度和RAID 1的数据高可靠性,但是CPU占用率同样也更高,而且磁盘的利用率比较低。RAID 1+0是先镜射再分区数据,再将所有硬盘分为两组,视为是RAID 0的最低组合,然后将这两组各自视为RAID 1运作。RAID 0+1则是跟RAID 1+0的程序相反,是先分区再将数据镜射到两组硬盘。它将所有的硬盘分为两组,变成RAID 1的最低组合,而将两组硬盘各自视为RAD 0运作。性能上,RAID 0+1比RAID 1+0有着更快的读写速度。可靠性上,当RAID 1+0有一个硬盘受损,其余三个硬盘会继续运作。RAID 0+1 只要有一个硬盘受损,同组RAID 0的另一只硬盘亦会停止运作,只剩下两个硬盘运作,可靠性较低。因此,RAID 10远较RAID 01常用,零售主板绝大部份支持RAID 0/1/5/10,但不支持RAID 01
RAID 50: RAID50是RAID5与RAID0的结合。此配置在RAID5的子磁盘组的每个磁盘上进行包括奇偶信息在内的数据的剥离。每个RAID5子磁盘组要求三个硬盘。RAID50具备更高的容错能力,因为它允许某个组内有一个磁盘出现故障,而不会造成数据丢失。而且因为奇偶位分部于RAID5子磁盘组上,故重建速度有很大提高。优势:更高的容错能力,具备更快数据读取速率的潜力。需要注意的是:磁盘故障会影响吞吐量。故障后重建信息的时间比镜像配置情况下要长。(不常用的)
两道Linux运维面试题
简述raid0 raid1 raid5 三种工作模式的工作原理及特点
RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据
还有一个大功能,多块盘放在一起可以有冗余(备份)
RAID整合方式有很多,常用的:0 1 5 10
RAID 0,可以是一块盘和N个盘组合
其优点读写快,是RAID中最好的
缺点:没有冗余,一块坏了数据就全没有了
RAID 1,只能2块盘,盘的大小可以不一样,以小的为准
10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高
RAID 5 ,3块盘,容量计算10*(n-1),损失一块盘
特点,读写性能一般,读还好一点,写不好
冗余从好到坏:RAID1 RAID10 RAID 5 RAID0
性能从好到坏:RAID0 RAID10 RAID5 RAID1
成本从低到高:RAID0 RAID5 RAID1 RAID10
单台服务器:很重要盘不多,系统盘,RAID1
数据库服务器:主库:RAID10 从库 RAID5\RAID0(为了维护成本,RAID10)
WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)
有多台,监控、应用服务器,RAID0 RAID5
我们会根据数据的存储和访问的需求,去匹配对应的RAID级别
简述raid0 raid1 raid5 三种工作模式的工作原理及特点
RAID 0:带区卷,连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率
但它没有数据冗余,RAID 0 只是单纯地提高性能,并没有为数据的可靠性提供保证
而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合
RAID 1:镜像卷,它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据
不能提升写数据效率。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID1 可以提高读取性能
RAID 1 是磁盘阵列中单位成本最高的,镜像卷可用容量为总容量的1/2,但提供了很高的数据安全性和可用性
当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据
RAID5:至少由3块硬盘组成,分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上
任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据(最多允许1块硬盘损坏)
所以raid5可以实现数据冗余,确保数据的安全性,同时raid5也可以提升数据的读写性能
一、创建模式
选项:-C
专用选项:
-l #: 级别
-n #: 设备个数
-a {yes|no} 自动为其创建设备文件
-c CHUNK_SIZE: 指定数据块大小(chunk)
-x #: 指定空闲盘(热备磁盘)个数,空闲盘(热备磁盘)能在工作盘损坏后自动顶替
注意:创建阵列时,阵列所需磁盘数为-n参数和-x参数的个数相加之和
示例:创建raid0,raid1,raid5
1、创建raid0:
#创建raid0 :
~]# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2}
#格式化即创建文件系统,默认生成UUID:
~]# mkfs.ext4 /dev/md0
2、创建raid1:
#创建raid
~]# mdadm -C /dev/md1 -a yes -n 2 -l 1 /dev/sdb{5,6}
#格式化即创建文件系统,默认生成UUID:
~]# mkfs.ext4 /dev/md1
3、创建raid5:
#创建raid5
~]# mdadm -C /dev/md2 -a yes -l 5 -n 3 /dev/sdb{5,6,7}
#格式化即创建文件系统,默认生成UUID:
~]# mkfs.ext4 /dev/md2
#增加热备磁盘:
~]# mdadm /dev/md2 -a /dev/sdb8
4、查看md状态:
1 查看指定RAID设备的详细信息:
选项: -D = --detail
~]# mdadm -D /dev/md0 # 只查看raid0信息
2 查看全部的raid信息
[[email protected] ~]# cat /proc/mdstat
Personalities : [raid0] [raid1]
md0 : active raid0 sdb2[1] sdb1[0]
4206592 blocks super 1.2 512k chunks
md1 : active raid1 sdb6[1] sdb5[0]
2103447 blocks super 1.2 [2/2] [UU]
unused devices: <none>
注意:在创建raid前,应该先查看磁盘是否被识别,如果内核还识未别,创建Raid时会报错:
cat /proc/partitions 或者 lsblk
如果没有被识别,可以执行命令:
kpartx /dev/sdb或者partprobe/dev/sdb
centos6:echo ‘- - -‘ > /sys/class/scsi_host/host0/scan(只现虚拟机)
centos7:echo ‘- - -‘ > /sys/class/scsi_host/host2/scan(只现虚拟机)
二、管理模式
选项:-a(--add),-d(--del),-r(--remove),-f(--fail)
1、模拟损坏:
mdadm /dev/md1 -f /dev/sdb5
2、移除损坏的磁盘:
mdadm /dev/md1 -r /dev/sdb5
3、添加新的硬盘到已有阵列:
mdadm /dev/md1 -a /dev/sdb7
注意:
3.1、新增加的硬盘需要与原硬盘大小一致
3.2、如果原有阵列缺少工作磁盘(如raid1只有一块在工作,raid5只有2块在工作),这时新增加的磁盘直接变为工作磁盘,如果原有阵列工作正常,则新增加的磁盘为热备磁盘。
------------------以下四条命令,仅限raid1,raid5
mdadm /dev/md1 -f /dev/sdf 将md1中的sdf设置为坏的设备
mdadm /dev/md1 -r /dev/sdf 将md1中的sdf从raid成员中删除
mdadm /dev/md1 -a /dev/sdf 向md1中增加新成员sdf
mdadm -G /dev/md1 -n 3 -a /dev/sdh 将raid1 md1的成员数量改为3,并加入新的成员(不是加为热备盘)
三、软RAID管理
生成配置文件:
mdadm -D -s > /etc/mdadm.conf #将raid信息保存至文件
mdadm -A -s #激活/etc/mdadm.conf 中的所有未激活的raid设备 ,已激活不读取.
停止设备:-S = --stop
mdadm –S /dev/md0
激活设备:将上述已经停止的阵列重新装配:
mdadm -A /dev/md0 /dev/sdc /dev/sdd #激活md0 手动添加md0磁盘
mdadm –A –s /dev/md0 激活md0 读取/etc/mdadm.conf中md0磁盘信息
强制启动:
mdadm –R /dev/md0
删除某块硬盘的raid信息:
mdadm --zero-superblock /dev/sdb1
监控模式
选项:-F
mdadm -F /dev/md1 实时监控raid状态
实现自动装配:(软RAID是基于系统的,当原系统损坏了,需要重新装配RAID)
mdadm运行时会自动检查/etc/mdadm.conf 文件并尝试自动装配,因此第一次配置raid后可以将信息导入到/etc/mdadm.conf中,命令如下:
mdadm -D -s > /etc/mdadm.conf #将raid信息保存至文件
mdadm -A -s #激活/etc/mdadm.conf 中的所有未激活的raid设备 ,已激活不读取.
共享热备盘实现方式
mdadm -D -s > /etc/mdadm.conf //将raid值保存到文件中
在需要共享的多组raid信息最后分别都写上spare-group=magedu
然后再加一新行,顶头写MAILADDR [email protected] 或 MAILADDR .
/etc/init.d/mdmonitor restart //启动服务
service mdmonitor restart //启动服务
四、增长模式,用于增加磁盘,为阵列扩容:
选项:-G
示例,将上述raid5的热备磁盘增加到阵列工作磁盘中
[[email protected] ~]# mdadm -G /dev/md2 -n 4
注意:-n 4 表示使用四块工作磁盘
再次使用-D选项查看阵列详细信息如下:
[[email protected] ~]# mdadm -D /dev/md2
……此处略掉部分信息……
Number Major Minor RaidDevice State
0 8 21 0 active sync /dev/sdb5
1 8 22 1 active sync /dev/sdb6
3 8 23 2 active sync /dev/sdb7
4 8 24 3 active sync /dev/sdb8
五、.mdadm中文man(引用)
基本语法 : mdadm [mode] [options]
[mode] 有7种:
Assemble:将以前定义的某个阵列加入当前在用阵列。
Build:Build a legacy array ,每个device 没有 superblocks
Create:创建一个新的阵列,每个device 具有 superblocks
Manage: 管理阵列,比如 add 或 remove
Misc:允许单独对阵列中的某个 device 做操作,比如抹去superblocks 或 终止在用的阵列。
Follow or Monitor:监控 raid 1,4,5,6 和 multipath 的状态
Grow:改变raid 容量或 阵列中的 device 数目
可用的 [options]:
-A, --assemble:加入一个以前定义的阵列
-B, --build:Build a legacy array without superblocks.
-C, --create:创建一个新的阵列
-Q, --query:查看一个device,判断它为一个 md device 或是 一个 md 阵列的一部分
-D, --detail:打印一个或多个 md device 的详细信息
-E, --examine:打印 device 上的 md superblock 的内容
-F, --follow, --monitor:选择 Monitor 模式
-G, --grow:改变在用阵列的大小或形态
-h, --help:帮助信息,用在以上选项后,则显示该选项信息
--help-options
-V, --version
-v, --verbose:显示细节
-b, --brief:较少的细节。用于 --detail 和 --examine 选项
-f, --force
-c, --config= :指定配置文件,缺省为 /etc/mdadm/mdadm.conf
-s, --scan:扫描配置文件或 /proc/mdstat以搜寻丢失的信息。配置文件/etc/mdadm/mdadm.conf
create 或 build 使用的选项:
-c, --chunk=:Specify chunk size of kibibytes. 缺省为 64.
--rounding=: Specify rounding factor for linear array (==chunk size)
-l, --level=:设定 raid level.
--create可用:linear, raid0, 0, stripe, raid1,1, mirror, raid4, 4, raid5, 5, raid6, 6, multipath, mp.
--build可用:linear, raid0, 0, stripe.
-p, --parity=:设定 raid5 的奇偶校验规则:eft-asymmetric, left-symmetric, right-asymmetric, right-symmetric, la, ra, ls, rs.缺省为left-symmetric
--layout=:类似于--parity
-n, --raid-devices=:指定阵列中可用 device 数目,这个数目只能由 --grow 修改
-x, --spare-devices=:指定初始阵列的富余device 数目
-z, --size=:组建RAID1/4/5/6后从每个device获取的空间总数
--assume-clean:目前仅用于 --build 选项
-R, --run:阵列中的某一部分出现在其他阵列或文件系统中时,mdadm会确认该阵列。此选项将不作确认。
-f, --force:通常mdadm不允许只用一个device 创建阵列,而且创建raid5时会使用一个device作为missing drive。此选项正相反。
-a, --auto{=no,yes,md,mdp,part,p}{NN}:
示例:
1:创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录
~]# lsblk #查看磁盘是否被系统识别
sdd 8:48 0 1G 0 disk
sde 8:64 0 1G 0 disk
sdf 8:80 0 1G 0 disk
如果没有被识别,可以执行命令:
entos6:echo ‘- - -‘ > /sys/class/scsi_host/host0/scan(只现虚拟机)
centos7:echo ‘- - -‘ > /sys/class/scsi_host/host2/scan(只现虚拟机)
~]# mdadm -C /dev/md1 -a yes -n 2 -l 1 -x 1 /dev/sd{e,d,f}
~]# lsblk #查看raid1是否创建成功
sdd 8:48 0 1G 0 disk
└─md1 9:127 0 1023M 0 raid1
sde 8:64 0 1G 0 disk
└─md1 9:127 0 1023M 0 raid1
sdf 8:80 0 1G 0 disk
└─md1 9:127 0 1023M 0 raid1
~]# mdadm -D /dev/md1 查看raid信息
/dev/md127:
Version : 1.2
Creation Time : Thu Feb 22 11:43:34 2018
Raid Level : raid1
Array Size : 1047552 (1023.00 MiB 1072.69 MB)
Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Fri Feb 23 14:26:59 2018
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Name : centos6.magedu.com:1 (local to host centos6.magedu.com)
UUID : a7ee7358:0f88ee49:f5359499:7a25cd1a
Events : 22
Number Major Minor RaidDevice State
0 8 64 0 active sync /dev/sde
1 8 48 1 active sync /dev/sdd
2 8 80 - spare /dev/sdf
~]# mkfs.ext4 /dev/md1 #格式化 即 创建文件系统 默认生成UUID
~]# blkid /dev/md1 #查看指定raid的文件系统 文件格式,UUID 等信息
/dev/md1: UUID="d6e45441-b68f-4e45-9a18-425887956d87" TYPE="ext4"
~]# vim /etc/fstab #开机自动挂载硬盘的系统文件
UUID=d6e45441-b68f-4e45-9a18-425887956d87 /backup ext4 defaults 0 0
#UUID=ea2ad152-45bb-41cf-904c-e5db0b372df7 //UUID /backup //挂载目录 exit4//文件系统 defaults 系统的选项 0 0 //开机是否检测一般为零 //下次开机raid名可能会改变,不重要,UUID生效
2:创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录
~]# lsblk
sdg 8:96 0 1G 0 disk
sdh 8:112 0 1G 0 disk
sdp 8:240 0 1G 0 disk
~]# mdadm -C /dev/md5 -a yes -n 3 -l 5 -c 256K /dev/sd{g,h,p}
#-C //创建 /dev/md5//raid文件名 -a yes // -n 3 //三块 -l 5 //raid5 -c 256 //chunk大小为256K
~]# lsblk 查看系统识别硬盘
~]# mdadm -D /dev/md5 查看raid信息
~]# mkfs.ext4 /dev/md5 //格式化/创建文件系统ext4
~]# blkid //查看uuid /文件系统格式
~]# vim /etc/fstab //开机自动挂载硬盘的系统文件
UUID="b4c94f87-8648-4835-8e86-24e7daf58c4d /mydata ext4 defaults 0 0
mount -a //从新去读/etc/fstab文件内容,挂载未挂载磁盘,以挂载不会从新读取,
3:创建一个raid50,由7块盘组成,其中一块为热备盘,最终容量为6G大小,chunk大小为1M,要求热备盘共享,创建为ext4文件系统,开机自动挂载到/magedata目录下。
创建第一个raid5
~]# lsblk
sdi 8:128 0 1.5G 0 disk
sdj 8:144 0 1.5G 0 disk
sdk 8:160 0 1.5G 0 disk
~]# mdadm -C /dev/md0 -n 3 -a yes -l 5 -c 1M /dev/sd{i,j,k}
~]# mkfs.ext4 /dev/md0
创建第二个raid5
~]# lsblk
sdl 8:176 0 1.5G 0 disk
sdm 8:192 0 1.5G 0 disk
sdn 8:208 0 1.5G 0 disk
sdo 8:224 0 1.5G 0 disk
~]# mdadm -C /dev/md1 -n 3 -a yes -l 5 -c 1M -x 1 /dev/sd{l,m,n,o}
~]# mkfs.ext4 /dev/md0
创建raid0
~]# mdadm -C /dev/md3 -a yes -n 2 -l 0 -c 1M /dev/md1 /dev/md0
查看:lsblk / blkid / mdadm -D /dev/md3
~]# mkfs.ext4 /dev/md3
~]# blkid
~]# vim /etc/fstab
UUID=8a93b1f7-fb18-4439-8548-2a2ec0e4c428 /magedata ext4 defaults 0 0
删除raid0
~]# mdadm -S /dev/md1 停止raid设备
mdadm: stopped /dev/md1
~]# mdadm --zero-superblock /dev/sdd删除某块硬盘的raid信息
~]# hexdump -C -n 1024 /dev/sdd 查看硬盘文件二进制信息
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000400
以上是关于RAID管理及命令mdadm详解的主要内容,如果未能解决你的问题,请参考以下文章