用mdadm构建软RAID基础篇.docx
《用mdadm构建软RAID基础篇.docx》由会员分享,可在线阅读,更多相关《用mdadm构建软RAID基础篇.docx(10页珍藏版)》请在冰豆网上搜索。
用mdadm构建软RAID基础篇
用mdadm构建软RAID(基础篇)
基于网上的一些资料,整理了一下,其中不妥之处欢迎指正,在此希望能抛砖引玉:
1.RAID简介
RAID是英文RedundantArrayofInexpensiveDisks的缩写,中文名字为磁盘冗余阵列,顾名思义它是由磁盘组成阵列而成的。
简单地说,RAID就是一种把多块独立的硬盘(物理硬盘)按不同方式组合起来的一个硬盘组(逻辑硬盘),提供比单个硬盘更高的存储性能和数据冗余的技术,既保证了存取数据的快捷方便和管理客户端的简捷,也解决了存储海量数据的问题,同时提供了容错性(FaultTolerant)。
它可以在不须停机的情况下自动检测故障硬盘、进行硬盘替换,还可以扩充硬盘容量、重建故障硬盘上的数据。
目前最流行的是RAID0,RAID1,RAID5。
其中RAID1和RAID5过多的用于保证数据的安全,最大程度的防止磁盘意外坏掉而丢失数据情况的发生。
RAID0:
是最早的RAID。
Level0即RAID0级,通常称为带区,是利用带区数据映射技巧的特定性能。
也就是说,当数据写入磁盘组的时候,被分成带区,交错写入磁盘组的磁盘中。
这带来了高I/O性能,低开销,但不提供任何冗余。
磁盘组的存储量等于总的各磁盘容量之和。
特征:
并行读写数据,性能高,但没有数据冗余,阵列中任何一个硬盘坏掉,意味着所有数据丢失
容量:
所有硬盘容量之和
条件:
至少两块硬盘,做为RAID的分区大小必须是几乎相同的.
RAID1:
Level1即RAID1级,它就是常常提到的镜像RAID,相比其它各级别RAID来说,这个级别使用的时间较长。
RAID1通过把同样的数据写到磁盘组的每一个磁盘上,将"镜像"复制到每个磁盘上,来提供数据冗余。
镜像由于它的简单实现和数据的高可信度而一直很受欢迎。
1级在读数据操作时,并行处理2个或更多的磁盘,因此数据传输速率高,但是其它的操作时无法提供高速的I/O传输速率。
1级提供了非常好的数据的高可信度,并且改善了读数据操作的性能,但是耗费很大。
要求组成磁盘组的各磁盘规格相同,而组成后磁盘组的容量仅仅等于一块磁盘的容量。
特征:
数据冗余,可靠性强。
任何一块硬盘坏掉,不会丢失数据。
写入慢,读取快。
容量:
所有硬盘容量之和/2。
(冗余度50%)
条件:
至少两块硬盘,做为RAID的分区大小必须是几乎相同的.
RAID5:
服务器最常用的RAID级别,该级别的RAID是通过把奇偶校验分布到磁盘组中的一些或所有磁盘上,5级常使用缓冲技术来降低性能的不对称性。
如果组成磁盘组的各磁盘规格相同,磁盘组容量等于磁盘的总容量,减去一块磁盘的容量。
如果出现两个以上硬盘出现问题时,数据是不能得到有效的保护的。
也就是说RAID5只能在其中一块硬盘出问题时保证数据完好。
特征:
采用奇偶效验,可靠性强。
只有当两块硬盘坏掉时才会丢失数据。
并行读写数据,性能也很高。
容量:
所有硬盘容量-1个硬盘容量
条件:
至少三块硬盘,做为RAID的分区大小必须是几乎相同的。
RAID0+1:
RAID0和RAID1的组合
特征:
数据冗余,可靠性强。
任何一块硬盘坏掉,不会丢失数据。
写入慢,读取快。
容量:
所有硬盘容量之和/2。
(冗余度50%)
条件:
至少四块硬盘,做为RAID的分区大小必须是几乎相同的.
在网上找了一个fash,在附件中,做的比较直观形象,大家可以look一下:
)
2.首要条件:
2.1编译mdadm:
mdadm是linux下用于管理软件RAID的工具,可以到这里http:
//www.cse.unsw.edu.au/~neilb/source/mdadm/下载最新的mdadm源码包;值得一提的是,它是基于分区级的,而非是硬盘级的;也就是说如果要建RAID1,你只需两个容量相等的分区就可以了,而不一定是两个容量相等的硬盘,同样这两个分区可以存在于同一硬盘上,不过这样做的意义不大,但用于练练手,还是可以的:
)
#tarxvzfmdadm-2.4.tgz
#cdmdadm-2.4
#make
#makeinstall(orcp-Rmdadm/usr/sbin)
2.2编译kernel:
在编译kernel时,选中对RAID的支持,可以编译成模块或直接编进kernel:
#cdkernel-source-dir
#makemenuconfig
DeviceDrivers--->
Multi-devicesupport(RAIDandLVM) --->
[*]Multipledevicesdriversupport(RAIDandLVM)
<*> RAIDsupport
Linear(append)mode
RAID-0(striping)mode
RAID-1(mirroring)mode
RAID-10(mirroredstriping)mode(EXPERIMENTAL)
RAID-4/RAID-5mode
RAID-6mode
MultipathI/Osupport
#make
#makemodules_install
#makeinstall
3.mdadm用法
基本语法:
mdadm[mode][options]
mode 有7种:
Assemble:
将以前定义的某个阵列加入当前在用阵列。
Build:
Buildalegacyarray,每个device没有superblocks
Create:
创建一个新的阵列,每个device具有superblocks
Manage:
管理阵列,比如add或remove
Misc:
允许单独对阵列中的某个device做操作,比如抹去superblocks或终止在用的阵列。
FolloworMonitor:
监控raid1,4,5,6和multipath的状态
Grow:
改变raid容量或阵列中的device数目
可用的[options]:
-A,--assemble:
加入一个以前定义的阵列
-B,--build:
Buildalegacyarraywithoutsuperblocks.
-C,--create:
创建一个新的阵列
-Q,--query:
查看一个device,判断它为一个mddevice或是一个md阵列的一部分
-D,--detail:
打印一个或多个mddevice的详细信息
-E,--examine:
打印device上的mdsuperblock的内容
-F,--follow,--monitor:
选择Monitor模式
-G,--grow:
改变在用阵列的大小或形态
-h,--help:
帮助信息,用在以上选项后,则显示该选项信息
--help-options
-V,--version
-v,--verbose:
显示细节
-b,--brief:
较少的细节。
用于--detail和--examine选项
-f,--force
-c,--config=:
指定配置文件,缺省为/etc/mdadm.conf
-s,--scan:
扫描配置文件或/proc/mdstat以搜寻丢失的信息。
配置文件/etc/mdadm.conf
mdadm.conf格式:
DEVICE 所用到的设备分区列表(在mdadm扫描时,将扫描这些分区)
ARRAY 定义实际的磁盘阵列
简单实例:
DEVICE/dev/sda10/dev/sda11/dev/sdb10/dev/sdb11
ARRAY/dev/md0devices=/dev/sda11,/dev/sda10
4.实战RAID
下面将通过实际操作,创建一个RAID1:
4.1格式化待做软RAID的分区:
准备两个待做RAID1的分区/dev/sda10,/dev/sdb10:
要求:
大小近乎相等,格式为Linuxraidautodetect(即:
fd);
#fdisk/dev/sda
Thenumberofcylindersforthisdiskissetto9964.
Thereisnothingwrongwiththat,butthisislargerthan1024,
andcouldincertainsetupscauseproblemswith:
1)softwarethatrunsatboottime(e.g.,oldversionsofLILO)
2)bootingandpartitioningsoftwarefromotherOSs
(e.g.,DOSFDISK,OS/2FDISK)
Command(mforhelp):
n
Commandaction
l logical(5orover)
p primarypartition(1-4)
l
Firstcylinder(1012-9964,default1012):
Usingdefaultvalue1012
Lastcylinderor+sizeor+sizeMor+sizeK(1012-1039,default1012):
1025
Command(mforhelp):
p
Disk/dev/sda:
81.9GB,81964302336bytes
255heads,63sectors/track,9964cylinders
Units=cylindersof16065*512=8225280bytes
DeviceBoot Start End Blocks Id System
/dev/sda1 1 9964 80035798+ 5 Extended
/dev/sda5 917 927 88326 7 HPFS/NTFS
/dev/sda6 928 996 554211 b Win95FAT32
/dev/sda7 997 1011 120456 7 HPFS/NTFS
/dev/sda8 1040 9964 71690031 83 Linux
/dev/sda9 1 916 7357707 83 Linux
/dev/sda10 1012 1025 112423+ 83 Linux
Partitiontableentriesarenotindiskorder
Command(mforhelp):
t (更改分区类型)
Partitionnumber(1-10):
10
Hexcode(typeLtolistcodes):
fd (分区类型为Linuxraidautodetect)
Command(mforhelp):
w (保存退出)
#fdisk-l/dev/sda
Disk/dev/sda:
81.9GB,81964302336bytes
255heads,63sectors/track,9964cylinders
Units=cylindersof16065*512=8225280bytes
DeviceBoot Start End Blocks Id System
/dev/sda1 1 9964 80035798+ 5 Extended
/dev/sda5 917 927 88326 7 HPFS/NTFS
/dev/sda6 928 996 554211 b Win95FAT32
/dev/sda7 997 1011 120456 7 HPFS/NTFS
/dev/sda8 1040 9964 71690031 83 Linux
/dev/sda9 1 916 7357707 83 Linux
/dev/sda10 1012 1025 112423+ fd Linuxraidautodetect
Partitiontableentriesarenotindiskorder
同样创建另一分区/dev/sdb10
#fdisk-l/dev/sdb
Disk/dev/sdb:
81.9GB,81964302336bytes
255heads,63sectors/track,9964cylinders
Units=cylindersof16065*512=8225280bytes
DeviceBoot Start End Blocks Id System
/dev/sdb2 4501 9964 43889580 5 Extended
/dev/sdb3 667 4500 30796605 83 Linux
/dev/sdb4 658 666 72292+ 83 Linux
/dev/sdb5 5114 5362 2000061 83 Linux
/dev/sdb6 5751 5878 1028128+ 83 Linux
/dev/sdb7 5721 5750 240943+ 83 Linux
/dev/sdb8 5620 5720 811251 83 Linux
/dev/sdb9 6261 9964 29752348+ 83 Linux
/dev/sdb10 4501 4514 112423+ fd Linuxraidautodetect
Partitiontableentriesarenotindiskorder
4.2创建RAID1:
#modproberaid1.ko
#mdadm-C--verbose/dev/md0--level=1--raid-devices=2/dev/sda10/dev/sdb10
#或mdadm-Cv/dev/md0-l1-n2/dev/sda10/dev/sdb10
mdadm:
chunksizedefaultsto64K
mdadm:
/dev/sda10appearstocontainanext2fsfilesystem
size=112320K mtime=SatJan 106:
39:
592000
mdadm:
/dev/sdb10appearstobepartofaraidarray:
size=112320Kctime=SatJan 102:
45:
142000
Continuecreatingarray?
y
mdadm:
array/dev/md0started.
#mkfs.ext3/dev/md0 (格式化raid)
mke2fs1.37(21-Mar-2005)
Filesystemlabel=
OStype:
Linux
Blocksize=1024(log=0)
Fragmentsize=1024(log=0)
28112inodes,112320blocks
5616blocks(5.00%)reservedforthesuperuser
Firstdatablock=1
14blockgroups
8192blockspergroup,8192fragmentspergroup
2008inodespergroup
Superblockbackupsstoredonblocks:
8193,24577,40961,57345,73729
Writinginodetables:
done
Creatingjournal(4096blocks):
done
Writingsuperblocksandfilesystemaccountinginformation:
done
Thisfilesystemwillbeautomaticallycheckedevery23mountsor
180days,whichevercomesfirst. Usetune2fs-cor-itooverride.
#mdadm-D/dev/md0(查看raid信息)
/dev/md0:
Version:
00.90.01
CreationTime:
SatJan 102:
45:
142000
RaidLevel:
raid1
ArraySize:
112320(109.71MiB115.02MB)
DeviceSize:
112320(109.71MiB115.02MB)
RaidDevices:
2
TotalDevices:
2
PreferredMinor:
0
Persistence:
Superblockispersistent
UpdateTime:
SatJan 105:
08:
272000
State:
clean
ActiveDevices:
2
WorkingDevices:
2
FailedDevices:
0
SpareDevices:
0
UUID:
797b80d8:
4b70e2d1:
7e427c7e:
c9546d1b
Events:
0.10
Number Major Minor RaidDeviceState
0 8 10 0 activesync /dev/sda10
1 8 26 1 activesync /dev/sdb10
#cat/proc/mdstat
Personalities:
[raid1]
md0:
activeraid1sda10[0]sdb10[1]
112320blocks[2/2][UU]raidautodetect
unuseddevices:
#mount/dev/md0 /share/raid (挂载raid)
#cp/share/partitionA2/share/raid
#ls/share/raid
lost+found asdf.asf
netatalk.tar
#umount/share/raid
#mdadm /dev/md0-r/dev/sda10 (将sda10从raid中移除)
#mdadm-D/dev/md0
/dev/md0:
Version:
00.90.01
CreationTime:
SatJan 102:
45:
142000
RaidLevel:
raid1
ArraySize:
112320(109.71MiB115.02MB)
DeviceSize:
112320(109.71MiB115.02MB)
RaidDevices:
2
TotalDevices:
1
PreferredMinor:
0
Persistence:
Superblockispersistent
UpdateTime:
SatJan 105:
30:
282000
State:
clean,degraded
ActiveDevices:
1
WorkingDevices:
1
FailedDevices:
0
SpareDevices:
0
UUID:
797b80d8:
4b70e2d1:
7e427c7e:
c9546d1b
Events:
0.52
Number Major Minor RaidDeviceState
0 0 0 0 removed
1 8 26 1 activesync /dev/sdb10
#cat/proc/mdstat
Personalities:
[raid1]
md0:
activeraid1sdb10[1]
112320blocks[2/1][_U]
unuseddevices: