Linux LVM概念介绍及相关配置

LVM简介

LVM是Linux操作系统的逻辑卷管理器。 现在有两个Linux版本的LVM,分别是 LVM1,LVM2。LVM1是一种已经被认为稳定了几年的成熟产品,LVM2 是最新最好的LVM版本。 LVM2几乎完全向后兼容使用LVM1创建的卷,目前centos7以上版本默认都是使用的LVM2。

简单来说,就是操作系统把一组物理磁盘先组成卷组,然后在该卷组上划分逻辑卷,不同的逻辑卷可以格式化成不同的文件格式,从而使得操作系统可以统一操作所有的存储资源,屏蔽了不同存储硬件的差异。

LVM中的概念

物理存储介质(The physical media)

这里指系统的存储设备:硬盘,如:/dev/hda、/dev/sda等等,是存储系统最低层的存储单元。可以简单理解为:插在服务器上的一块硬盘设备。硬盘设备及硬盘分区可使用fdisk命令进行管理。

PV(physical volume)

物理卷在LVM管理系统最底层,基于整个物理硬盘或实际物理硬盘上的分区进行创建。可使用pvs命令查看pv信息。

VG(volume group)

卷组建立在物理卷上,一个卷组中至少要包括一个物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。LVM卷组由一个或多个物理卷组成。通过卷组这个概念,可以方便的把不同的物理卷(对应到不同的物理磁盘)纳入到一个统一的卷组中进行管理。可使用vgs命令查看vg信息。

LV(logical volume)

逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。注意:xfs文件系统是不能缩减的,只能增加。可使用lvs命令查看lv信息。

PE(physical extent)

物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。

LE(logical extent)

逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。卷组描述区域:卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中逻辑卷、逻辑卷中物理区域的分配等所有信息,它是在使用pvcreate建立物理卷时建立的。

图1:磁盘分区/物理卷(PV)、卷组(VG)、逻辑卷(LV)之间的关系图

使用LVM扩展逻辑卷

下面以在虚拟机中挂载一个新的磁盘设备sdb为例,来看看具体如何在操作系统中扩展逻辑卷。

1、查看当前目录下子目录占用容量(不是必须的,可以看下目前整体的磁盘使用情况)

[root@localhost ~]# du -lh --max-depth=1

8.0K ./.cache

4.0K ./.dbus

4.0K ./.config

4.0K ./.ssh

91M ./docker

2.0G ./kubernetes

4.0K ./.docker

0 ./.m2

11M ./apache-maven-3.5.4

213M ./localRepo

1.1M ./.basher

2.3M ./.kube

3.2M ./.helm

62M ./linux-amd64

185M ./alpinejre

108K ./auto-deploy-app

208M ./jre1.8.0_181

20K ./.oracle_jre_usage

163M ./springcloud

383M ./jdk1.8.0_191

69M ./.npm

0 ./.npm-global

371M ./node_modules

137M ./apache-skywalking-apm-incubating

333M ./jira

56K ./.java

11M ./maven3

0 ./.pki

4.7G .

2、查看当前的磁盘设备使用情况

[root@localhost ~]# fdisk -l

磁盘 /dev/sda:75.2 GB, 75161927680 字节,146800640 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x000c0092

设备 Boot Start End Blocks Id System

/dev/sda1 * 2048 1026047 512000 83 Linux

/dev/sda2 1026048 104857599 51915776 8e Linux LVM

磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/mapper/rhel-root:51.0 GB, 50994348032 字节,99598336 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/mapper/rhel-swap:2164 MB, 2164260864 字节,4227072 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

[root@localhost ~]# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

fd0 2:0 1 4K 0 disk

sda 8:0 0 70G 0 disk

├─sda1 8:1 0 500M 0 part /boot

└─sda2 8:2 0 49.5G 0 part

├─rhel-root 253:0 0 47.5G 0 lvm /

└─rhel-swap 253:1 0 2G 0 lvm [SWAP]

sdb 8:16 0 100G 0 disk

sr0 11:0 1 1024M 0 rom

[root@localhost ~]# df -hT

文件系统 类型 容量 已用 可用 已用% 挂载点

/dev/mapper/rhel-root xfs 48G 45G 3.4G 94% /

devtmpfs devtmpfs 5.9G 0 5.9G 0% /dev

tmpfs tmpfs 5.9G 148K 5.9G 1% /dev/shm

tmpfs tmpfs 5.9G 18M 5.9G 1% /run

tmpfs tmpfs 5.9G 0 5.9G 0% /sys/fs/cgroup

/dev/sda1 xfs 497M 118M 379M 24% /boot

[root@localhost ~]# vgs

VG #PV #LV #SN Attr VSize VFree

rhel 1 2 0 wz--n- 49.51g 0

[root@localhost ~]# lvs

LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert

root rhel -wi-ao---- 47.49g

swap rhel -wi-ao---- 2.02g

[root@localhost ~]# pvs

PV VG Fmt Attr PSize PFree

/dev/sda2 rhel lvm2 a-- 49.51g 0

这边我们先使用fdisk -l命令查看当前的磁盘设备,可以看到有sda和sdb两块裸设备,容量分别为70G和100G,其中sda分了两个分区sda1和sda2。使用lsblk命令可以比较直观的看出其中的组织结构关系。系统中有一个名为/dev/sda2的pv,容量为49.5G,有一个名为rhel的vg卷组(目前只有/dev/sda2这个pv组成),rhel这个vg下有两个逻辑卷,分别是root和swap,其中/dev/mapper/rhel-root这个逻辑卷的挂载点为根目录,即意味着除了/dev、/run、/boot这些特殊目录,其他绝大部分的系统目录使用的都是rhel-root这个逻辑卷,这个lv的文件格式为xfs。所以我们这边的任务就是扩展这个rhel-root逻辑卷的容量

从上面的信息来分析,可以看到其实sda这个设备的磁盘容量并没有被充分使用,所以我们这边第一步任务是为sda设备先创建新的分区,并把这部分容量扩充到rhel-root这个逻辑卷,第二步是把整个sdb设备加入rhel这个vg,并扩展到rhel-root这个lv。

3、创建分区,扩展逻辑卷

[root@localhost ~]# fdisk /dev/sda //创建分区

n 新建分区

p 打印分区列表

t 修改分区格式,LVM=8e

w 保存分区信息到磁盘,退出

q 不保存分区信息到磁盘,退出

//先使用选项n创建一个名为/dev/sdb3的分区,都用默认选项就好。注意使用选项t修改分区格式,改为8e是lvm支持的格式

[root@localhost ~]# partprobe //发现新分区

[root@localhost ~]# lsblk //列出设备信息,可以看到有sda3这个分区了,容量为20G,即sda设备的剩余容量

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

fd0 2:0 1 4K 0 disk

sda 8:0 0 70G 0 disk

├─sda1 8:1 0 500M 0 part /boot

├─sda2 8:2 0 49.5G 0 part

│ ├─rhel-root 253:0 0 47.5G 0 lvm /

│ └─rhel-swap 253:1 0 2G 0 lvm [SWAP]

└─sda3 8:3 0 20G 0 part

sdb 8:16 0 100G 0 disk

sr0 11:0 1 1024M 0 rom

[root@localhost ~]# pvcreate /dev/sda3 //使用新分区创建pv

Physical volume "/dev/sda3" successfully created

[root@localhost ~]# vgextend rhel /dev/sda3 //将新的pv加入rhel这个vg

Volume group "rhel" successfully extended

[root@localhost ~]# lvextend -l +100%free /dev/rhel/root //按百分比扩展LV

#[root@localhost ~]# lvextend -L +1G /dev/rhel/root //按指定容量扩展LV

Extending logical volume root to 67.49 GiB

Logical volume root successfully resized

[root@localhost ~]# xfs_growfs /dev/mapper/rhel-root //扩展xfs文件系统

meta-data=/dev/mapper/rhel-root isize=256 agcount=4, agsize=3112448 blks

= sectsz=512 attr=2, projid32bit=1

= crc=0

data = bsize=4096 blocks=12449792, imaxpct=25

= sunit=0 swidth=0 blks

naming =version 2 bsize=4096 ascii-ci=0 ftype=0

log =internal bsize=4096 blocks=6079, version=2

= sectsz=512 sunit=0 blks, lazy-count=1

realtime =none extsz=4096 blocks=0, rtextents=0

data blocks changed from 12449792 to 17691648

[root@localhost ~]# df -hT //这边看到,rhel-root这个逻辑卷的容量已经扩充为68G

文件系统 类型 容量 已用 可用 已用% 挂载点

/dev/mapper/rhel-root xfs 68G 45G 24G 66% /

devtmpfs devtmpfs 5.9G 0 5.9G 0% /dev

tmpfs tmpfs 5.9G 148K 5.9G 1% /dev/shm

tmpfs tmpfs 5.9G 18M 5.9G 1% /run

tmpfs tmpfs 5.9G 0 5.9G 0% /sys/fs/cgroup

/dev/sda1 xfs 497M 118M 379M 24% /boot

4、如果是添加裸磁盘的话就更加方便,可以不分区,直接将整个设备创建为pv(pvcreate /dev/sdb),之后的操作是一样的,以下是将sdb设备加入进来后的最终情况。

[root@localhost ~]# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

fd0 2:0 1 4K 0 disk

sda 8:0 0 70G 0 disk

├─sda1 8:1 0 500M 0 part /boot

├─sda2 8:2 0 49.5G 0 part

│ ├─rhel-root 253:0 0 167.5G 0 lvm /

│ └─rhel-swap 253:1 0 2G 0 lvm [SWAP]

└─sda3 8:3 0 20G 0 part

└─rhel-root 253:0 0 167.5G 0 lvm /

sdb 8:16 0 100G 0 disk

└─rhel-root 253:0 0 167.5G 0 lvm /

sr0 11:0 1 1024M 0 rom

[root@localhost ~]# pvs

PV VG Fmt Attr PSize PFree

/dev/sda2 rhel lvm2 a-- 49.51g 0

/dev/sda3 rhel lvm2 a-- 20.00g 0

/dev/sdb rhel lvm2 a-- 100.00g 0

[root@localhost ~]# vgs

VG #PV #LV #SN Attr VSize VFree

rhel 3 2 0 wz--n- 169.50g 0

[root@localhost ~]# lvs

LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert

root rhel -wi-ao---- 167.48g

swap rhel -wi-ao---- 2.02g

[root@localhost ~]# df -hT

文件系统 类型 容量 已用 可用 已用% 挂载点

/dev/mapper/rhel-root xfs 168G 45G 124G 27% /

devtmpfs devtmpfs 5.9G 0 5.9G 0% /dev

tmpfs tmpfs 5.9G 148K 5.9G 1% /dev/shm

tmpfs tmpfs 5.9G 18M 5.9G 1% /run

tmpfs tmpfs 5.9G 0 5.9G 0% /sys/fs/cgroup

/dev/sda1 xfs 497M 118M 379M 24% /boot

linux 安装 lvm,Linux配置LVM相关推荐

  1. linux添加cfg,Linux安装详解-配置ks.cfg实现自动安装过程

    Linux安装详解-配置ks.cfg实现自动安装过程 之前发过一篇关于通过PXE实现Linux批量无人值守自动安装的文章(可以参考),不过写的只是具体的配置和操作,对于原理部分没有说明,最近通过一段时 ...

  2. Ubuntu Linux安装PyQt5并配置Qt Designer

    Ubuntu Linux安装PyQt5并配置Qt Designer PyQt5 创建独立环境 创建conda环境 安装pyqt5 查看版本 安装图形界面Qt Designer pycharm 配置 v ...

  3. Kali Linux安装与基本配置(文内提供成品镜像下载)

    Kali Linux安装与基本配置(文内提供成品镜像下载) 写入镜像 配置 镜像 + 虚拟机 安装Kali Linux 优化 更新源 安装vm-tools 安装输入法 Kali介绍Kali Linux ...

  4. Linux下载cfg命令,Linux安装详解-配置ks.cfg实现自动安装过程

    之前发过一篇关于通过PXE实现Linux批量无人值守自动安装的文章(可以参考http://www.linuxidc.com/Linux/2011-08/39949.htm),不过写的只是具体的配置和操 ...

  5. linux ks脚本,linux安装详解-配置ks.cfg实现自动安装过程

    linux安装大致可以分为2个阶段 第一阶段:anaconda 第二阶段:installinstall阶段系统会按照anaconda阶段设定的参数自动安装,这里主要要说的是anaconda阶段,此阶段 ...

  6. Linux redis配置服务,Linux 安装 redis 并配置成 service 系统服务

    前言 写作这一篇文章纯粹的目的就是快速上手redis,人的精力有限,将你的精力花在学习知识上,而不是安装. 我就是喜欢简单的命令管理 Linux 上的程序,信奉傻瓜式操作是流行的前提.当你希望弄懂为什 ...

  7. linux安装操作系统以及配置ip地址

    linux作者:毕业于芬兰赫尔辛基大学的linus torvalds linux是多用户,多进程,多线程,实时性能好,功能强大而稳定,完全开放源代码的系统 linux是一个树形结构的目录系统,任何设备 ...

  8. linux安装jdk及配置

    在安装和配置jdk时本人推荐使用第二种方法 第一种方法:第一种属于傻瓜式安装,(yum安装)只需要一条命令就可以安装jdk 1. 首先执行以下命令查看可安装的jdk版本: [root@localhos ...

  9. Linux安装mysql并配置外网访问

    配置步骤 1.查看是否配置DNS 如果没有配置DNS参照前文配置DNS 配置相关 如果没有配置DNS yum命令找不到Linux软件库的 DNS配置免费的 DNS1=114.114.114.114即可 ...

  10. linux安装git并配置GitHub账号,本地与GitHub之间进行文件的上传(push)、下载(克隆)、更新

    0310 Linux和github交互 参考链接: 安装git并配置GitHub账号: 本地与GitHub之间进行文件的上传(push).下载(克隆).更新 上传 下载 更新: 补充:GitHub的原 ...

最新文章

  1. hibernate和jdbc的优缺点,概述
  2. 项目中用到的BAPI合集
  3. 如何在Cordova Android 7.0.0 以下版本集成最新插件 极光插件为例 1
  4. 数据挖掘10大算法详细介绍
  5. 科大讯飞2020完整事件抽取系统(bert+数据集)
  6. django 1.8 官方文档翻译: 6-6-4 部署静态文件
  7. 无法重新声明块范围变量。此处也声明了 。_Go 语句块与作用域
  8. 运行第一个PHP程序
  9. PHP网站开启gzip压缩,PHP网站程序中开启Gzip压缩的两种方法
  10. 小沙的长路(图论+数学)
  11. php+select为空,SELECT时候,如何处理某字段空值?
  12. tomcat 是什么
  13. 《objective-c程序设计》学习笔记
  14. tableau可视化图表及仪表板设计
  15. 港股通不得不了解的汇率问题
  16. php三种流程结构,3.流程控制结构
  17. linux下的IO重定向与管道相关的知识简析
  18. C++希尔密码的实现以及运用
  19. 系统自带扑克牌资源动态链接库cards.dll逆向分析笔记
  20. 华为路由 鸿蒙,华为鸿蒙系统适配流程介绍

热门文章

  1. c语言源码转流程图工具在线,c语言源码转流程图工具_应用|1+1构造地表最强流程图工具...
  2. Coldfusion 2016出现The error occurred in scheduletasks.cfm: line 188
  3. 9个value_counts()的小技巧,提高Pandas 改进数据分析效率
  4. AutoHotkey制作自己的Launchy --- 我的运行窗口
  5. ArcGIS制作“马赛克”渔网图
  6. Java jvm 内存回收机制
  7. 和风SDK查询城市ID(保姆级教程)
  8. 如何把token保存到本地
  9. redis和mysql的衔接操作(redis加速mysql)
  10. Virtual Box 的Bridge模式下DHCP方式和静态IP设定方式的转换