RAID and LVM

RAID

         Redundant Arrays of  inexpensive(Independent)Disks,RAID:容错式廉价磁盘阵列,容错式独立磁盘阵列,简称RAID,由加利福尼亚大学伯克利分校(University of California-Berkeley)在1988年,发表的文章:“A Case for Redundant Arrays of Inexpensive Disks”。文章中,谈到了RAID这个词汇,而且定义了RAID的5层级。

    独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同的地方(因此,冗余地)的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。(即把多块硬盘通过某种方法组织成一个存储设备来使用的技术)。这中技术表现在两个方面,提高IO能力(通过多个磁盘并行读写来实现,但是对于磁盘IO能力的提升是有限的,所以有些RAID厂商采用给RAID控制器额外添加内存,CPU,IO,专用RAID自己的来提高性能)和提高耐用性(通过磁盘冗余来实现)。

    RAID的实现方式有三种

        外接式磁盘阵列:(在当前主机上提供一个专门的控制器可以接在PCI或PCI-E的接口上作为一个扩展卡)通过扩展卡提供适配能力

        内接式磁盘阵列:主板上有自己集成RAID控制器

        Software:软件仿真的方式来实现

    RAID在组织多块硬盘时的这种技术分为多个级别:此级别仅用于标识多块磁盘组织在一起的工作方式有所不同

    常用的有RAID0-6

    RAID0:条带卷

blob.png

        工作特性:需要最少两块磁盘或两块以上,把几个相同的容量的磁盘合并在一起(磁盘容量必须相等,否则以最小容量磁盘为准,即磁盘A,10G大小,磁盘B,20G大小,那么磁盘B的实际做RAID的可用空间大小仅为10G)。将写入的数据分割成数个块,依次写入的每个硬盘中,那么RAID0的可用空间为N*min(s1,s2..磁盘个数*空间最小的那颗磁盘的大小)。以此提高读写能力。一旦其中一块硬盘损坏,那么数据自然就不完整了,所以说RAID0提高了IO能力,但是没有冗余和错误修复能力。

    RAID1:镜像卷

blob.png

        工作特性:一般都用两块磁盘,根据其特性来定两个以上做RAID1没有必要,把两个相同容量的磁盘合并在一起(磁盘容量必须相等,否则以最小容量磁盘为准,即磁盘A,10G大小,磁盘B,20G大小,那么磁盘B的实际做RAID的可用空间大小仅为10G),将写入的数据分别完整备份写入每个磁盘,那么RAID0的可用空间为1*min(s1,s2…1*空间最小的那颗磁盘的大小)。以此提高冗余能力,一旦其中一块硬盘损坏,可以继续使用另一块硬盘上的数据,所有说RAID1提高了冗余能力,但是没有提高IO性能,反而略微下降,因为每次写入的数据都要分别存储两份。

    

    RAID4:

        工作特性:一般需要3块或3块以上磁盘组织成一个RAID,好比现在分别有磁盘A,B,C,然后存数据时其中磁盘C用来存储校验码,其他盘用来存储数据,写入数据的过程是,磁盘A存储chunk1,磁盘B存储chunk2,磁盘C用来存储chunk1和chunk2的校验码。校验码可以在磁盘A或磁盘B其中之一损坏时使用异或运算的方式将数据算出来(这样带来的结果就是读取速度变慢)剩余两块磁盘的压力比较大,但是此时磁盘还可以进行读写工作,这种情况下的工作模式被称为“降级模式” 如果要是磁盘A和磁盘B同时损坏了的话,就没有办法恢复数据了。基于两盘磁盘同时损坏的风险太大,所有要在其中一块损坏时,及时更换损坏了的硬盘,安装上去的新硬盘会利用现有的两块硬盘计算出数据放入新硬盘中进行数据恢复。当然也不排除在数据恢复的时候再一次有磁盘发生损坏,那么就彻底崩盘了,考虑发生此类事件的可能性,很多RAIN控制器有内置的接口用来监控磁盘是否损坏,或者控制器支持多接一块磁盘用来做热备,当有一块盘坏了,热备盘就自动启用取代损坏了的磁盘。鉴于RAID4校验盘的机制,无论哪一个数据盘读写数据,都要经过校验盘,所以校验盘的压力比其他盘的压力都大的多。就因为此一个原因,就彻底拉低了RAID4的整体性能。

    RAID5:

        工作特性:与RAID4的区别在与,RAID4是专门取用一个盘来放校验码,而RAID5是分布式的校验机制,即每块磁盘上有有校验码信息,比如有磁盘A,B,C。当对DRID5写入数据时,会把数据分割然后数据块1写入磁盘A,数据块2写入磁盘B,把数据1,2的校验码写入磁盘C。简单的说就是数据写入的同时还会在这3块硬盘上写入校验信息。RAID5的读写性能提升,可用空间为N-1*min(s1,s2…)磁盘数n-1,Raid 5 没有独立的校验盘,所有校验信息分散放在所有磁盘上, 只占用一个磁盘的容量.

        

    RAID6:

        工作特性:在RAID5的基础上增加了一层分布式校验,即每次写入数据都写入两次校验信息,双保险,需要使用最少4块磁盘来组建,因为每次写入数据都要存储校验信息两次,所以可用空间为(N-2)*min(s1,s2,…),读写性能提升有冗余能力,允许损坏两块磁盘。 

    RAID1+0:

blob.png

        底层是RAID1上次是RAID0!

        工作特性:先两两一组将磁盘制作成(镜像卷)RAID1,然后再把多组RAID1做成(条带卷)RAID0。工作模式就是先启用RAID0的机制把数据依次分块写入每个RAID1中,而RAID的机制又把每个块写了两次到不同的磁盘中。读写性能提升,有冗余能力,每组镜像最多只能坏一块,可用空间为N*min(s1,s2…)/2,最少需要4块硬盘组建。

        Raid 10其实结构非常简单,首先创建2个独立的Raid1,然后将这两个独立的Raid1组成一个Raid0,当往这个逻辑Raid中写数据时,数据被有序的写入两个Raid1中。磁盘1和磁盘2组成一个Raid1,磁盘3和磁盘4又组成另外一个Raid1;这两个Raid1组成了一个新的Raid0。如写在硬盘1上的数据1、3、5、7,写在硬盘2中则为数据1、3、5、7,硬盘3中的数据为0、2、4、6,硬盘4中的数据则为0、2、4、6,因此数据在这四个硬盘上组合成Raid10,且具有raid0和raid1两者的特性。

        虽然Raid10方案造成了50%的磁盘浪费,但是它提供了200%的速度和单磁盘损坏的数据安全性,并且当同时损坏的磁盘不在同一Raid1中,就能保证数据安全性。假如磁盘中的某一块盘坏了,整个逻辑磁盘仍能正常工作的。

        当我们需要恢复RAID 10中损坏的磁盘时,只需要更换新的硬盘,按照RAID10的工作原理来进行数据恢复,恢复数据过程中系统仍能正常工作。原先的数据会同步恢复到更换的硬盘中。

    RAID0+1: 

        底层是RAID0,上层是RAID1

        工作特性:是先做RAID0,在做RAID1,工作模式就是先启用RAID1机制将每块数据分别存储到RAID0中,然后RAID0再次把数据分割分别存储到RAID0下的磁盘中,这样看就有些不符合逻辑了,因为在写入RAID1的时候数据已经被分割,在RAID0阶段又要进行一次数据块分割。每个RAIN0分割出来的数据都不一样,而且每个RAID0不止只有两块硬盘。这样RAID0+1允许坏多个磁盘,但是只能坏在同一个RAID0中。

=================================================================== 

注意

    Raid 10 和 Raid01的区别:

    RAID10又称为RAID1+0,先进行镜像(RAID1),再进行条带存放(RAID0)。

        允许坏多个盘,只要不是一对磁盘坏就可以

    RAID01又称为RAID0+1,先进行条带存放(RAID0),再进行镜像(RAID1)。

        允许坏多个盘,但只能在坏在同一个RAID0中,不允许两个RAID0都有坏盘

========================================================================

JBOD:

    严格意义上不输入RAID范围呢,功能是将多个磁盘空间合并成一个大的连续空间来使用,可以空间为所有磁盘空间大小的和

========================================================================

常用级别

RAID-0,RAID-1,RAID-5,RAID-10,RADI-50,JBOD



在CentOS6上有软件方式实现RAID    

结合内核中的md(multi devices)

mdadm:模式化的工具

命令的语法格式:mdadm[mode]<raiddevice>[option]<component-devices>

        命令 模式  要管理的设备 选项   指定设备的组成部分

支持的RAID级别:LINEAR(线性方式),RAID0,RAID1,RAID4,RAID5,RAID6,RAID10;

模式:

创建模式:-C

装配模式: -A

监控模式: -F

管理模式: -f,-r,-a

]# cat /proc/mdstat  :查看md类型的设备状态
]# ls /dev |grep "md"
]# mdadm -C /dev/md0 -l 5 -x 1 -n 3 /dev/sdc1 /dev/sdc2 /dev/sdc3 /dev/sdc4
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
]# mke2fs -t ext4 /dev/md0
]# mount /dev/md0 /mydata
]# df -h /dev/md0
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        9.7G   23M  9.2G   1% /mydata
]#vim /etc/fstab 写入以下信息实现开机自动挂载
UUID="3d876103-f1fe-4b14-ab01-f98e5c46c76c" /mydata ext4 nosuid,nouser,noexec,noatime,async 0 0

<raiddevice>:/dev/md#(centos6重启后名字会发生变化)

<component-devices>:任意块设备

-C:创建模式

-n #:使用#个块设备来创建此RAID

-l #:指明要创建的RAID的级别

-a {yes|no}:自动创建目标RAID设备的设备文件

-c chunk_size:指明块大小

-x #:指明空闲盘的个数:

例如:创建一个10G可用空间的RAID5:

-D:显示raid的详细信息

mdadm -D /dev/md#

管理模式

-f:标记指定磁盘为损坏

]# mdadm /dev/md0 -f /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md0

-a:添加磁盘

]# mdadm /dev/md0 -a /dev/sdc1
mdadm: added /dev/sdc1

-r:移除磁盘

]# mdadm /dev/md0 -r /dev/sdc1
mdadm: hot removed /dev/sdc1 from /dev/md0

观察md的状态

cat /proc/mdstat

停止md设备

mdadm -S /dev/md#

watch命令

-n #:刷新时间,单位是秒;

watch -n# 'cmd'



LVM

    LVM 的全名是 Logical Volume Manager,中文可以翻译作逻辑卷。之所以称为“卷”可能是因为可以将filesystem 像卷轴一样伸长或缩短之故吧!LVM 的作法是将几个实体的分区或 磁盘 通过软件组合成为一块看起来是独立的大磁盘 (VG) ,然后将这块大磁盘再经过分区成为可使用分区 (LV), 最终就能够挂载使用了(依赖与device mapper模块)。系统可以进行filesystem 的扩充或缩小,其实与一个称为 PE 的项目有关.

    PV:实际的分区或磁盘,在经过fdisk调整分区类型为(8eLinux LVM)后,使用pvcreate命令将其生成为LVM最底层的实体设备(PV),然后才可以加以利用。

    VG:将一个或一个以上的物理PV组合成一个整体的逻辑设备(卷组),这个设备就叫VG,VG的存储空间大小是基于PV的,VG有些类似与我们给磁盘分区时候的扩展分区,扩展分区是不能用来存储数据的,要向在其上存储设备就必须将其再此划分为多个逻辑分区;VG的空间支持动态扩展和收缩。

    PE:VG也会在一个逻辑层次上将每一个PV所提供的空间划分成多个固定大小的块(PE),PE的大小默认为4M,大小可以根据VG的定义进行设定。一旦PE被分配给LV后他就不被叫做PE而被叫做LE。

    LV:指定特定数量的PE进行创建多个逻辑卷(LV)来实现存储数据的功能,每一个LV都是一个独立的文件系统,可以被格式化,并且挂载至指定位置使用,LV的大小可以是VG内任意可用的空间的大小,即可以在VG空间的基础上随意增加缩减,而且不会对里边的数据造成损害。

blob.png


    设备名称:    

    /dev/mapper/VG_NAME-LV_NAME;

比如 /dev/mapper/vol0-root

    /dev/vg_name/lv_name;链接指向–》 /dev/mapper/VG_NAME-LV_NAME

比如 /dev/vol0/root

    /dev/dm-# (真正的设备名)

pv管理工具:

  pvs:简要pv信息显示

blob.png

  pvdisplay:详细pv信息显示

blob.png

  pvcreate /dev/DEVICE:创建pv

fdisk /dev/sdb 创建分区 并且将各分区类型改为8e LVM

blob.png 

删除pv

blob.png

vg管理工具

  vgs

  vgdisplay

  vgcreate  创建VG [-s #[kKmMgGtTpPeE]]Vol-umeGroupName PhysicalDevicePath [PhysicalDevicePath…]

blob.png

  vgextend  增加一个PV到VG中。Vol-umeGroupName PhysicalDevicePath [PhysicalDevicePath…]

blob.png

  vgreduce  从vg中移除一个pv,移除之前要先做pvmove。把pv上的pe移动至同一个卷组上的其他pv上去。。Vol-umeGroupName PhysicalDevicePath [PhysicalDevicePath…] 

blob.png

  vgremove :删除卷组 

 vgremove vg_name

 lv管理命令:

  lvs

  lvdispaly

  lvcreate -L #[mMgGtT] -n NAME volumegroup : -L 指明LV大小,-n 指明LV名称, volmegroup 指明在哪个卷组中创建 

blob.png

blob.png

blob.png创建完成后就可以格式化文件系统然后挂载使用了

  lvremove /dev/VG_NAME-LV_NAME :删除逻辑卷

 扩展逻辑卷:(步骤)

 1 lvextend -L [+]#[mMgGtT] /dev/VG_NAME-LV_NAME  -L 指明要扩展的大小

blob.png

扩展完逻辑卷之后需要继续扩展文件系统大小,才能在df -lh 命令下看到逻辑卷的实际大小。

 2 resize2fs /dev/VG_NAME-LV_NAME 扩展文件系统大小(至实用与ext系列文件系统)

blob.png

扩展时不指明大小 即表示扩展至LV最大化

扩展后使用df -lh就可看到逻辑卷的实际大小了

blob.png

 缩减逻辑卷:(步骤)

  1 umount /dev/VG_NAME-LV_NAME:先卸载设备

  2 e2fsck -f /dev/VG_NAME-LV_NAME:强制检测修复文件系统

  3 resize2fs /dev/VG_NAME-LV_NAME #[mMgmtT]:缩减逻辑边界大小 需要指明缩减大小

  4 lvreduce -L [-]#[mMgGtT] /dev/VG_NAME-LV_NAME:缩减物理边界大小 需要指明缩减大小

  5 mount /dev/VG_NAME-LV_NAME:重新挂载使用

 

 快照:snapshot:快照卷和原卷必须在同一卷组中

  lvcreate -L [mMgGtT] -p r -s -n lv_name_snapshot original_lv_name

-s 指明要创建快照 -L 指明快照大小 -p 指明快照只读类型 -n 快照名 原卷名

-L 指明快照大小:即快照的存活时间,如果我指定快照500M 那么原卷的增长在500M之内 快照就会存活,如果原卷数据增长到500M以上,那么快照卷就完蛋了。




创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录

1:fdisk t fd

fdisk /dev/sdb  首先创建分区,并且设置分区类型为fd RAID

2: 创建raid设备

mdadm -C /dev/md0 -l1 -a yes -n2 -x1 /dev/sdb{1,2,3} 使用/dev/sdb1,2制作raid1,/dev/sdb3做热备盘

3:mkfs.ext4 /dev/md0 :给raid设备创建文件系统

mkfs.ext4 /dev/md0

4:vim /etc/fstab:编辑默认挂载配置信息

UUID="c2b98bb8-ce52-436e-83a6-2b8f53971972" /backup ext4 defaults 0 0 :添加此段信息

5:确保挂载点存在,然后挂载设备

mount -a /dev/md0

6:mdadm -Ds /dev/md0 > /etc/mdadm.conf:生成配置文件

mdadm -Ds /dev/md0 > /etc/mdadm.conf

mdadm -A /dev/md0 启动raid

mdadm -A /dev/md0

7:测试

mdadm /dev/md0 -f /dev/sdf1 模拟损坏

]# mdadm /dev/md0 -f /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0

mdadm /dev/md0 -r /dev/sdf1 删除成员

]# mdadm /dev/md0 -r /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md0

mdadm /dev/ma0 -a /dev/sdf1 增加

]# mdadm /dev/md0 -a /dev/sdb1
mdadm: added /dev/sdb1

8:删除raid

umount /dev/raid

]# umount /dev/md0

mdadm -S /dev/md0 停止raid

]# mdadm -S /dev/md0
mdadm: stopped /dev/md0

vim /etc/fstab:删除默认挂载配置信息

fdisk /dev/sda:删除raid 物理盘

mdadm –zero-superblock /dev/sda 清除在blkid中的信息



创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录

先fdisk t fd 三个磁盘分区 各为1G

]# mdadm -C /dev/md1 -l5 -a yes -n3 -c 256K /dev/sd{c1,d1,e1}

blob.png

blob.png

]# vim /etc/fstab 添加UUID="2398a15f-9510-472d-8166-3278f1aee579" /mydata ext4 defaults 0 0 进配置文件
]# mkdir /mydata 创建挂载点
]# mount -a 挂载
]# mdadm -Ds /dev/md1 > /etc/mdadm.conf 生成配置文件
]# mdadm -A /dev/md1 开始raid1
]# cat /proc/mdstat  查看raid状态
Personalities : [raid1] [raid6] [raid5] [raid4] 
md1 : active raid5 sde1[3] sdd1[1] sdc1[0]
      2118144 blocks super 1.2 level 5, 256k chunk, algorithm 2 [3/3] [UUU]
      
unused devices: <none>


创建和扩扎逻辑卷

]# fdisk /dev/sdd 分区并设备类型为lvm
]# pvcreate /dev/sdc1 创建物理卷 
]# vgcreate myvg /dev/sd{c1,d1} 创建卷组 默认pe大小为4M
  Physical volume "/dev/sdd1" successfully created
  Volume group "myvg" successfully created
 ]# lvcreate -n mylv -L 1G myvg 创建逻辑卷
 ]# lvextend -L 2G /dev/myvg/mylv 扩展逻辑卷
 ]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/myvg/mylv
  LV Name                mylv
  VG Name                myvg
  LV UUID                6usI4w-rzFS-zCsA-DWTj-2kDI-1JD2-W7wiPJ
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2016-08-26 11:53:12 +0800
  LV Status              available
  # open                 0
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

blob.png

1、创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录

2、新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录

3、扩展testlv至7G,要求archlinux用户的文件不能丢失

4、收缩testlv至3G,要求archlinux用户的文件不能丢失

5、对testlv创建快照,并尝试基于快照备份数据,验正快照的功能

blob.png

blob.png

原创文章,作者:M20-1马星,如若转载,请注明出处:http://www.178linux.com/40760

(0)
M20-1马星M20-1马星
上一篇 2016-09-02
下一篇 2016-09-02

相关推荐

  • 模块化的php编译amp和fpm化的php编译amp;

    编译安装amp 一,编译环境前准备工作 (1) 系统环境:CentOS 6,7     CentOS 6:apr, apr-util的版本为1.3.9,不适用于httpd-2.4;     CentOS 7:apr, a…

    Linux干货 2016-10-17
  • N25-第七周作业

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;     ~]# fdisk /dev/sda  (n, +10G 创建10G分区,w保存退出)   &nbsp…

    Linux干货 2017-01-22
  • 如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果

    命令别名使用alias命令; ~]#alias NAME='COMMAND' 在一个命令中引用另一个命令的执行结果也是bash的特性之一,引用。 方法:$(COMMAND)

    Linux干货 2016-11-06
  • DNS and BIND

    DNS and BIND 名称解析:把一种代号转换成为另一种代号的功能是应用程序基于某个搜索键在指定的数据库查询,查询到对应的键以后,对应键被找出来的过程!passwd —《nsswith》/etc/nsswith.conf 注意:查询的时候用到的是UDP的53,主从复制走的是tcp(但是也用到udp) DNS: Domain Name Serv…

    Linux干货 2016-10-21
  • Linux任务计划及内核管理

    作业管理:     前台作业:通过终端启动,且启动后一直占据终端;     后台作业:通过终端启动,但启动后随即转入后台运行(释放终端) 将作业放入后台的操作     1)运行中的作业:ctrl+z     2)还未执行的作业:command &   …

    Linux干货 2016-09-09
  • Linux 网络属性管理

    在介绍Linux网路属性管理之前,我还要介绍下以太网(Enternet) 以太网的工作原理 以太网才用带冲突检测的载波侦听多路访问(CSMA/CD)机制。以太网中节点都可以看到在网络中发送的所有信息,因此,我们说以太网是一种广播网络。 以太网的工作过程如下: 当以太网中的一台主机要传输数据时,它将按如下步骤进行: 1.监听信道上是否有信号在传输。如果有的话,…

    Linux干货 2016-03-20