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)
上一篇 2016-09-02 08:48
下一篇 2016-09-02 08:49

相关推荐

  • 实现软RAID0的方法

    实验利用三个分区分别为10G组成一个RAID0 分区时要注意ID的转换 创建RAID的设备名称为md0 通过mdadm -D /dev/md0可以查看md0的信息 创建配置文件: mdadm -Ds > /etc/mdadm.conf(为了系统启动时自动加载) 给RIAD0创建文件系统: 创建挂载目录mkdir /mnt/raid0 挂载: 同步: m…

    2017-12-11
  • DNS-BIND

    1.实验环境 服务器类型 域名 IP 主DNS服务器 test.com. 192.5.24.101 从DNS服务器 192.5.24.102 子DNS服务器 ops.test.com. 192.5.24.201 备注:所有服务器需保持时间同步。 2.正向解析区域(192.5.24.101) 1)  安装bind 2)  编辑主配置文件,修…

    2017-05-31
  • 菜鸟教你如何磁盘分区与创建文件系统以及挂载(2)

    一、文件系统简介与创建 1、什么是文件系统?    文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。 2、文件系统的作用    从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件…

    Linux干货 2016-08-29
  • 第六周学习总结

    写在前面 在互联网+的时代,网络显得越发重要,如果现在你一顿不吃饭可能还没事但是一个小时没网络,估计你都要疯了。那么网络到底是个啥呢?看不见又摸不着。拿着一台电脑怎么和网络建立连接呢?那么下面要讲解的内容或许可以给你解决个大概。 闲聊网络 如果让你修一栋房子你会一层一层的往上修,并且规划好一层用来开商铺,二层用来开超市,上面一层用来干嘛等等,其实网络也是一样…

    2018-01-08
  • 学习shell scripts

    1. 为什么要学习shell编程?          许多人会问,为什么要学习shell脚本编程?我学的是linux,又不是编程,其实对于个人用户可能用处不是很大,但是当你在为公司的成千上完的服务器做维护时,可能没有shell编程的话可能把人累死也无法完成任务,一千台服务器要做相…

    Linux干货 2016-08-18
  • GRUB管理

    对于运维人员来说,想要熟练掌握linux,那么久要对linux的启动流程有一个详细的了解,而今天我们就一起来学习一下linux启动中最重要的一个阶段——GRUB引导阶段。 Linux启动流程 grup: GRand Unified Bootloader  由上图可知,grub属于系统启动过程中一个必须的阶段。而这个阶段又分为了三个小的阶段,分别是s…

    2017-09-02