<h1 align = "center">RAID简述和Linux软RAID配置</h1>
PS:仅为课程练习,原理和配置可能有误,仅供参考,谢谢;
1.RAID功能简述
RAID,全称(Redundant Arrays of Inexpensive Disk或Redundant Arrays of Independent Disk),现在一般多用于后面那个称呼,独立磁盘冗余阵列。RAID的基础概念大致是将多个硬盘组合起来,成为一个硬盘阵列。该阵列给用户的感知,跟之前单独一个硬盘或逻辑分区一样,但是却能大大提高磁盘的冗余性及读写IO速度;
由于现在IT行业的快速发展,人们的工作和生活越来越离不开IT互联网,与之对应产生的是海量的数据;家庭个人如何音频、视频,企业方面如何多年累积的业务数据等;特别是一些大中型的互联网公司,他们经过过年发展积累了海量的数据,如果使用传统的独立硬盘进行数据存储,不仅价格昂贵,而且其冗余性和读写速度都不能达到企业级应用的需求;而RAID根据其组合模式的不同,可以提供不同的冗余和数据处理速度加快等功能,给企业及个人提供了多样化的选择;
2.RAID的实现方式
RAID的实现方式大致分为三种:
- 软件RAID,通过系统软件的方式实现RAID,这种方式没有硬件可靠,企业级应用不推荐使用
- 内接式硬件RAID:主板集成RAID控制器,一般是家庭电脑上主板集成的RAID控制卡,用于个人或家庭使用,负载能力一般,不推荐用于企业环境;
- 外接式磁盘阵列控制卡:这是一块独立的板卡,由专业的生成厂商生产;将其插在主板的PCI接口;价格虽然较为昂贵,但是可靠性却大大提升,一般用于企业环境;
硬件RAID需要通过磁盘阵列控制卡的控制实现,RAID(磁盘阵列)控制卡可以看作是一个智能的设备,它拥有自己独立的CPU和内存,通过集成或借用主板上的SCSI控制器来管理硬盘;RAID控制卡的CPU还有缓存,这使得它在存取速度方面更快,但是断电后有一定风险丢失数据,所以建议在采购RAID控制卡优先考虑有备用电源的产品型号;
3.RAID的分类
RAID经过多年的发展,已经有好几种不同的档次,如RAID-0,RAID-1,RAID-1E,RAID-5,RAID-6。还有混合RAID如何:RAID-7,RAID-10,RAID-50,RAID-60。每种档次有相应的优缺点,不同的档次在两个目标间获取平衡,分别是增加数据可靠性及磁盘IO读写性能;在创建RAID的时候,建议选择容量相同的磁盘,因为RAID默认会取每个磁盘中最低容量的磁盘为标准进行RAID创建;用户可以根据自己的实际需求,选择相应的RAID模式,下面我们来介绍几种常用RAID之间的特点:
- RAID0:RAI0,又称为条带卷;由两个或两个以上的磁盘组成,写入数据时将数据分割块块(chunk)分别存入到每个磁盘,因为读写都可以并行处理,所以IO速度是RAID中最快的,但是无容错能力,一旦其中一块磁盘数据损坏,所有磁带的数据将会丢失;它的可用空间为N*min(S1,S2,…)。
- RAID1:RAID1,又称为镜像卷;由两个或两个以上的磁盘组成,如果是两个磁盘组成RAID1,其中一个作为主盘,另一个作为镜像盘;数据存入时,在拷贝到主盘的同时,拷贝相应的副本到镜像盘,这样当有一个磁盘故障时,由于另一个磁盘数据一模一样,所以不会影响到数据的正常性;RAID1是各种RAID中容错力最好的,但是相应的其写入性能因为要拷贝副本到另外的磁盘可能会导致略有下降,读取数据时能从多个磁盘进行取数,所以读取速度会相应提高,磁盘的使用率却很低,只有组成RAID的磁盘容量的一半;它的可用空间为:1*min(S1,S2,……)。
- RAID5:RAID是RAID0和RAID1的折中方案,它拥有比RAID0更好的容错力和比RADID更好的读写速度和空间利用率;
RAID5最少需要三块硬盘组成,有容错能力,RAID5不是对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上,当其中一个磁盘损坏时,可通过其它磁盘的数据和奇偶信息去恢复损坏的数据;RAID5可以理解成是在RAID0的基础上加了奇偶检验功能,所以写入速度比单独写入一块硬盘的速度略慢;要注意的是,数据块(chunks)和校验位必须要按顺序即默认为左对称的方式排放。它的可用空间为:(N-1)*min(S1,S2,……)。
-RAID10:RA10最少由4块硬盘组成,它的基本原理是,先4块硬盘两两先做成2个RAID1,然后这两个RAID1阵列再继续做出RAID0模式;读写性能有提升,有容错能力,前提是不要一组镜像盘同时故障,如果两组镜像盘各坏一个,不会损坏数据;可用空间为:N*min(S1,S2,……)/2。
4.Linux上的软RAID创建
准备:在linux系统上进行RAID创建时,得先用fdisk或其它分区命令分好相应的分区,并设置成RAID模式(rd);并用partx等其他命令重新扫描系统分区;
4.1 mdadm:这是一个模式化命令,该命令可用于RAID的创建,修改,删除等功能,支持的RAID级别:LINEAR,RAID0,RAID1,RAID4,RAID5,RAID6,RAID10;
命令格式:mdadm [mode] <raiddevice> [option] <compoent-device>
-C:创建模式
-n #:使用#个块设备来创建此RAID;
-l #:指明要创建的RAID的级别;
-a {yes|no}:自动创建目标RAID设备的设备文件;
-c CHUNK_SIZE:指明块大小;
-x #:指明空闲盘的个数;
-D:显示RAID详细信息
mdadm -D /dev/md#
管理模式:
-f:标记指定磁盘为损坏;
-a:添加磁盘
-r:移除磁盘
-n#:使用#个块设备来创建此RAID;
4.2 RAID5创建实例
4.2.1 使用mdadm命令,创建一个RAID5这列,要求有一块空闲盘,块(chunk)大小为1024KB;
[[email protected] ~]# mdadm /dev/md0 -C -n 3 -x 1 -a yes -c 1024 -l 5 /dev/sdb{8,9,10,11}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
4.2.2 查看RAID创建进度
[[email protected] ~]# cat /proc/mdstat
Personalities : [raid0] [raid6] [raid5] [raid4]
md0 : active raid5 sdb10[4] sdb11[3](S) sdb9[1] sdb8[0]
20963328 blocks super 1.2 level 5, 1024k chunk, algorithm 2 [3/2] [UU_]
[=====>...............] recovery = 25.3% (2654452/10481664) finish=10.6min speed=12210K/sec
unused devices: <none>
4.2.3 查看RAID详细信息,下面状态显示RAID正在建设中,建好后状态为clean;
[[email protected] ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Aug 28 22:47:07 2015
Raid Level : raid5 #RAID类型
Array Size : 20963328 (19.99 GiB 21.47 GB) #可用空间
Used Dev Size : 10481664 (10.00 GiB 10.73 GB) #已经使用空间,这是RAID的特性,默认会有(N分之1)的磁盘空间用于存放奇偶校验数据
Raid Devices : 3 #正在使用的磁盘数量
Total Devices : 4 #全部磁盘数量,包括热备盘(空闲盘)
Persistence : Superblock is persistent
Update Time : Fri Aug 28 22:52:34 2015
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 0
Spare Devices : 2
Layout : left-symmetric
Chunk Size : 1024K
Rebuild Status : 37% complete #阵列创建进度
Name : localhost:0 (local to host localhost)
UUID : 7c8befd9:3e9304b6:574c2ee8:5cba5476
Events : 7 #下面信息是RAID里面每个磁盘的详细信息
Number Major Minor RaidDevice State
0 8 24 0 active sync /dev/sdb8
1 8 25 1 active sync /dev/sdb9
4 8 26 2 spare rebuilding /dev/sdb10
3 8 27 - spare /dev/sdb11
4.2.5 将RAID中的/dev/sdb10人工设置为故障,查看/dev/sdb11空闲盘,是否会顶替上来并同步修复RAID;
[[email protected] ~]# mdadm /dev/md0 -f /dev/sdb10
mdadm: set /dev/sdb10 faulty in /dev/md0
[[email protected] ~]#
[[email protected] ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Aug 28 22:47:07 2015
Raid Level : raid5
Array Size : 20963328 (19.99 GiB 21.47 GB)
Used Dev Size : 10481664 (10.00 GiB 10.73 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Fri Aug 28 23:03:32 2015
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 1024K
Rebuild Status : 2% complete
Name : localhost:0 (local to host localhost)
UUID : 7c8befd9:3e9304b6:574c2ee8:5cba5476
Events : 20
Number Major Minor RaidDevice State
0 8 24 0 active sync /dev/sdb8
1 8 25 1 active sync /dev/sdb9
3 8 27 2 spare rebuilding /dev/sdb11 #空闲盘已经顶替故障盘
4 8 26 - faulty /dev/sdb10 #人工设置改磁盘为故障盘成功
[[email protected] ~]#
4.2.6 将故障磁盘从RAID5中移除
[[email protected] ~]# mdadm /dev/md0 -r /dev/sdb10
mdadm: hot removed /dev/sdb10 from /dev/md0
[[email protected] ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Aug 28 22:47:07 2015
Raid Level : raid5
Array Size : 20963328 (19.99 GiB 21.47 GB)
Used Dev Size : 10481664 (10.00 GiB 10.73 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Fri Aug 28 23:10:43 2015
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 1024K
Rebuild Status : 49% complete
Name : localhost:0 (local to host localhost)
UUID : 7c8befd9:3e9304b6:574c2ee8:5cba5476
Events : 28 #sdb10已从RAID中移除
Number Major Minor RaidDevice State
0 8 24 0 active sync /dev/sdb8
1 8 25 1 active sync /dev/sdb9
3 8 27 2 spare rebuilding /dev/sdb11
4.2.7 使用watch命令以1秒为频率,刷新查看RAID建设进度;
[[email protected] ~]# watch -n1 ‘cat /proc/mdstat‘ # -n:该参数可设置刷新频率,我这里是每一秒刷新一次
Every 1.0s: cat /proc/mdstat Fri Aug 28 23:13:43 2015
Personalities : [raid0] [raid6] [raid5] [raid4]
md0 : active raid5 sdb11[3] sdb9[1] sdb8[0]
20963328 blocks super 1.2 level 5, 1024k chunk, algorithm 2 [3/2] [UU_]
[=============>.......] recovery = 69.8% (7325076/10481664) finish=4.2min speed=12276K/sec
unused devices: <none>
Every 1.0s: cat /proc/mdstat Fri Aug 28 23:13:54 2015
Personalities : [raid0] [raid6] [raid5] [raid4]
md0 : active raid5 sdb11[3] sdb9[1] sdb8[0]
20963328 blocks super 1.2 level 5, 1024k chunk, algorithm 2 [3/2] [UU_]
[==============>......] recovery = 71.1% (7457696/10481664) finish=4.1min speed=12246K/sec
unused devices: <none>
Every 1.0s: cat /proc/mdstat Fri Aug 28 23:14:02 2015
Personalities : [raid0] [raid6] [raid5] [raid4]
md0 : active raid5 sdb11[3] sdb9[1] sdb8[0]
20963328 blocks super 1.2 level 5, 1024k chunk, algorithm 2 [3/2] [UU_]
[==============>......] recovery = 71.9% (7540228/10481664) finish=4.0min speed=12071K/sec
unused devices: <none>
4.2.8 将创建后的RAID5阵列格式化为ext4文件系统,标签为backup,并将其开机挂载至/backup目录;
[[email protected] ~]# mke2fs -t ext4 -L ‘backup‘ /dev/md0 #格式为ext4,并设置标签为backup
mke2fs 1.41.12 (17-May-2010)
文件系统标签=backup
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=256 blocks, Stripe width=512 blocks
1310720 inodes, 5240832 blocks
262041 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=0
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[[email protected] ~]# blkid /dev/md0
/dev/md0: LABEL="backup" UUID="659e5e0a-2c9f-4594-ab0d-79f2fa4bc21a" TYPE="ext4"
[[email protected] ~]# mkdir /backup
[[email protected] ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Jun 6 17:46:53 2015
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=d9a42d69-b340-4919-a77c-f1558e13df64 / ext4 defaults 1 1
UUID=a8e05a48-5d7c-46ad-bcd8-f7f4e1f7d108 /boot ext4 defaults 1 2
UUID=6951543d-8f16-421e-a71d-f309de85ebeb /home ext4 defaults 1 2
UUID=02a750c9-4a3c-4579-a2f0-4c4ce05806bc /myshare ext4 defaults 1 2
UUID=6835964f-44e4-4cdb-9a06-678484a11eeb swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
UUID=659e5e0a-2c9f-4594-ab0d-79f2fa4bc21a /backup ext4 defaults 0 0
~
~
:wq
[[email protected] /]# mount -a
[[email protected] /]# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.5G 4.2G 4.9G 46% /
tmpfs 250M 72K 250M 1% /dev/shm
/dev/sda1 93M 26M 63M 29% /boot
/dev/sda3 3.8G 8.6M 3.6G 1% /home
/dev/sr0 3.8G 3.8G 0 100% /media/cdrom
/dev/md0 20G 44M 19G 1% /backup #已经挂载上
4.2.9 删除RAID
[[email protected] /]# umount /dev/md0 #1、首先取消挂载
[[email protected] /]# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.5G 4.2G 4.9G 46% /
tmpfs 250M 72K 250M 1% /dev/shm
/dev/sda1 93M 26M 63M 29% /boot
/dev/sda3 3.8G 8.6M 3.6G 1% /home
/dev/sr0 3.8G 3.8G 0 100% /media/cdrom
[[email protected] /]# mdadm -S /dev/md0 #2、停止RAID,可以发现已经没有md0了
mdadm: stopped /dev/md0
[[email protected] /]# mdadm -D /dev/md0
mdadm: cannot open /dev/md0: No such file or directory
[[email protected] /]# cat /proc/mdstat
Personalities : [raid0] [raid6] [raid5] [raid4]
unused devices: <none>
[[email protected] /]# ls /dev | grep md
md
原文地址:http://blog.51cto.com/zhongle21/2087335