​有时候我们会面临这样一个窘境:分区内的数据快速增长,分区剩余空间几乎不够用了。这个时候你可能得想办法找个更大的硬盘或者分区,把数据挪过去,费时费力。有时候分区一开始分大了,很多空间又浪费了。

是否有这样一种机制,能够允许分区空间能够进行弹性伸缩呢?

这就是我们本节要介绍的主角:LVM(Logical Volume Manager)

1、LVM基础概念

如上所述,LVM可以理解为一种空间可以弹性调整的分区。在学习LVM之前,需要介绍一些与LVM有关的专有名词。

PV:物理卷

制作LVM的第一步,就是制作LVM的物理卷(PV)。LVM的物理卷可以是分区、磁盘等块设备文件。物理卷中最小的存储单位称为PE。PE默认的大小是4M

VG:卷组

一个或多个PV做成一个组,这就是卷组(VG)。逻辑卷的空间都是从卷组分配而来的。

对于LVM1来说一个VG最多包含65534个PE,也就是说,默认的VG最大容量为4M*65534约为256G,如果你想要更大,那么设置PV的时候,将PE的大小调大即可。(PE大小重新调整需要重建VG)

LVM2(目前centos7默认的版本),VG没有了PE数量的限制。

LV:逻辑卷

从VG中取出一定的空间,进行LVM格式的分区,就构成了逻辑卷。同一个LV可能使用了多个PV中的空间

PV、VG、LV之间的关系:

分区或者硬盘被制作成PV,PV的最小存储单元是PE。将多个零散的PV整合起来构成VG,再从VG上划空间给LV。当LV想扩容的时候,就从VG里面再取一些PE过来。想缩容的时候,就将LV里的PE还一部分给VG。(尽量不要去尝试缩容,可能会导致数据丢失或文件系统损坏)

这三者的关系如下图:

2、LVM创建

我在虚拟机上加了两块虚拟硬盘,供此次实验使用:

[root@localhost ~]# lsblk

NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda               8:0    0  20G  0 disk

├─sda1            8:1    0   1G  0 part /boot

└─sda2            8:2    0  19G  0 part

├─centos-root253:0    0   17G  0lvm  /

└─centos-swap253:1    0    2G  0lvm  [SWAP]

sdb               8:16   0  20G  0 disk

sdc               8:32   0  20G  0 disk

sr0              11:0    1 906M  0 rom

[root@localhost ~]#

与pv相关的命令

pvcreate DEVICE:将分区或磁盘创建成PV

pvscan:查找当前系统上的PV

pvdisplay:显示目前系统上PV的状态。

pvremove:移除PV,使分区不再具有PV属性

举例:

sdb裸盘制成PV,sdc分出一个5G大小的分区制成PV,查看PV相关信息。

首先对sdc进行分区

[root@localhost ~]# fdisk /dev/sdc

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, untilyou decide to write them.

Be careful before using the write command.

Device does not contain a recognizedpartition table

Building a new DOS disklabel with diskidentifier 0xa8ca5dfd.

Command (m for help): n

Partition type:

p   primary (0 primary, 0extended, 4 free)

e   extended

Select (default p): p

Partition number (1-4, default 1):

First sector (2048-41943039, default 2048):

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-41943039,default 41943039): +5G

Partition 1 of type Linux and of size 5 GiBis set

Command (m for help): p

Disk /dev/sdc: 21.5 GB, 21474836480 bytes,41943040 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes /512 bytes

I/O size (minimum/optimal): 512 bytes / 512bytes

Disk label type: dos

Disk identifier: 0xa8ca5dfd

Device Boot      Start         End      Blocks  Id  System

/dev/sdc1            2048    10487807    5242880   83  Linux

此处最好把ID改为8e,便于其他管理员了解其用途。(不改不会影响使用,但它就像代码的注释,我们作为创建者,应该尽量对后来的维护者友好一点)

Command (m for help): t

Selected partition 1

Hex code (type L to list all codes): 8e

Changed type of partition 'Linux' to 'LinuxLVM'

Command (m for help): p

Disk /dev/sdc: 21.5 GB, 21474836480 bytes,41943040 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes /512 bytes

I/O size (minimum/optimal): 512 bytes / 512bytes

Disk label type: dos

Disk identifier: 0xa8ca5dfd

Device Boot      Start         End      Blocks  Id  System

/dev/sdc1            2048    10487807    5242880   8e  Linux LVM

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

[root@localhost ~]#

确认新建分区是否已经被内核识别

[root@localhost ~]# cat /proc/partitions | grep sdc1

8       33    5242880 sdc1

[root@localhost ~]#

创建PV

[root@localhost ~]# pvcreate /dev/sdb

Physical volume "/dev/sdb" successfully created.

[root@localhost ~]# pvcreate /dev/sdc1

Physical volume "/dev/sdc1" successfully created.

[root@localhost ~]#

查看PV相关信息

[root@localhost ~]# pvscan

PV/dev/sda2   VG centos          lvm2 [<19.00 GiB / 0    free]

PV/dev/sdc1                      lvm2 [5.00GiB]

PV/dev/sdb                       lvm2[20.00 GiB]

Total: 3 [<44.00 GiB] / in use: 1 [<19.00 GiB] / in no VG: 2[25.00 GiB]

[root@localhost ~]# pvdisplay

---Physical volume ---

PVName               /dev/sda2

VGName               centos

PVSize               <19.00 GiB / notusable 3.00 MiB

Allocatable           yes (butfull)

PESize               4.00 MiB

Total PE              4863

Free PE               0

Allocated PE          4863

PVUUID              KmbaCs-HXsh-k66M-jnw1-bW4r-MFe8-KPI3Go

"/dev/sdc1" is a new physical volume of "5.00 GiB"

---NEW Physical volume ---

PVName               /dev/sdc1

VGName

PVSize               5.00 GiB

Allocatable           NO

PESize               0

Total PE              0

Free PE               0

Allocated PE          0

PVUUID              Jbdlqs-6mDm-tdxO-yTD0-YUk6-doN9-PCd0YK

"/dev/sdb" is a new physical volume of "20.00 GiB"

---NEW Physical volume ---

PVName               /dev/sdb

VGName

PVSize               20.00 GiB

Allocatable           NO

PESize               0

Total PE              0

Free PE               0

Allocated PE          0

PVUUID              pgyh4y-3XJb-Nxmn-B3iP-6W2d-vvyQ-HWiicZ

创建与管理VG

创建VG

vgcreate [options] VGname PV1 PV2 …

常见选项:

-s 指定PE大小

-t,--test 测试,并不真的创建

-v 显示详细信息

查找系统上是否有VG存在:vgscan

显示vg的详细信息:vgdisplay VGNAME

往VG里添加额外的PV:vgextend DEVICE

从VG中移除PV(谨慎使用):vgreduce DEVICE

删除VG:vgremove VGNAME

举例:

创建VG,将sdb和sdc1两个PV加入其中

[root@localhost ~]# vgcreate vgpool1/dev/sdb /dev/sdc1

Volume group "vgpool1" successfully created

[root@localhost ~]#

[root@localhost ~]# vgscan

Reading volume groups from cache.

Found volume group "centos" using metadata type lvm2

Found volume group "vgpool1" using metadata type lvm2

[root@localhost ~]# vgdisplay vgpool1

---Volume group ---

VGName               vgpool1

System ID

Format                lvm2

Metadata Areas        2

Metadata Sequence No  1

VGAccess             read/write

VGStatus             resizable

MAXLV                0

CurLV                0

Open LV               0

MaxPV                0

CurPV                2

ActPV                2

VGSize               24.99 GiB

PESize               4.00 MiB

Total PE              6398

Alloc PE / Size       0 / 0

Free  PE / Size       6398 / 24.99 GiB

VGUUID              yTpx8x-z3ic-JWY2-BPTv-T5rg-NIKr-sz4LeY

[root@localhost ~]#

可以看到我们得到了一个24.99G,名为vgpool1的VG,PE大小是4M

此时回过头去看PV会发现它也有了VG归属

[root@localhost ~]# pvdisplay /dev/sdb | grep VG

VGName               vgpool1

[root@localhost ~]#

LV相关的管理命令:

以下列出相关管理命令,按需展开说明。更详细的用法可参见man手册

lvcreate:创建LV

lvscan:查询系统上已有的LV

lvdisplay:显示LV的详细信息

lvextend:扩容LV

lvreduce:缩容LV

lvremove:删除LV

lvresize:调整LV的大小

创建LV:

lvcreate -L SIZE [LV_NAME] VGNAME

举例:

在刚刚创建的VG上创建一个12G的LV。

[root@localhost ~]# lvdisplay /dev/vgpool1 /lvol0

---Logical volume ---

LVPath                /dev/vgpool1/lvol0

LVName                lvol0

VGName                vgpool1

LVUUID                gSHOYK-qPsM-Et4R-r5lP-Fs43-waYr-TGk3yZ

LVWrite Access        read/write

LVCreation host, time localhost.localdomain, 2018-08-29 10:27:06 -0400

LVStatus              available

#open                 0

LVSize                20.00 GiB

Current LE             5120

Segments               2

Allocation             inherit

Read ahead sectors     auto

-currently set to     8192

Block device           253:2

[root@localhost ~]#

至此,LV创建完成,我们创建了一个名为lvol0的LV。对应设备文件/dev/vgpool1/lvol0,我们在其上建立文件系统并挂载之后即可使用。

[root@localhost ~]# mkdir /mnt/lvmpool0_mount

[root@localhost ~]# mkfs.xfs /dev/vgpool1/lvol0

meta-data=/dev/vgpool1/lvol0     isize=512    agcount=4, agsize=1310720 blks

=                      sectsz=512   attr=2, projid32bit=1

=                       crc=1        finobt=0, sparse=0

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

=                      sunit=0      swidth=0 blks

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

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

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

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

[root@localhost ~]# mount /dev/vgpool1/lvol0 /mnt/lvmpool0_mount/

[root@localhost ~]#

[root@localhost ~]# df -h | grep lvol0

/dev/mapper/vgpool1-lvol0   20G  33M   20G   1% /mnt/lvmpool0_mount

此时该逻辑卷就能够被使用了。

3、补充:Device Mapper

这是相对底层和复杂的原理了,与LVM的实现原理有关。幸运的是我们无需去通读源码,下面简单介绍一点点点点,免得你发现太多疑问。

VG创建完毕后,你会发现/dev下会多出一个与VG同名的目录。

创建完LV之后,你会发现该VG目录下,会多出来一个文件,这个文件其实不是设备文件,而是一个软链接,指向一个设备文件。

[root@localhost mapper]# ll /dev/vgpool1/

total 0

lrwxrwxrwx. 1 root root 7 Aug 29 23:38lvol0 -> ../dm-2

lrwxrwxrwx. 1 root root 7 Aug 29 23:38snap_lv0 -> ../dm-5

这就是Device Mapper(设备映射机制)在作祟。

系统中所有的设备映射可以到/dev/mapper目录下查看

[root@localhost mapper]# ll /dev/mapper/

total 0

lrwxrwxrwx. 1 root root       7 Aug 29 08:11 centos-root -> ../dm-0

lrwxrwxrwx. 1 root root       7 Aug 29 08:11 centos-swap -> ../dm-1

crw-------. 1 root root 10, 236 Aug 2908:11 control

lrwxrwxrwx. 1 root root       7 Aug 29 23:38 vgpool1-lvol0 ->../dm-2

lrwxrwxrwx. 1 root root       7 Aug 29 23:38 vgpool1-lvol0-real ->../dm-3

lrwxrwxrwx. 1 root root       7 Aug 29 23:38 vgpool1-snap_lv0 ->../dm-5

lrwxrwxrwx. 1 root root       7 Aug 29 23:38 vgpool1-snap_lv0-cow-> ../dm-4

/dev下的dm-1,2,3,4,5才是真正的块设备文件。

暂时了解到这种程度即可。

下一节为大家介绍LVM的扩容与快照机制

关注本公众号获取每日更新

Linux入门真经-036LVM逻辑卷原理与创建相关推荐

  1. Linux入门真经-037LVM逻辑卷扩容与快照

    本节介绍如何对LVM进行扩容. 1.扩展LV 上一节我们创建了两个PV:20G的sdb和5G的sdc1,并将他们组合成一个25G的VG:vgpool1,最后在vgpool1之上创建了一个20G的LV: ...

  2. Linux--管理LVM逻辑卷 --原理+命令双结合(LVM的概述与建立,LVM的管理命令,LVM的应用步骤,磁盘配额的详解)

    Linux--管理LVM逻辑卷 --原理+命令双结合(LVM的概述与建立,LVM的管理命令,LVM的应用步骤,磁盘配额的详解) 前言 一:LVM概述 1.1:PV(Physical Volume,物理 ...

  3. xenserver 虚拟机扩容lvm磁盘分区的方法_从零开始学Linux运维|35.LVM(逻辑卷管理)的创建...

    简单来说 LVM是建立在硬盘和分区之上的一个逻辑层,提高磁盘分区管理的灵活性 如果没有使用LVM,我们直接访问文件系统读取硬盘内容 使用了LVM我们是通过逻辑卷的东西来读取硬盘内容 使用LVM增加一个 ...

  4. Linux系统之LVM(逻辑卷管理)

    LVM相关知识 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制. LVM是建立在磁盘和分区之上的一个逻辑层,来提高磁盘分区 ...

  5. Linux command lvextend 扩展逻辑卷设备

    Linux command lvextend 扩展逻辑卷设备 tags: 设备 文章目录 Linux command lvextend 扩展逻辑卷设备 1. 简介 2. 语法 3. 常用参数 4. 安 ...

  6. linux学习之lvm2逻辑卷管理

    LVM:logical volume manger ,version2 应用场景:在系统使用过程中常常遇到磁盘不够用的情况,那么普通的方法就是添加硬盘,从新分区格式化,并挂载到原来的文件系统中,但这样 ...

  7. linux 增加lv大小,Linux增加LV(逻辑卷)容量

    Linux增加LV(逻辑卷)容量 2017-09-29-17:34:13 个人原创博客,转载请注明出处. 查看逻辑卷的相关命令: lvs vgs 命令: VG #PV #LV #SN Attr VSi ...

  8. linux用pe大小做逻辑卷,Linux常用命令之--逻辑卷

    逻辑卷管理概述 每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能 ...

  9. linux 卸载lv,Linux系统LVM(逻辑卷管理)的删除

    创建好 LVM 之后,如果经过一段时间的运行,我们发现 LVM 技术并未像有些人吹嘘的那样为系统的管理和维护工作带来很大的方便,可以手动删除它.与创建 LVM 的顺序恰好相反,在释放 LVM 所占磁盘 ...

最新文章

  1. 强化学习vs遗传算法-人工智能在模拟领域的应用
  2. 将图片序列压缩成视频
  3. ESLG.CommonUtility.NHibernateHelper的类型初始值设定项引发异常
  4. SAP ECC 6.0有哪些增强功能
  5. java web----servlet
  6. SQL Server 2008 阻止保存要求重新创建表的更改问题
  7. html笔记(四)弹性盒+响应式
  8. docker : unable to prepare context: context must be a directory
  9. ThinkPHP导出CSV、Excel
  10. Spring Boot Actuator [监控与管理]
  11. github android
  12. 高中女销售学Linux云计算4个月搞定年薪12万
  13. 绿盟安全扫描--检测到目标站点存在javascript框架库漏洞
  14. 武汉涉密信息系统集成资质介绍
  15. 记蓝墨云班课APP逆向及利用
  16. Linux-v10-01天-授课
  17. SAP 用户菜单如何更直观整洁
  18. 浅谈canvas绘画王者荣耀--雷达图
  19. VOC数据集制作 滑窗切分图片 单通道标签调色板
  20. 【数据集介绍】The Idiap Research Institute REPLAY-Mobile Database

热门文章

  1. 新工科计算机教育怎么落地?
  2. 会议主视觉_年会主视觉及延展设计内容doc
  3. 电子硬件工程师需要掌握的内容
  4. linux移动硬盘unmount报错处理
  5. 弱电线缆选型及用量计算方法
  6. Word | 最常用的100个通用快捷键
  7. 统计学真的有那么可怕吗?这儿有可以手算的效能分析
  8. 点云txt格式转pcd(Open3D支持格式)
  9. 90后创业者五年吐血总结:从零开始的秘密
  10. 【转载】高性能MySQL小结