LVM逻辑卷&RAID管理&磁盘配置详解

LVM逻辑卷管理

应用场景:想象一下,你通过传统的硬盘分区方式为某些用户提供了一块磁盘,随着用户数据的不断增加,分区的容量告急。这时要增加容量,只能选择用另一块容量更大的硬盘或分区来替换,在这个过程中,你需要将数据先拷贝至新设备,拷贝完成之后,再用新设备替换容量告罄的设备。假设你很有耐心并且整个数据的拷贝过程是顺顺利利的,你也需要考虑靠背后文件的权限变化、替换过程中用户业务终止造成的损失;即便你搞定了所有的问题,当用户业务迎来快速增长,或者你业务增长估计不足,或者出于节省开支的考虑,你需要缩减用户的硬盘空间,这时,你要怎么做呢?

还是来看看LVM吧。

LVM(Logical Volume Manager)是内核提供的一种逻辑卷管理器。适用于管理大型存储设备,允许用户动态调整文件系统的大小。LVM提供逻辑上的存储设备,用户不用再关心底层的物理硬盘。

一、逻辑卷的创建过程:

将一个或多个硬盘创建为PV(物理卷,Physical Volume),由一个或多个物理硬盘组合成VG(卷组,Volume Group),卷组是逻辑概念上的设备,其最小构成单位被称为PE(物理长度,Physical Extended),再将指定个数的PE组合成LV(逻辑卷Logic Volume)

blob.png

二、创建逻辑卷

       实验:给系统新增3块硬盘,容量分别为20G、20G、10G。在此基础上,创建一个名为newbie的VG,PE大小为8M,容量为35G,在VG的基础上创建一个名为newbie_lv的LV,容量为25G。将其挂载至/newbie目录,文件系统要求为xfs。

blob.png

       2.1 创建PV

              要达到容量为35G需求,需要对sdb或sdc进行分区,创建一个大小为5G的分区。以sdb为例。

blob.png

       注意:创建完成后,要将分区的类型转换为LVM,类型选项8e。之后通知内核硬盘所做的改动:

       CentOS6:partx

       CentOS5、7:partxprobe

通过lsblk可查看到分区已创建完成。

blob.png

之后,开始创建PV

使用:pvcreate device

       pvcreate  /dev/sdb1

blob.png

因为之前sdd被使用过,并且创建了文件系统,系统询问是否擦掉硬盘上的文件系统,测试用,删之。

创建成功之后。可以通过pvs、pvdisplay常看系统上的PV信息。pvdisplay能查看详细信息。

blob.png

/dev/sda2为安装系统时的配置。通过pvdisplay可以查看到每个pv的PE大小,总的PE数,剩余PE数,已使用PE数等信息。

~]#pvdisplay
"/dev/sdc" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name                         #属于哪个卷组,因为还没有将其加入到卷组中,所以无信息
  PV Size               20.00 GiB     #PV大小
  Allocatable           NO
  PE Size               0          #PE大小
  Total PE              0          #总PE数
  Free PE               0          #剩余PE数
  Allocated PE          0              #已使用PE数
  PV UUID               ClySli-njRv-u4Ot-AuNL-6qte-jCt3-2bqXOj

       2.2 PV创建完成之后,将PV加入VG

根据实验要求,大小为35G,名称为newbie,PE大小为8M

       使用vgcreate命令

       vgcreate  vg_name [option] devices

       常用option:

              -s:指定PE的大小。默认为4M

blob.png

       创建成功之后,通过vgs、vgdisplay(查看详细信息)查看VG的相关信息

       vgdisplay [vgname]

blob.png

       2.3 在vg的基础上创建名为newbie_lv的逻辑卷,大小为25G

使用lvcreate命令创建lv

       lvcreate [options] vgname

       -n  lvname :指定lv名称

-L  size:指定lv的大小,单位为{M|G|T}

-l pe_count:指定创建的lv包含的PE数量(一般情况下直接指定大小。)

blob.png

创建之后,查看,lvs、lvdisplay(详细信息)

blob.png

lv在创建完成之后,其目录存放于/dev目录下,以dm-开头。为了方便使用,创建了2个软连接指向lv;分别为/dev/mapper/vgname-lvname、/dev/vgname/lvname,如图:

blob.png

2.4 使用创建完成的lv

lv创建完成之后,就可以格式化和挂载使用了。此过程不再赘述

blob.png

 blob.png

三、逻辑卷的扩容和缩减

3.1 逻辑卷扩容

       LV的大小不能超过VG的大小,LV可扩展的大小即为VG的剩余大小。

       VG的大小由PV决定,若VG大小不足,增加新的PV至VG中即可。

在上文中,我们增加了一个大小为25G的LV,已知VG的大小为35G,怎样将LV的大小扩容至45G。

       在前文中,增加的硬盘容量共计为50G,我们只使用了35G,还有15G可用。将剩余的15G划分为一个分区,创建为PV,加入到VG中。

blob.png

blob.png

PV创建之后,使用vgextend来将PV加入VG

用法:vgextend  vgname  pvname

blob.png

VG容量扩展之后,就可以将LV的容量扩展至45G了。

使用lvcreate来扩展

用法:

lvcreate  lvname [option]

       常用option;

       -L m{M|G|T}:直接指定LV的大小为m  {M|G|T}
       -L + m{M|G|T}:在原有大小之上,再增加m{M|G|T}

注:请注意两者之间的区别,并且,新增后的LV大小不能小于原有的大小

blob.png

这时,我们去查看/newbie是否相应的增加。注意在扩容的过程中没有umount该LV

blob.png

发现/newbie的容量并没有增加,这是因为逻辑卷边界扩展之后,对应的文件系统边界并没有相应的扩展。需要注意的是,扩展ext系列的文件系统与xfs文件系统的方式并不一致。

       扩展ext系列文件系统的边界:

       resize2fs  /dev/vg_name/lv_name

       扩展xfs文件系统的边界:

       blob.png

扩展文件系统的边界之后,整个逻辑卷的扩展才算成功。

3.2 缩减LV

在生成环境中,缩减LV是一个比较危险的操作,为了避免数据被破坏,在操作前应将LV上的数据备份。建议慎用此操作。

       将newbie_lv的大小缩减为40G。

逻辑卷的缩减顺序:

              1)、先卸载,umount  /dev/vg_name-lv_name

              2)、强制检测修复文件系统:

ext系列:e2fsck -f  /dev/vg_name-lv_name

                     xfs系列:xfs_repair  /dev/vg_name-lv_name

              3)、缩减文件系统(逻辑边界):resize2fs /dev/vg_name/lv_name  m[MGT]

              4)、缩减lvm: lvreduce  -L  [-]#[MGT]  /dev/vg_name/lv_name

              5)、挂载使用:mount

google了下,发现xfs文件系统只能扩容,不能缩减,没办法,只好把LV的文件系统调整为ext4了。我擦!当然,有兴趣的同志可以试试xfsdump和xfsrestore命令,前者用来备份,后者用来还原。

1)先卸载(注意:若将LV同时挂载到多个目录上,应全部卸载之后再操作),再修改文件系统类型(ext文件系统忽略)

~]#mkfs.ext4 /dev/newbie/newbie_lv

blob.png

       2)强制检测文件系统;缩减文件系统逻辑边界,缩减LV

注意:在缩减时,是先缩减文件系统的逻辑边界,再缩减LV

blob.png

       3)挂载使用。因为文件系统改变了,所以LV的UUID也发生了变化,在挂载时注意修改,

blob.png

RAID管理

RAID:Redundent Arrays of Independent Disks 独立磁盘冗余阵列,其 思想是:将多块独立的磁盘按不同的方式组合为一个逻辑磁盘,从而提高存储容量,提升存储性能或提供数据备份功能

注意:RAID只是为磁盘自身提供冗余,避免出现因为磁盘损坏导致数据丢失的现象,并不能替代数据备份。

RAID实现的方式:

       硬件方式:生产环境中多采用此方式

              外接式磁盘阵列,通过扩展卡提供适配能力

              内接式磁盘阵列,主板集成RAID控制器

       软件方式:

              Software RAID             

一、RAID级别:

不同的级别表示多块磁盘组织在一起的工作方式不同。级别之间并无高低、上下之分。

       1、RAID-0:0,不含校验和冗余的条带卷(strip)

       数据被分割为多个部分,分别写入每块硬盘,所以能极大地提升存储性能和存储空间,磁盘利用率为100%,但无容错能力,一旦某块磁盘被损坏,则数据将被破坏,数据安全得不到保障。最少需要2块磁盘。

例:下图中,数据被同步分别存放于A、B、C三块磁盘中。若每块磁盘的容量为100G,则可利用的总容量为300G。因为没有备份和校验,若其中一块磁盘损坏,则会导致文件无法读取。

blob.png

       2、RAID-1:不含校验的镜像卷(mirror)

       使用磁盘镜像技术,在一个磁盘上存放数据的同时也在另一个磁盘存放相同的数据。写性能下降,读取性能提升。具有冗余能力,数据安全得到保障,但最少需要2块磁盘,磁盘利用率低,仅为50%

blob.png

        RAID2,3,4(不常用,不做介绍)

       3、RAID-5:

        数据以block为单位同步式分别写入不同的磁盘上,并对数据作奇偶校验,并将校验码存入磁盘,校验码交互存放在各个磁盘中,当某块磁盘中的数据发送损坏时,可以通过其他2块磁盘来计算出损坏盘的数据,从而保证了数据的安全,数据的读写性能也得到提升。校验码占用一个磁盘空间大小。可用空间:(n-1)/n。具有容错能力:冗余1块。最少需要3块磁盘。还可以额外提供一块磁盘用作spare,并不真正加入阵列中,但当阵列中的某块磁盘损坏时,能自动替换损坏的磁盘。 

   blob.png 

       4、RAID-6:

              类似于RAID-5,但多用一块磁盘做校验。

磁盘利用率为(n-2)/n,

冗余2块,

最少磁盘数为4

二、RAID组合模式:

1、RAID-10:RAID1和RAID0的组合,先做RAID1(优于RAID01)。继承了RAID0的高效和RAID1的安全。磁盘利用率为50%,最少4块磁盘。

       先将磁盘A和B做出一个RAID1,再将磁盘C和D做出一个RAID1,之后再将两个RAID1做成RAID0。当数据写入时,首先会议条带的方式分别写入由两个RAID1组合成的RAID0中,随后,在RAID1中又会以镜像的方式,写入数据时,同时备份该数据并写入到阵列中的另一块磁盘上。

blob.png

              2、RAID-01:RAID0和RAID1的组合,先做RAID0

              3、RAID-50

                   最少6块磁盘                                     

三、软RAID的实现方式:

       注:在生产环境中尽量不要使用这种方式。应该采用硬件的方式来实现RAID功能。

       使用mdadm命令来实现软raid

madam:模式化的工具

              mdadm  [mode]  <RAIDdevice>  [OPTIONS]  <component-devices>

              支持的RAID级别:RAID0、RAID1、RAID4、RAID5、RAID6

              模式:

                     创建: -C

                     装配: -A

                     监控: -F

                     管理: -f,-r,-a                  

              <RAIDdevice>:/dev/md#

              -C:创建模式

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

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

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

                     -c CHUNK_SIZE:指明块大小

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

创建软RAID的过程:

1)、创建磁盘分区。fdisk,并将分区格式修改为riad

       2)、创建RAID5

mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sdb{5,6,7,8}            

       3)、给RAID5创建文件系统

       4)、挂载该RAID。在/etc/fstab中挂载最好使用UUID来挂载

查看当前系统的磁盘阵列信息:cat /proc/mdstat

       mdadm  -D  /dev/md0   查看指定磁盘阵列的详细信息

       mdadm   /dev/md0  -f  /dev/sdb5   将属于某 磁盘阵列中的某块磁盘指定为损坏

       mdadm   /dev/md0  -r /dev/sdb5    将阵列中损坏的磁盘移除

       mdadm   /dev/md0  -a  /dev/sdb5   为阵列增加新的磁盘

       mdadm  -S  /dev/md0     停止md设备

四、实战演练:

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

       步骤:

       (1)新增一块1G的硬盘

       (2)将其分为2个分区,大小分别为500M

       (3)创建raid1。

              mdadm –C /dev/md100 –a yes –n2 –l 1 /dev/sdb{1,2}

       (4)为raid1创建文件系统

              mkfs.ext4 /dev/md100

       (5)设置自动挂载

              mkdir /backup

              cat /etc/fstab

                     /dev/md100 /backup ext4 default 0 0

              mount -a 

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

       步骤:

       (1)增加三块硬盘,容量分别为500M、500M、1G

       (2)创建RAID5,指定chunk大小为256k

              mdadm –C /dev/md200 –c 256 –n 3 –l 5 /dev/sd{c,d,e}

       (3)创建文件系统

              mkfs.ext4 /dev/md100

       (4)设置自动挂载

              mkdir /mydata

              cat /etc/fstab

                     /dev/md200 /mydata ext4 default 0 0

              mount -a

五、磁盘配额

综述:

配额在内核中执行,以文件系统为单位启用。对不同组或者用户的策略不同,可灵活应用。根据块或者节点进行限制

如何实现磁盘配额限制:

       配额限制只能对磁盘进行操作

要对某个目录进行限额,需要将其挂载至独立的磁盘上。

       步骤:

              1、挂载时启用配额选项

                     vim /etc/fstab;在挂载选项增加usrquota,grpquota

              2、创建配额数据库

                     quotacheck -cug /home 

                            -c:创建

                            -u:usrquota

                            -g:grpquota

                     注:若提示权限问题,关闭selinux,setenforce 0

              3、启用数据库

                     quotaon /home

                     quotaon -p /home:查看数据库是否启用

              4、配置配额:三种方式

                     1)、edquota hadoop

                     文件格式:

blocks       soft         hard         inodes        soft              hard

已使用的大小   警告大小     限定大小    已创建文件数     警告文件数      限定文件数

                     2)、edquota  -p  hadoop  gentoo:参考hadoop用户的配额设置gentoo用户的配额限制

                     3)、setquota  hadoop 100000 150000 0 0 /home

              5、测试

                     quota  hadoop

                     repoquota /home

                     dd往目录写文件                  

注:如何判断文件是否属于该用户:判断文件的属主,而不是文件的存放位置。

例:以给/home下每用户限额1G为例。

       1)、给系统新增一块10G的硬盘。将硬盘挂载至/mnt/home。将/home的数据拷贝至/mnt/home

       2)、卸载/mnt/home,将新增的磁盘设置自动挂载到/home目录下,注意在挂载是,挂载特性应增加上usrquota,grpquota两个选项。

       3)、quotacheck -cug /home/;若报错,执行:setenforce 0

       4)、quotaon -p /home/

       5)、edquota hadoop,为hadoop用户配置限额

       6)、edquota -p hadoop gentoo,参考hadoop用户配置gentoo用户的配额

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

(0)
M20-1钟明波M20-1钟明波
上一篇 2016-09-02
下一篇 2016-09-02

相关推荐

  • Linux磁盘及文件系统

    Linux磁盘及文件系统 一、硬盘 硬盘接口 PATA(Paralled Advanced Technology Attachment,并行的先进技术规范),也叫IDE(Integrated Drive Eelectronics,集成电路驱动设备),是作为一种简单而廉价的接口而开发的。速度中等,容量大而且非常便宜。 串行ATA接口SATA(Serial AT…

    Linux干货 2016-09-19
  • 马哥教育网络班28期—第1、2天知识点概略

    没做随堂笔记,根据记忆手打,看看自己能记住多少。

    Linux干货 2017-12-03
  • Linux第三周总结

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 ~]# who | cut -d ” -f1 | uniq 2、取出最后登录到当前系统的用户的相关信息。 ~]# who|tail -1 3、取出当前系统上被用户当作其默认shell的最多的那个shell ~]# cut -d’:’…

    2017-07-16
  • 马哥教育网络班22期+第6周课程练习

    请详细总结vim编辑器的使用并完成以下练习题 1、vi的基本概念 基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下: 1) 命令行模式command mode) 控制屏幕光标的移…

    Linux干货 2016-09-26
  • 千万不要把 bool 设计成函数参数

    我们有很多Coding Style 或 代码规范。但这一条可能会经常被我们所遗忘,就是我们经常会在函数的参数里使用bool参数,这会大大地降低代码的可读性。不信?我们先来看看下面的代码。 当你读到下面的代码,你会觉得这个代码是什么意思? widget->repaint(false); 是不要repaint吗?还是别的什么意思?看了文档后,我们才知道这个…

    Linux干货 2016-07-10
  • Linux入门之文本处理三剑客之grep

    Linux入门之文本处理三剑客之grep  文本处理工具:  grep,sed(流编辑器),awk    grep简述及特点 简介:全局搜索正则表达式出来的行并打印 (Global search REgular expression and Print out  the line),一种按照特定模式(patt…

    Linux干货 2016-08-07