廉价磁盘阵列(RAID)与逻辑卷(lvm)

RAID的作用介绍与LVM的创建分析

  有计算机基础常识的人们都能了解,现如今生产出来的存储设备比如机械式磁盘,作为个体它的存储容量是有上限的,虽然曾经有人开发出大容量磁盘,但是成本太高,无法在社会中普及应用。对于这种大型服务器系统迫切需要的功能,催生出了一个叫做廉价冗余磁盘阵列的技术,歪果仁将它称为RAID。而后随着岁月的发展,又产生了逻辑卷lvm的概念。本篇针对于RAID在系统方式上设置以及lvm的详细分析。

    一.RAID的类型介绍与如何使用命令在系统上设置

  由上可知,RAID是由多个磁盘组成的单一存储设备方式,这样我们对这些个磁盘就有多种组合方式,RAID0、RAID1、RAID5、RAID10等,下面结合图文对各个排列方式进行讲解。

  1.RAID0

  RAID0又称作条带卷,实际上是将数据分为chunk块对多块磁盘分别存储,可以比喻成多个仓库同时接收货物。试想一下,这样的数据存储方式大大提高了存储速率,并且增加了存储空间。缺点是由于chunk块分割存储,如果某块磁盘遭到破坏,整个RAID存储的数据就无法重新拼凑起来了。所以说RAID0虽然大大增加了磁盘的读写速度与存储空间,但与之相应承担的风险也大大增加,RAID0模式无容错能力,这时在实际生产过程中无法被容忍的。

  2.RAID1

  RAID1又被称作镜像卷,实际上是将两块磁盘存储相同的chunk,如果其中一个磁盘损坏,另一个起到了备份的作用。这种RAID方式增加了磁盘阵列的容错性,但是由于两块磁盘同时读取数据,反而影响到磁盘的读写速率。组成RAID1最少有两块磁盘,同一组镜像卷以最小磁盘容量为标准。

  3.RAID5

  RAID5实际上是由RAID4改良而成,RAID4最少有三个磁盘,其中两个磁盘存储chunk数据块,第三块磁盘存储前两块磁盘同位置的二进制数据异或结果运算,所以三块磁盘有两块磁盘可以存储数据,如果其中这两块磁盘之一损坏,可以根据未损坏的那个数据盘与异或结果盘做运算恢复损坏磁盘的数据。但是由于实际过程中,异或结果盘的操作负担太大,导致这个盘的损坏概率大大增加,所以在RAID5中,存取异或结果在三个盘之间有规律的轮循,让每一块磁盘分担压力,这样就会使其损坏概率大大降低。

  4.RAID10与RAID01

  RAID10是将磁盘先进行RAID1排列,再将多个RAID1进行RAID0排列,这种方式很实用,既能大大增加磁盘容量,也兼备容错性,除非两个存储相同chunk块的镜像卷同时损坏,那你只能自认倒霉。RAID01是将磁盘先进行RAID0排列,在进行RAID排列,这种方式不推荐,因为容错性相比于RAID10大大降低,生产环境所承担的风险也大大增加。同样也存在RAID05,RAID50之类的排列方式。

  RAID模式的磁盘在实际生产中都是通过硬件插槽部署实现的,但是在linux系统中,也可以使用命令模式定义RAID。使用mdadm相关命令定义多个磁盘分区排列成RAID。步骤如下:

  (1)mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}1 ;

  此步骤表示创建名为md0的RAID,其中包含4个磁盘分区,排列模式为RAID5,三个分区存储数据,一个分区做空闲盘,默认回答yes。(前提是分区id改为fd模式)  

  (2)mdadm -D /dev/md0 查看新建的RAID状态,加选项实现RAID管理

  (3)如果设置开机启动,在/etc/fstab文件中增加一行:/dev/md0(最好使用blkid查看UUID,在这里使用UUID) /mnt/raid(新建的挂载点文件夹) ext4 defaults 0 0

  (4)mount -a 将/dev/md0挂载

   如此四步之后,即可在分区列表上观察到增加的RAID分区信息了。

  删除RAID分区步骤如下:

  (1)首先将/etc/fstab文件中的/dev/md0一行删除,如过没有配置文件内容,先取消挂载。

  (2)mdadm -S /dev/md0   停用/dev/md0

  (3)最后删除RAID信息:mdadm -zero-superbloclk /dev/sd{b,c,d,e}1

    二.LVM的创建和具体使用方法

  首先介绍什么是LVM,LVM就是Logical Volume Manager(逻辑卷管理器)的英文缩写。它的作用是多个设备组织起来形成一个有逻辑划分功能的存储模块。总的来说分为三层:pv物理卷,vg卷组,lv逻辑卷。下面分别介绍着三种分层。

  

  1.pv:物理卷,多个物理卷能够组成一个宏大的空间,在创建磁盘分区的时候,如果想要使某分区变为支持LVM模式的pv,要使用fdisk命令修改其分区id为8e。接着使用一系列的pv命令来创建pv。常见pv命令:

  pvcreate:创建pv,前提是分区id为8e。举例:pvcreate /dev/sdb1 /dev/sdc1 表示将sdb1、sdc1创建为pv

  pvremove:删除pv

  pvs:简要格式查看所有pv

  pvdisplay:详细查看pv

  pvck:检查pv

  2.vg:vg称为卷组,其内部需要添加多个pv来构成一个卷组,vg由以可指定pe(物理分区扩展)大小为单位构成,所有pe加在一块就是vg的总空间。常用命令如下:

  vgcreate:创建卷组,vgcreate vg0 -s 4M /dev/sdb1 /dev/sdc1  表示创建卷组vg0,内部所包含的分区为/dev/sdb1 /dev/sdc1 pe大小为4M

  vgremove:删除卷组

  vgs:查看所有vg的简要格式

  vgdisplay:查看所有vg的详细格式

  vgextend:在某一vg内添加pv,比如:vgextend vg0 /dev/sdd1 表示在vg0中添加pv /dev/sdd1

  vgreduce:移除卷组内的某一pv(前提是这个pv的内存没有被lv占用)

  

  3.lv

  lv逻辑卷是将一个vg内的所有空间以le的大小为单位划分出一块存储空间,常用命令有:

  lvcreate:创建逻辑卷,举例:lvcreate -L 10G -n lv1 vg0 表示在卷组vg0基础上创建大小为10G,名称为lv1的逻辑卷

  lvremove:删除逻辑卷,举例:lvremove lv1 删除lv1逻辑卷

  lvs,lvdisplay:查看逻辑卷

  lvextend:扩展逻辑卷,注意拓展逻辑卷之后,与之相应的文件系统也要扩展至同等大小。举例:lvextend -L +2G /dev/vg0/lv1 表示扩展逻辑卷lv1大小增加2G,接着需要使用resize命令扩展lv1文件系统的大小(假设我们已经创建了ext4文件系统并且挂载完毕):resize2fs /dev/vg0/lv1 即可成功扩展

  lvreduce:缩减逻辑卷,这个步骤相比于扩展逻辑卷更为复杂,因为逻辑卷上可能部分le存储了一些数据,如果随意缩减lv大小,可能会造成数据丢失,为了避免这种情况,缩减逻辑卷一般分为如下5个步骤。

 (1)取消挂载:umount /dev/vg0/lv1

 (2)强制检测逻辑卷的文件系统:e2fsck -f /dev/vg0/lv1 (如果缺少这步,文件系统缩减时会报错)

 (3)缩减文件系统未指定大小:resize2fs /dev/vg0/lv1 5G 缩减文件系统大小为5G

 (4)lvreduce -L 5G /dev/vg0/lv1

 (5)mount /dev/vg0/lv1 /mnt/lv1 重新挂载

  4.lvm快照snapshot

  所谓快照,就是将创建快照当时的系统数据保存下来,如果之后系统数据有变动,则会将变更前的数据放在快照区进行保存,如此之后,快照就会由变更之前的数据和未变更的数据组成。而LVM系统快照只备份变更之前的数据,没有变更的数据不做快照保存,如果查找,指向未变更的原文件。所以通过LVM作为快照是一个不错的选择。由于lv快照与原lv共享许多pe块,所以lv快照必须与原lv在同一个卷组上,下面是快照创建步骤:

 (1)lvcreate -L 2G -s -n snapshot_lv1 /dev/vg0/lv1 表示为lv1创建一个名为snaoshot_lv1的快照卷

 (2)创建快照目录并挂载。

  创建完后,在快照的挂载目录就可以看到lv1的数据信息了,如果lv1中的数据改变,快照内的数据还会保持原样。

原创文章,作者:mcgeewang,如若转载,请注明出处:http://www.178linux.com/42845

(1)
mcgeewangmcgeewang
上一篇 2016-09-11
下一篇 2016-09-11

相关推荐

  • old notes

    yum update: update software guest edition ***: how to install guest edition: 1) need to root: su – 2) yum install kernel-devel 3)yum install gcc* ( when don't remember n…

    Linux干货 2016-09-19
  • UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现

    类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。 2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务。一个类可以有多种职责,设计得好的类一般只有一种职责,在定义类的时候,将类的职责分解成为类的属性和操作(即方法)。 3) 类的属性…

    Linux干货 2015-04-07
  • ansible配置详解

    概述     ansible是一款无需在被管理主机上安装客户端,基于SSH对多台目标主机进行同时操作的轻量级的管理软件,借助各个内部的功能模块,实现了批量系统配置、批量程序部署、批量运行命令等功能。本篇就介绍一些关于ansible的基础配置相关的内容,具体包括:     1、an…

    Linux干货 2016-11-05
  • MongoDB安装部署手稿

    Edit MongoDB 手册 MongoDB 手册 第一章 Introduction MongoDB入门学习目录(建议) Databases Collections Documents 第二章 部署安装 1. Import the MongoDB public key 2. Configure the package management system (…

    Linux干货 2016-03-26
  • Linux常用命令

    一、Linux常用命令(总) 二、Linux常用命令(分) 1、pwd – print name of current/working directory 2、cd – change directory 3、ls – list,dieplay directory content 4、date – pr…

    Linux干货 2016-09-19
  • 关于大型网站技术演进的思考(五):存储的瓶颈(5)

    原文出处: 夏天的森林    上文里我遗留了两个问题,一个问题是数据库做了水平拆分以后,如果我们对主键的设计采取一种均匀分布的策略,那么它对于被水平拆分出的表后续的查询操作将有何种影响,第二个问题就是水平拆分的扩容问题。这两个问题在深入下去,本系列就越来越技术化了,可能最终很多朋友读完后还是没有找到解决实际问题的启迪,而且我觉得…

    Linux干货 2015-03-11