红联Linux门户
Linux帮助

Linux如何实现软RAID 0,软RAID 1,软RAID 10

发布时间:2014-12-17 10:28:48来源:linux网站作者:myredhatlinuxunix

RAID的实现:

RAID:廉价冗余磁盘阵列,是将几块硬盘变成一个整体使用

后来因为它失去了原有的廉价目的,变得很昂贵,就更名为

独立冗余磁盘阵列

虽然我们无法实现硬件上得RAID因为实力有限,没有买那些设备,但是我们还是能实现RAID的

下面我们就来看一下如何实现软RAID:

第一:软RAID 0的实现:

首先介绍一下RAID 0 的原理,RAID 0是将一股数据流分成两份分别存在两个盘上,以实现提高一倍性能的

现象,不仅如此,它还提供了很大的吞吐量,下面我们就实现一下软RAID 0

第一首先要创建两个分区【当然大于两个也是可以实现raid 0的】,在创建一个大小为2G的RAID时需要

两个大小各为1G的分区,分区创建完之后记得让内核重读一下分区表,

partprobe /dev/sda 
 
[root@server56 raid10]# fdisk /dev/sda 
Command (m for help): n 
First cylinder (7011-15665, default 7011):
Using default value 7011 
Last cylinder or +size or +sizeM or +sizeK (7011-15665, default 15665): +1G 
 
Command (m for help): t 
Partition number (1-6): 5 
Hex code (type L to list codes): fd 
Changed system type of partition 5 to fd (Linux raid autodetect) 
 
Command (m for help): t 
Partition number (1-6): 6 
Hex code (type L to list codes): fd 
Changed system type of partition 6 to fd (Linux raid autodetect) 

Device Boot  Start End  Blocks   Id  System 
/dev/sda1   *   1  13  104391   83  Linux 
/dev/sda2  14523541945715   8e  Linux LVM 
/dev/sda352365300  522112+  82  Linux swap / Solaris 
/dev/sda45301   1566583256862+   5  Extended 
/dev/sda553015423  987966   fd  Linux raid autodetect 
/dev/sda654245546  987966   fd  Linux raid autodetect 

Linux raid autodetect是建立软RAID 是需要的系统类型一定记得在分区的时候给需要划分的那两个分区指定成这样的类型,以下是所有可以为其指定的系统类型与系统类型的编号,在指定系统类型的时候只需要输入前面的编号即可

0  Empty   1e  Hidden W95 FAT1 80  Old Minix   bf  Solaris 
1  FAT12   24  NEC DOS 81  Minix / old Lin c1  DRDOS/sec (FAT- 
2  XENIX root  39  Plan 9  82  Linux swap / So c4  DRDOS/sec (FAT- 
3  XENIX usr   3c  PartitionMagic  83  Linux   c6  DRDOS/sec (FAT- 
4  FAT16 <32M  40  Venix 80286 84  OS/2 hidden C:  c7  Syrinx  
5  Extended41  PPC PReP Boot   85  Linux extended  da  Non-FS data 
6  FAT16   42  SFS 86  NTFS volume set db  CP/M / CTOS / . 
7  HPFS/NTFS   4d  QNX4.x  87  NTFS volume set de  Dell Utility
8  AIX 4e  QNX4.x 2nd part 88  Linux plaintext df  BootIt  
9  AIX bootable4f  QNX4.x 3rd part 8e  Linux LVM   e1  DOS access  
a  OS/2 Boot Manag 50  OnTrack DM  93  Amoeba  e3  DOS R/O 
b  W95 FAT32   51  OnTrack DM6 Aux 94  Amoeba BBT  e4  SpeedStor
c  W95 FAT32 (LBA) 52  CP/M9f  BSD/OS  eb  BeOS fs 
e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi ee  EFI GPT 
f  W95 Ext'd (LBA) 54  OnTrackDM6  a5  FreeBSD ef  EFI (FAT-12/16/ 
10  OPUS55  EZ-Drivea6  OpenBSD f0  Linux/PA-RISC b 
11  Hidden FAT1256  Golden Bow  a7  NeXTSTEPf1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk a8  Darwin UFS  f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor   a9  NetBSD  f2  DOS secondary
16  Hidden FAT1663  GNU HURD or Sys ab  Darwin boot fb  VMware VMFS 
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs fc  VMware VMKCORE  
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap   fd  Linux raid auto 
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep 
1c  Hidden W95 FAT3 75  PC/IX   be  Solaris bootff  BBT

分区创建完之后记得输入w   保存退出,若以q退出则以上分区均没有了

分区创建完之后记得格式化,为其创建文件系统ext2或ext3,无论你指定怎样的文件系统类型,但是两个分区的文件系统类型必须一样,这样才能保持一致与同步工作

mkfs.ext2 /dev/sda5 
mkfs.ext2 /dev/sda6

格式化完成之后就可以进行下一步了,建立软RAID 0

 mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sda5 /dev/sda6 

【此命令的意思是创建/dev/md0,如果没有就直接创建/dev/md0,RAID等级为0,由/dev/sda5和/dev/sd6组成】

创建完之后对整个格式化,因为此时这两个分区已经在逻辑上属于一个硬盘了,

mke2fs /dev/md0 

此时你可以看一下/proc/mdstat

md0 : active raid0 sda6[1] sda5[0] 
1975680 blocks 64k chunks 

这里的chunks 是磁盘读写的最小数据单位,单位是k,默认是64k
还有默认的数据块儿大小是4096k,所以,每次内核都需要计算读了多少个chunk
但是使用命令

mk2tfs -b 2048 -E stride=32 /dev/md0 

可以直接把需要读多少个chunk告诉内核,这样可以大大的节省CPU的空间,-b是制定一个数据块儿的大小

接下来需要给RAID 0指定一个挂在点挂上就可以了

mkdir /mnt/raid0 
mount /dev/nd0 /mnt/raid0 

就可以挂载使用了,使用fdisk -l 可以查看

mdadm -D /dev/md0可以查看详细信息

此时,应该将RAID 0的配置信息保存,以备出现故障,下次可以恢复,

mdadm -D --scan /dev/md0 >> /etc/mdadm.conf 

下次可以直接使用

mdadm -A --scan直接挂载 

如何卸载RAID 0
应该先将RAID 0 的挂载点卸载,即

umount /mnt/raid0 

然后使用命令

mdadm -S /dev/md0  

将其停止
此时再用 fdisk -l 就看不见了  就完成了完整的卸载
下次再使用时  直接

mdadm -A --scan 

内核会自动读取/etc/mdadm.conf实现挂载全部的软RAID

如果出现意外,RAID 0的一块儿盘坏了,那么将会丢失全部的数据,于是就出现了RAID 1

先介绍一下RAID 1的原理,RAID 1是将数据流同时存到两个盘上,就像镜子一样,两个盘上都有完整的数据,即便其中之一不幸挂了,那么照样还是有完整的数据的,但是,两个盘上存有相同的数据那么其中一块儿盘的空间就浪费了,但是它还是提供了强大的读取能力,虽然写入的速度会和原来一样活着不如以前,但是还是有强大的吞吐量

那么要创建一个大小为2G的RAID 1 那么久需要两个大小同为2G的盘,也就是两个同为2G大小的分区来实现软RAID 1

首先还是需要两个大小为2G的分区,系统类型还是

Linux raid autodetect

重读分区

partprobe /dev/sda 

分完区后格式化

mkfs.ext3 /dev/sda7  
mkfs.ext3 /dev/sda8 

然后就可以创建软RAID 1了

mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sda7 /dev/sda8 

此时再将这个整体格式化
mkfs.ext3注意格式化是要保持一致
创建挂载点

mkdir /mnt/raid1 

挂载RAID1

mount /dev/md1 /mnt/raid1 

此时就可以使用了
可以cd /mnt/raid1检测 ls -l  会看到

drwx------ 2 root root 16384 07-30 17:00 lost+found 

fdisk -l  也可以看到

此时记得保存其相关信息

 mdadm -D --scan /dev/md1 >> /etc/mdadm.conf 

卸载的步骤与卸载RAID 0 一样,
下次使用只需要

mdadm -A --scan 即可挂载全部的RAID设备

如果出现意外RAID虽然也可以正常工作,但是它是工作在跛脚的状态下的,此时很容易造成另一块盘的损坏,那么就需要给它添加一个备用的盘,软raid也一样,需要一个备用的分区去做储备
那么再分一个与前两个相同的分区,系统类型依然是fd
分区完成后重读分区表,然后格式化成与RAID 1相同的文件系统然后
我们就模拟一个分区坏了,用命令

mdadm --fail /dev/md1 /dev/sda7 ,模拟md1下sda7坏掉了 

此时就需要刚才那个分区来用了,
先将好的盘安装好之后再一处坏的盘,避免次生危害

mdadm --add /dev/md1 /dev/sda9【安装完成之后它会自动与另一块盘同步】 

移除坏的盘:

mdadm --remove /dev/md1 /dev/sda7 

由于RAID 0与RAID 1都有不足之处,所有都存在一定的风险,所以将两种方法组合起来将会减小一定的风险,并能提供很优越的读写性能,与强大的吞吐量,实现的方法就是用RAID 0做中间层提高读写的能力,用RAID 1做底层提供容错的能力,这样就降低了丢失全部数据的风险

实现软RAID 10是要保证RAID 0 与RAID 1没有挂载就是出去卸载状态的

mdadm -C /dev/md10 -a yes -l 10 -n 2 /dev/md0 /dev/md1 

这样既可实现软RAID 10了
此时不需要格式化了
直接挂载就可以了
先建立挂载点

mkdir /mnt/raid10 

挂载

mount/dev/md10 /mnt/raid10 

即实现了软RAID 10
此时应先保存配置信息至

mdadm -D /dev/md10 >> /etc/mdadm.conf 

卸载的方法与前两种一样
重新装载也于前面相同

mdadm -A --scan既可 

如此就实现以上三种软RAID
RAID是面试时的人们话题,所以需要熟记!
下面就尝试一下实现RAID 5吧
方法基本类似。