LVM逻辑卷管理器

实战场景:对于生产环境下的服务器来说,如果存储数据的分区磁盘空间不够了怎么办?

答:只能换一个更大的磁盘。如果用了一段时间后,空间又不够了,怎么办?再加一块更大的?换磁盘的过程中,还需要把数据从一个硬盘复制到另一个硬盘,过程太慢了。

解决方案:使用LVM在线动态扩容

逻辑卷管理器是Linux系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬

盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷

组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。LVM的技术架构如图所示。

一、LVM常用的术语

物理存储介质(The physical media):LVM存储介质可以是磁盘分区,整个磁盘,RAID阵列或SAN磁盘,设备必须初始化为LVM物理卷,才能与LVM结合使用

物理卷PV(physical volume)  :物理卷就是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数,创建物理卷它可以用硬盘分区,也可以用硬盘本身;

卷组VG(Volume Group)  :一个LVM卷组由一个或多个物理卷组成

逻辑卷LV(logical volume)  :LV建立在VG之上,可以在LV之上建立文件系统

PE(physical extents)  :PV物理卷中可以分配的最小存储单元,PE的大小是可以指定的,默认为4MB

LE(logical extent)  : LV逻辑卷中可以分配的最小存储单元,在同一个卷组中,LE的大小和PE是相同的,并且一一对应

二、部署逻辑卷

常用的LVM部署命令

功能/命令

物理卷管理                       卷组管理                          逻辑卷管理                                

扫描

            pvscan                         vgscan                               lvscan                     

建立

pvcreate vgcreate lvcreate

显示

pvdisplay vgdisplay lvdisplay

删除

pvremove vgremove lvremove

扩展

  vgextend lvextend

缩小

  vgreduce lvreduce

第一步:添加两块磁盘

第二步:让两块硬盘支持LVM技术

  1. [root@ken ~]# pvcreate /dev/sdb /dev/sdc
  2. Physical volume "/dev/sdb" successfully created.
  3. Physical volume "/dev/sdc" successfully created.

第三步:创建卷组

  1. [root@ken ~]# vgcreate ken /dev/sdb /dev/sdc
  2. Volume group "ken" successfully created

第四步:创建逻辑卷

切割出一个100M的逻辑卷设备

这里需要注意切割单位的问题。在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L。例如,使用-L 150M生成一个大小为150MB的逻

辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB。例如,使用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷。

  1. [root@ken ~]# lvcreate -n ken1 -L 100M ken
  2. Logical volume "ken1" created.

第五步:把生成好的逻辑卷进行格式化

  1. [root@ken ~]# mkfs.ext4 /dev/ken/ken1
  2. mke2fs 1.42.9 (28-Dec-2013)
  3. Filesystem label=
  4. OS type: Linux
  5. Block size=1024 (log=0)
  6. Fragment size=1024 (log=0)
  7. Stride=0 blocks, Stripe width=0 blocks
  8. 25688 inodes, 102400 blocks
  9. 5120 blocks (5.00%) reserved for the super user
  10. First data block=1
  11. Maximum filesystem blocks=33685504
  12. 13 block groups
  13. 8192 blocks per group, 8192 fragments per group
  14. 1976 inodes per group
  15. Superblock backups stored on blocks:
  16. 8193, 24577, 40961, 57345, 73729
  17.  
  18. Allocating group tables: done
  19. Writing inode tables: done
  20. Creating journal (4096 blocks): done
  21. Writing superblocks and filesystem accounting information: done

第六步:挂载使用

  1. [root@ken ~]# mkdir /test1
  2. [root@ken ~]# mount /dev/ken/ken1 /test1
  3. [root@ken ~]# df -h
  4. Filesystem Size Used Avail Use% Mounted on
  5. /dev/mapper/centos-root 17G 1.2G 16G 7% /
  6. devtmpfs 476M 0 476M 0% /dev
  7. tmpfs 488M 0 488M 0% /dev/shm
  8. tmpfs 488M 7.7M 480M 2% /run
  9. tmpfs 488M 0 488M 0% /sys/fs/cgroup
  10. /dev/sda1 1014M 130M 885M 13% /boot
  11. tmpfs 98M 0 98M 0% /run/user/0
  12. /dev/mapper/ken-ken1 93M 1.6M 85M 2% /test1

三、Linux扩容逻辑卷ext4格式

第一步:卸载

  1. [root@ken ~]# umount /test1

第二步:把ken1逻辑卷扩展到300M

  1. [root@ken ~]# umount /test1
  2. [root@ken ~]# lvextend -L 300M /dev/ken/ken1
  3. Size of logical volume ken/ken1 changed from 100.00 MiB (25 extents) to 300.00 MiB (75 extents).
  4. Logical volume ken/ken1 successfully resized.

第三步:检查磁盘完整性

  1. [root@ken ~]# e2fsck -f /dev/ken/ken1
  2. e2fsck 1.42.9 (28-Dec-2013)
  3. Pass 1: Checking inodes, blocks, and sizes
  4. Pass 2: Checking directory structure
  5. Pass 3: Checking directory connectivity
  6. Pass 4: Checking reference counts
  7. Pass 5: Checking group summary information
  8. /dev/ken/ken1: 11/25688 files (9.1% non-contiguous), 8896/102400 blocks

第四步:重置硬盘容量

  1. [root@ken ~]# resize2fs /dev/ken/ken1
  2. resize2fs 1.42.9 (28-Dec-2013)
  3. Resizing the filesystem on /dev/ken/ken1 to 307200 (1k) blocks.
  4. The filesystem on /dev/ken/ken1 is now 307200 blocks long.

第五步:重新挂载

可以发现现在已经是300M了

  1. [root@ken ~]# mount /dev/ken/ken1 /test1
  2. [root@ken ~]# df -h
  3. Filesystem Size Used Avail Use% Mounted on
  4. /dev/mapper/centos-root 17G 1.2G 16G 7% /
  5. devtmpfs 476M 0 476M 0% /dev
  6. tmpfs 488M 0 488M 0% /dev/shm
  7. tmpfs 488M 7.7M 480M 2% /run
  8. tmpfs 488M 0 488M 0% /sys/fs/cgroup
  9. /dev/sda1 1014M 130M 885M 13% /boot
  10. tmpfs 98M 0 98M 0% /run/user/0
  11. /dev/mapper/ken-ken1 287M 2.0M 266M 1% /test1

四、Linux扩容逻辑卷xfs格式

1. xfs格式只能扩容,不能减小!

2. xfs格式无需卸载,支持在线扩容

第一步:创建一个逻辑卷并格式化为xfs格式

  1. [root@ken ~]# lvcreate -n lv_xfs -L 300M ken
  2. Logical volume "lv_xfs" created.
  3. [root@ken ~]# mkfs.xfs /dev/ken/lv_xfs
  4. meta-data=/dev/ken/lv_xfs isize=512 agcount=4, agsize=19200 blks
  5. = sectsz=512 attr=2, projid32bit=1
  6. = crc=1 finobt=0, sparse=0
  7. data = bsize=4096 blocks=76800, imaxpct=25
  8. = sunit=0 swidth=0 blks
  9. naming =version 2 bsize=4096 ascii-ci=0 ftype=1
  10. log =internal log bsize=4096 blocks=855, version=2
  11. = sectsz=512 sunit=0 blks, lazy-count=1
  12. realtime =none extsz=4096 blocks=0, rtextents=0

第二步:挂载使用

  1. [root@ken ~]# mount /dev/ken/lv_xfs /ken
  2. [root@ken ~]# df -h
  3. Filesystem Size Used Avail Use% Mounted on
  4. /dev/mapper/centos-root 17G 1.4G 16G 8% /
  5. devtmpfs 476M 0 476M 0% /dev
  6. tmpfs 488M 0 488M 0% /dev/shm
  7. tmpfs 488M 7.7M 480M 2% /run
  8. tmpfs 488M 0 488M 0% /sys/fs/cgroup
  9. /dev/sda1 1014M 130M 885M 13% /boot
  10. tmpfs 98M 0 98M 0% /run/user/0
  11. /dev/mapper/ken-lv_xfs 297M 16M 282M 6% /ken

第三步:在线扩容至600M

  1. [root@ken ~]# lvextend -L 600M /dev/ken/lv_xfs
  2. Size of logical volume ken/lv_xfs changed from 300.00 MiB (75 extents) to 600.00 MiB (150 extents).
  3. Logical volume ken/lv_xfs successfully resized.
  4. [root@ken ~]# xfs_growfs /dev/ken/lv_xfs
  5. meta-data=/dev/mapper/ken-lv_xfs isize=512 agcount=4, agsize=19200 blks
  6. = sectsz=512 attr=2, projid32bit=1
  7. = crc=1 finobt=0 spinodes=0
  8. data = bsize=4096 blocks=76800, imaxpct=25
  9. = sunit=0 swidth=0 blks
  10. naming =version 2 bsize=4096 ascii-ci=0 ftype=1
  11. log =internal bsize=4096 blocks=855, version=2
  12. = sectsz=512 sunit=0 blks, lazy-count=1
  13. realtime =none extsz=4096 blocks=0, rtextents=0
  14. data blocks changed from 76800 to 153600

第四步:查看磁盘信息

发现xfs格式的逻辑卷已经扩容至600M

  1. [root@ken ~]# df -h
  2. Filesystem Size Used Avail Use% Mounted on
  3. /dev/mapper/centos-root 17G 1.4G 16G 8% /
  4. devtmpfs 476M 0 476M 0% /dev
  5. tmpfs 488M 0 488M 0% /dev/shm
  6. tmpfs 488M 7.7M 480M 2% /run
  7. tmpfs 488M 0 488M 0% /sys/fs/cgroup
  8. /dev/sda1 1014M 130M 885M 13% /boot
  9. tmpfs 98M 0 98M 0% /run/user/0
  10. /dev/mapper/ken-lv_xfs 597M 16M 582M 3% /ken

五、Linux缩小逻辑卷

相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外Linux系统规定,在对LVM

逻辑卷进行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证我们的数据安全)。在执行缩容操作前记得先把文件系统卸载掉。

第一步:卸载

  1. [root@ken ~]# umount /test1/

第二步:检查系统完整性

  1. [root@ken ~]# e2fsck -f /dev/ken/ken1
  2. e2fsck 1.42.9 (28-Dec-2013)
  3. Pass 1: Checking inodes, blocks, and sizes
  4. Pass 2: Checking directory structure
  5. Pass 3: Checking directory connectivity
  6. Pass 4: Checking reference counts
  7. Pass 5: Checking group summary information
  8. /dev/ken/ken1: 11/75088 files (9.1% non-contiguous), 15637/307200 blocks

第三步:大小重置

  1. [root@ken ~]# resize2fs /dev/ken/ken1 200M
  2. resize2fs 1.42.9 (28-Dec-2013)
  3. Resizing the filesystem on /dev/ken/ken1 to 204800 (1k) blocks.
  4. The filesystem on /dev/ken/ken1 is now 204800 blocks long.

第四步:缩小到200M

  1. [root@ken ~]# lvreduce -L 200M /dev/ken/ken1
  2. WARNING: Reducing active logical volume to 200.00 MiB.
  3. THIS MAY DESTROY YOUR DATA (filesystem etc.)
  4. Do you really want to reduce ken/ken1? [y/n]: y
  5. Size of logical volume ken/ken1 changed from 300.00 MiB (75 extents) to 200.00 MiB (50 extents).
  6. Logical volume ken/ken1 successfully resized.

第五步:重新挂载使用

  1. [root@ken ~]# mount /dev/ken/ken1 /test1/
  2. [root@ken ~]# df -h
  3. Filesystem Size Used Avail Use% Mounted on
  4. /dev/mapper/centos-root 17G 1.2G 16G 7% /
  5. devtmpfs 476M 0 476M 0% /dev
  6. tmpfs 488M 0 488M 0% /dev/shm
  7. tmpfs 488M 7.7M 480M 2% /run
  8. tmpfs 488M 0 488M 0% /sys/fs/cgroup
  9. /dev/sda1 1014M 130M 885M 13% /boot
  10. tmpfs 98M 0 98M 0% /run/user/0
  11. /dev/mapper/ken-ken1 190M 1.6M 175M 1% /test1

六、Linux删除逻辑卷

第一步:取消挂载

  1. [root@ken ~]# umount /test1/

第二步:删除逻辑卷设备

  1. [root@ken ~]# lvremove /dev/ken/ken1
  2. Do you really want to remove active logical volume ken/ken1? [y/n]: y
  3. Logical volume "ken1" successfully removed

第三步:删除卷组

  1. [root@ken ~]# vgremove ken
  2. Volume group "ken" successfully removed

第四步:删除物理卷

  1. [root@ken ~]# pvremove /dev/sdb /dev/sdc
  2. Labels on physical volume "/dev/sdb" successfully wiped.
  3. Labels on physical volume "/dev/sdc" successfully wiped.

Linux系统中lvm简介的更多相关文章

  1. Linux系统中的Device Mapper学习

    在linux系统中你使用一些命令时(例如nmon.iostat 如下截图所示),有可能会看到一些名字为dm-xx的设备,那么这些设备到底是什么设备呢,跟磁盘有什么关系呢?以前不了解的时候,我也很纳闷. ...

  2. (转)浅谈 Linux 系统中的 SNMP Trap

    原文:https://www.ibm.com/developerworks/cn/linux/l-cn-snmp/index.html 简介 本文讲解 SNMP Trap,在介绍 Trap 概念之前, ...

  3. Linux系统中ElasticSearch搜索引擎安装配置Head插件

    近几篇ElasticSearch系列: 1.阿里云服务器Linux系统安装配置ElasticSearch搜索引擎 2.Linux系统中ElasticSearch搜索引擎安装配置Head插件 3.Ela ...

  4. Jmeter(五十三) - 从入门到精通高级篇 - 懒人教你在Linux系统中安装Jmeter(详解教程)

    1.简介 我们绝大多数使用的都是Windows操作系统,因此在Windows系统上安装JMeter已经成了家常便饭,而且安装也相对简单,但是服务器为了安全.灵活小巧,特别是前几年的勒索病毒,现在绝大多 ...

  5. 在linux系统中安装VSCode(Visual Studio Code)

    在linux系统中安装VSCode(Visual Studio Code) 1.从官网下载压缩包(话说下载下来解压就直接可以运行了咧,都不需要make) 访问Visual Studio Code官网  ...

  6. Linux 系统中的MySQL数据库默认区分大小写

    今天在开发中遇到这么个问题,将连接的数据库改为服务器上的时候(服务器是Linux系统的),程序跑起来后一直出错,总提示数据库的表找不到, 而打开数据库看该表明明是存在的,在我的印象中MySQL数据是不 ...

  7. Linux 系统中僵尸进程

    Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸.配图源 ...

  8. Linux系统中配置jdk

    在Linux系统下安装jdk 1.到Oracle公司的官网里下载好jdk,网址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8 ...

  9. Linux 系统中用户切换

    1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...

随机推荐

  1. http-server让你在任何目录下都可以创建web服务

    在做前端页面开发,或者预览时,如果借助于Apache.Tomcat.nginx等预览页面,每次需要将所需预览的页面移动到对应的文件夹下,且还需要考虑是否删除相关目录原有的文件,显然比较麻烦. 那么有没 ...

  2. Lucene分词详解

    分词和查询都是以词项为基本单位,词项是词条化的结果.在Lucene中分词主要依靠Analyzer类解析实现.Analyzer类是一个抽象类,分词的具体规则是由子类实现的,所以对于不同的语言规则,要有不 ...

  3. PTA2

    一.题目:7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成“贰万叁仟壹百零捌”元.为了简化输出,用 ...

  4. 【项目经验】Mockito教程

    一.教程 转载:https://blog.csdn.net/sdyy321/article/details/38757135/ 官网: http://mockito.org API文档:http:// ...

  5. 网络请求 Requests

    网络请求 Requests url: 就是需要请求,并进行下一步处理的urlcallback: 指定该请求返回的Response,由那个函数来处理.method: 一般不需要指定,使用默认GET方法请 ...

  6. CCNet: Criss-Cross Attention for Semantic Segmentation 里的Criss-Cross Attention计算方法

    论文地址:https://arxiv.org/pdf/1811.11721v1.pdf  code address: https://github.com/speedinghzl/CCNet 相关论文 ...

  7. 15.1 打开文件时的提示(不是dos格式)去掉头文件

    1.用ultraedit打开文件时,总提示不是DOS格式 2.把这个取消.dos格式只是用来在unix下读写内容的,此功能禁用即可.

  8. 华硕ASUSPRO P5440UA笔记本电脑安装驱动

    领了一台公司的办公笔记本,按照套路重装了系统(win10),后面发现悲剧了 采坑1: 从华硕通过型号搜索下来的无线网卡(WIFI) 驱动无法安装(双击启动没有反映) 解决:通过设备Id上google搜 ...

  9. BootStrap小知识随笔

    1.让label和input在一行显示 添加class "form-inline"就可以了.如 <table class="table table-bordered ...

  10. 运用scrollPic插件的实例

    html页面部分 <!doctype html> <html lang="en"> <head> <meta charset=" ...