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

Linux高级磁盘管理 RAID和LVM

2011-11-01 13:12 295 查看
RAID和LVM其实是两个完全不相干的磁盘管理机制,但是在实际使用中,我们可以把这两种机制组合使用,会达到很好的效果

先来说说RAID(Redundant Array of Independent Disk),翻译过来就是独立冗余磁盘阵列,简单一些说就是通过raid控制器,将多块磁盘组合起来,目的是提高磁盘数据处理能力和提供数据冗 余,RAID可以通过操作系统来实现(我们常说的软RAID),也可以通过RAID控制卡来实现(我们常说的硬RAID 当然,这不是绝对的),我们现在不讨论基于RAID卡的阵列,而采用linux来创建软RAID。

针对不同的应用需求,可以有不同的RAID level,RAID level其实很多,但是常用的也就只有RAID0 RAID1 RAID5 RAID10这些而已,所以本文也只介绍这些方式。关于软RAID和硬RAID也简单说一下,一般来说:需要CPU参与存储的RAID,都称之为软 RAID,不需要CPU参与的都可以称之为硬RAID,至于什么情况下需要CPU参与,下文中会有表述

RAID0

RAID0 ,又称为Stripe或Striping在RAID0下,从操作系统来说,会把整个RAID当作一块磁盘,但是RAID控制器会把数据分散开写入各个物理 磁盘中,系统的数据请求就可以被多个磁盘并发的来执行,可以显著提高磁盘的性能,软RAID系统中,这个分片的过程是需要CPU来参与的,硬RAID 中,CPU只需要将数据交给RAID控制器就可以了。在一个RAID0中,最少需要两块磁盘,整个RAID的容量是阵列中所有磁盘容量的总和。磁盘利用率 是100%。RAID0的存取方式如图





RAID1

又称为Mirror或Mirroring,从名称就看得出,磁盘,确实也是如此,在RAID1中,数据被复制放到另一磁盘上。也就是说两块磁盘中的数据 是完全相同的,这就提供了最大程度的冗余,当其中的一块磁盘坏掉以后,另一块磁盘还可以继续工作,当坏的磁盘被换掉的之后,数据能自动从剩下的好的磁盘中 复制到新磁盘上,同样的,软RAID中,CPU需要将相同的数据写入两次到磁盘,硬RAID的话,CPU还是将数据交由RAID控制器来处理,RAID1 也是需要两块磁盘,但是磁盘利用率就比较低了,只有50%。RAID1的存取方式如图





RAID5

RAID5解决了RAID0没有冗余的缺点以及RAID1速度慢的缺点,RAID5中,最少需要三块磁盘,它和RAID0的工作方式相 同,但是增加了错误纠正或者奇偶校验,奇偶校验数据条带到RAID中的所有磁盘上,它能够在其中一块磁盘坏掉的情况下来恢复数据,这种方式下,磁盘的利用 率为N-1/N,工作方式如图





RAID10

RAID10说白了其实就是RAID1和RAID0的组合,可以先把硬盘组成RAID1,然后再把多个RAID1组合成RAID0,但是种新结构的价格高,可扩充性不好。主要用于容量不大,但要求速度和差错控制的数据库中。磁盘利用率也是50%

再来看看LVM,LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,作为系统管理员,大家有没有常常遇到这样的问题,为系统分区 时,需要考虑当前每个分区的容量,还要考虑到以后各分区的使用情况来决定分区的大小,到后期某个分区容量不够用的话,通常的办法是使用符号链接或者是分区 大小调整工具来调整,但这些都没有根本的解决问题,直到LVM功能的出现,这些问题都迎刃而解。

LVM是建立在硬盘和分区之上的一个逻辑管理层,屏蔽了下层磁盘分区结构,向文件系统提供了一个抽象的磁盘,可以在磁盘上建立文件系统,通过LVM系统 管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组(volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷 组(logicalvolumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方 式进行命名、管理和分配,例如按照使用用途进行定义:“development”和“sales”,而不是使用物理磁盘名“sda”和“sdb”。而且当 系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。

看下LVM的一些基本术语

物理存储介质(Thephysicalmedia)

指的就是存储设备:硬盘 如:/dev/hda /dev/sda等

物理卷(physicalvolume)

指的是磁盘的分区或从逻辑上与磁盘分区有相同功能的设备

卷组(VolumeGroup)

LVM卷组类似于非LVM系统中的物理磁盘,可以在卷组上建立多个LVM分区(即逻辑卷)

逻辑卷(logicalvolume)

LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)

PE(physicalextent)

每一个物理卷被划分为称为PE(PhysicalExtents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。

LE(logicalextent)

逻辑卷也被划分为被称为LE(LogicalExtents)的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

首先可以看到,物理卷(PV)被由大小等同的基本单元PE组成。





一个卷组由一个或多个物理卷组成。









从上图可以看到,PE和LE有着一一对应的关系。逻辑卷建立在卷组上。逻辑卷就相当于非LVM系统的磁盘分区,可以在其上创建文件系统。

  下图是磁盘分区、卷组、逻辑卷和文件系统之间的逻辑关系的示意图:

  

   





  

  和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括以下内容:PV描述符、VG描述符、LV描述符、和一些PE描述符。

  系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。

实际操作来看一下吧,系统环境为Vmware 8.0,虚拟机系统为CentOS,先使用mdadm来建立两个RAID5设备,mdadm是支持磁盘热备的,我们这里使用热备磁盘,然后在RAID5的基础上实现LVM。

看一下磁盘信息HardDisk我已经装好了CentOS5.6,现在将Hard Disk 2-4 组成RAID5,Hard Disk5做热备,将Hard Disk 6-8 组成RAID5,Hard Disk9做热备





首先对各个磁盘进行初始化,通过fdisk 命令对各个磁盘建立分区,标记为raid分区





初始化完成之后,开始建立raid

[root@Linn-CentOS ~]# mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1





这里有几个参数 -C /dev/md0 表示建立名为/dev/md0的RAID。 -a yes表示同意建立,否则的话会一直询问,-l 5表示建立RAID5,-n 3表示有三个磁盘分区加入RAID,-x 1表示有一个磁盘分区做为热备,后面则是加入RAID的几个磁盘分区。下图表示建立完成,来看一下/dev/md0的信息,可以看到/dev/sdb1 /dev/sdc1 /dev/sdd1为RAID盘,/dev/sde1为热备盘,当RAID盘任意一块损坏时,热备盘就会顶替上去。

按照相同的方法建立好另一组阵列/dev/md1,将两个阵列都格式化,然后将系统中所有的RAID设备的定义导入/etc/mdadm.conf中,而该文件是记录系统所有RAID设备,以便下次启动时生效。

[root@Linn-CentOS ~]# mdadm -D s > /etc/mdadm.conf





现在我们得到了两个磁盘,/dev/md0和/dev/md1,我们在它的基础上来实现LVM,

首先将/dev/md0和/dev/md1转换成物理卷(在普通磁盘实现LVM时,需要先用fdisk 将分区标签改为支持LVM的8e)

[root@Linn-CentOS ~]# pvcreate /dev/md0

[root@Linn-CentOS ~]# pvcreate /dev/md1

新建一个逻辑卷组,首先将/dev/md0加入

[root@Linn-CentOS ~]# pvcreate vg1 /dev/md0





看到已经建立好了一个vg0,大小为原来/dev/md0的大小,1.99G

在逻辑卷组建立逻辑分区,并且格式化

[root@Linn-CentOS ~]# lvcreate -L 500M -n linn vg0

[root@Linn-CentOS ~]# mke2fs -j /dev/vg0/linn





我们建立了大小为500M的/dev/vg0/linn分区并且格式化了,现在我们假设/dev/vg1/linn分区空间不足,需要扩容到3000M,逻辑卷组容量不够怎么办? 我们将/dev/md1也加入vg0,这样vg0的容量就有3.98G了,足够我们扩容

[root@Linn-CentOS ~]# vgextend vg0 /dev/md1





可以看到,vg0的容量已经变大了,我们现在来对/dev/vg0/linn分区进行扩容

[root@Linn-CentOS ~]# lvextend -L +2500M /dev/vg0/linn

[root@Linn-CentOS ~]# resize2fs /dev/vg0/linn





经过以上两个命令,已经再不损失数据的前提下给/dev/vg0/linn分区扩容到3000M。

至此,这个简单的Linux下RAID建立和基于RAID实现LVM的例子就做完了,其实关于RAID还有很多东西,比如灾难恢复等,留到以后写吧。

本文参考了以下文献,在此对原作者表示敬意

1 HOWTO : Linux Software RAID

2 Linux逻辑盘卷管理LVM详解

3 通过RHEL 5实现软RAID及LVM
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: