LVM逻辑卷管理器

为什么要使用逻辑卷?

逻辑卷管理器是Linux系统用于对硬盘分区进行管理的一种机制,为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上讲是可行的。但是却可能造成数据的丢失。LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理设备和底层架构和布局,就可以实现对硬盘分区的动态调整。

LVM的技术架构图:

举例理解:

比如小明家里想吃馒头但是面粉不够了,于是妈妈从隔壁老王家、老李家、老张家分别借来一些面粉,准备蒸馒头吃。首先需要把这些面粉( 物理卷[ PV, Physical Volume ] )揉成一个大面团( 卷组[ VG,Volume Group ] ),然后再把这个大面团分割成一个个小馒头( 逻辑卷[ LV, Logical Volume ] ),而且每个小馒头的重量必须是每勺面粉( 基本单元[ PE, Physical Extent ] )的倍数。

理论:

物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列,这都可以。卷组建立在物理卷之上,一个卷组可以包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。这就是LVM的核心理念。

  • 物理卷(PV:Physical Volume):物理卷是底层真正提供容量,存放数据的设备,它可以是整个硬盘、硬盘上的分区等。
  • 卷组(VG:Volume Group):卷组建立在物理卷之上,它由一个或多个物理卷组成。即把物理卷整合起来提供容量分配。一个LVM系统中可以只有一个卷组,也可以包含多个卷组。
  • 逻辑卷(LV:Logical Volume):逻辑卷建立在卷组之上,它是从卷组中“切出”的一块空间。它是最终用户使用的逻辑设备。逻辑卷创建之后,其大小可以伸缩。
  • 基本单元(PE:Physical Extents):具有唯一编号的PE是能被LVM寻址的最小单元。PE的大小可以指定,默认为4MB。PE的大小一旦确定将不能改变,同一个卷组中的所有的物理卷的PE的大小是一直的

部署逻辑卷

常用的LVM部署命令

功能/命令 物理卷管理 卷组管理 逻辑卷管理
扫描 pvscan vgscan lvscan
建立 pvcreate vgcreate lvcreate
显示 pvdisplay vgdisplay lvdisplay
删除 pvremove vgremove lvremove
扩展   vgextend lvextend
缩小   vgreduce lvreduce

添加两块新硬盘设备
在虚拟机中添加两块新硬盘设备的目的,是为了更好地演示LVM理念中用户无需关心底层物理硬盘设备的特性。我们先对这两块新硬盘进行创建物理卷的操作,可以将该操作简单理解成让硬盘设备支持LVM技术,或者理解成是把硬盘设备加入到LVM技术可用的硬件资源池中,然后对这两块硬盘进行卷组合并,卷组的名称可以由用户来自定义。接下来,根据需求把合并后的卷组切割出一个约为150MB的逻辑卷设备,最后把这个逻辑卷设备格式化成EXT4文件系统后挂载使用。

[root@centos7- ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 : 1024M rom
vda : 10G disk
├─vda1 : 500M part /boot
└─vda2 : .5G part
├─cl-root : 9G lvm /
└─cl-swap : 500M lvm [SWAP]
vdb : 10G disk
vdc : 10G disk

第1步:创建物理卷,让新添加的两块硬盘设备支持LVM技术。

[root@centos7- ~]# pvcreate /dev/vdb /dev/vdc
Physical volume "/dev/vdb" successfully created.
Physical volume "/dev/vdc" successfully created. [root@centos7- ~]# pvs //简单查看
PV VG Fmt Attr PSize PFree
/dev/vda2 cl lvm2 a-- .51g
/dev/vdb lvm2 --- .00g .00g
/dev/vdc lvm2 --- .00g 10.00 [root@centos7- ~]# pvdisplay /dev/vdb //查看物理卷详细信息
"/dev/vdb" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/vdb
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size
Total PE
Free PE
Allocated PE
PV UUID bUTpIc-J6Hq-LUvk-WinD-hoYk-HQkX-sNgA2W

第2步:创建卷组并将物理卷加入到卷组

[root@centos7- ~]# vgcreate vg_storage /dev/vdb /dev/vdc        //vg_storage 自定义卷组名称
Volume group "vg_storage" successfully created [root@centos7- ~]# vgdisplay
--- Volume group ---
VG Name vg_storage
System ID
Format lvm2
Metadata Areas
Metadata Sequence No
VG Access read/write
VG Status resizable
MAX LV
Cur LV
Open LV
Max PV
Cur PV
Act PV
VG Size 19.99 GiB
PE Size 4.00 MiB
Total PE
Alloc PE / Size /
Free PE / Size / 19.99 GiB
VG UUID PRDBRS-ybbD-Dwud-GPbM-XxKu-5NHA-a0BMEm
...........省略部分输出信息..........

第3步:创建一个约为150MB的逻辑卷设备
这里需要注意切割单位的问题,在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L,列如使用 —L 150M 则生成一个大小为150MB的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB,例如,使用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷。

root@centos7- ~]# lvcreate -n lv_vo -L 150M vg_storage         // -n 指定逻辑卷设备名称
Rounding up size to full physical extent 152.00 MiB
Logical volume "lv_vo" created. [root@centos7- ~]# lvdisplay
--- Logical volume ---
LV Path /dev/vg_storage/lv_vo
LV Name lv_vo
VG Name vg_storage
LV UUID dIo5Ff-pKyD-97Hw-RMs3-dQ10-9tHG-ZGh5o9
LV Write Access read/write
LV Creation host, time centos7-, -- :: +
LV Status available
# open
LV Size 152.00
MiB
Current LE
Segments
Allocation inherit
Read ahead sectors auto
- currently set to
Block device :
...........省略部分输出信息..........

第4步:将生成好的逻辑卷进行格式化,然后挂载使用
Linux系统会把LVM中的逻辑卷设备存放在/dev设备目录中(实际上是做了一个符号链接),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。

[root@centos7- ~]# ls /dev/vg_storage/lv_vo
/dev/vg_storage/lv_vo [root@centos7- ~]# mkfs.ext4 /dev/vg_storage/lv_vo
mke2fs 1.42. (-Dec-)
文件系统标签=
OS type: Linux
块大小= (log=)
分块大小= (log=)
Stride= blocks, Stripe width= blocks
inodes, blocks
blocks (5.00%) reserved for the super user
第一个数据块=
Maximum filesystem blocks=
block groups
blocks per group, fragments per group
inodes per group
Superblock backups stored on blocks:
, , , ,
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal ( blocks): 完成
Writing superblocks and filesystem accounting information: 完成 [root@centos7- ~]# mkdir /linuxlvm
[root@centos7- ~]# mount /dev/vg_storage/lv_vo /linuxlvm/

第5步:查看挂载状态,并写入到配置文件、使其永久生效

[root@centos7- ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/cl-root .1G .7G .4G % /
devtmpfs 481M 481M % /dev
tmpfs 497M 84K 497M % /dev/shm
tmpfs 497M 7.1M 490M % /run
tmpfs 497M 497M % /sys/fs/cgroup
/dev/vda1 497M 166M 332M % /boot
tmpfs 100M 16K 100M % /run/user/
tmpfs 100M 100M % /run/user/
/dev/mapper/vg_storage-lv_vo 144M 1.6M 132M % /linuxlvm
[root@centos7- ~]# echo "/dev/vg_storage/lv_vo /linuxlvm ext4 defaults 0 0" >>/etc/fstab

扩容逻辑卷

在前面的实验中,卷组是由两块硬盘设备共同组成的。用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩展前请一定要记得卸载设备和挂载点的关联。

[root@centos7- ~]# umount /linuxlvm

第1步:把上一个实验中的逻辑卷vo扩展至300MB。

[root@centos7- ~]# lvextend -L 300M /dev/vg_storage/lv_vo
Size of logical volume vg_storage/lv_vo changed from 152.00 MiB ( extents) to 300.00 MiB ( extents).
Logical volume vg_storage/lv_vo successfully resized.

第2步:检查硬盘完整性,并重置硬盘容量。

[root@centos7- ~]# e2fsck -f /dev/vg_storage/lv_vo
Pass : Checking inodes, blocks, and sizes
Pass : Checking directory structure
Pass : Checking directory connectivity
Pass : Checking reference counts
Pass : Checking group summary information
/dev/vg_storage/lv_vo: / files (0.0% non-contiguous), / blocks [root@centos7- ~]# resize2fs /dev/vg_storage/lv_vo
resize2fs 1.42. (-Dec-)
Resizing the filesystem on /dev/vg_storage/lv_vo to (1k) blocks.
The filesystem on /dev/vg_storage/lv_vo is now blocks long.

第3步:重新挂载硬盘设备并查看挂载状态。

[root@centos7- ~]# mount -a
[root@centos7- ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/cl-root .1G .7G .4G % /
devtmpfs 481M 481M % /dev
tmpfs 497M 84K 497M % /dev/shm
tmpfs 497M 7.1M 490M % /run
tmpfs 497M 497M % /sys/fs/cgroup
/dev/vda1 497M 166M 332M % /boot
tmpfs 100M 16K 100M % /run/user/
tmpfs 100M 100M % /run/user/
/dev/mapper/vg_storage-lv_vo 287M 2.1M 266M % /linuxlvm

缩小逻辑卷

相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外Linux系统规定,在对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证我们的数据安全)。在执行缩容操作前记得先把文件系统卸载掉。

[root@centos7- ~]# umount /linuxlvm/

第1步:检查文件系统的完整性

[root@centos7- ~]# e2fsck -f /dev/vg_storage/lv_vo
e2fsck 1.42. (-Dec-)
Pass : Checking inodes, blocks, and sizes
Pass : Checking directory structure
Pass : Checking directory connectivity
Pass : Checking reference counts
Pass : Checking group summary information
/dev/vg_storage/lv_vo: / files (0.0% non-contiguous), / blocks

第2步:把逻辑卷lv_vo的容量减小到120MB

[root@centos7- ~]# resize2fs /dev/vg_storage/lv_vo 120M
resize2fs 1.42. (-Dec-)
Resizing the filesystem on /dev/vg_storage/lv_vo to (1k) blocks.
The filesystem on /dev/vg_storage/lv_vo is now blocks lon [root@centos7- ~]# lvreduce -L 120M /dev/vg_storage/lv_vo
WARNING: Reducing active logical volume to 120.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg_storage/lv_vo? [y/n]: y
Size of logical volume vg_storage/lv_vo changed from 300.00 MiB ( extents) to 120.00 MiB ( extents).
Logical volume vg_storage/lv_vo successfully resized.

第3步:重新挂载文件系统并查看系统状态

[root@centos7- ~]# mount -a
[root@centos7- ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/cl-root .1G .7G .4G % /
devtmpfs 481M 481M % /dev
tmpfs 497M 84K 497M % /dev/shm
tmpfs 497M 7.1M 490M % /run
tmpfs 497M 497M % /sys/fs/cgroup
/dev/vda1 497M 166M 332M % /boot
tmpfs 100M 16K 100M % /run/user/
tmpfs 100M 100M % /run/user/
/dev/mapper/vg_storage-lv_vo 113M 1.6M 103M % /linuxlvm

逻辑卷快照

LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。

首先查看卷组的信息

[root@centos7- ~]# vgdisplay
--- Volume group ---
VG Name vg_storage
System ID
Format lvm2
Metadata Areas
Metadata Sequence No
VG Access read/write
VG Status resizable
MAX LV
Cur LV
Open LV
Max PV
Cur PV
Act PV
VG Size 19.99 GiB
PE Size 4.00 MiB
Total PE
Alloc PE / Size / 120.00 MiB
Free PE / Size / 19.88
GiB
VG UUID PRDBRS-ybbD-Dwud-GPbM-XxKu-5NHA-a0BMEm
...........省略部分输出信息..........

通过卷组的输出信息可以清晰看到,卷组中已经使用了120MB的容量,空闲容量还有19.88GB。接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件。

[root@centos7- ~]# echo "to day is good day" > /linuxlvm/today.txt

[root@centos7- ~]# ll /linuxlvm/
总用量
drwx------ root root 11月 : lost+found
-rw-r--r-- root root 11月 : today.txt

第1步:使用-s参数生成一个快照卷,使用-L参数指定切割的大小。另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作。

[root@centos7- ~]# lvcreate -L 120M -s -n SNAP  /dev/vg_storage/lv_vo
Using default stripesize 64.00 KiB.
Rounding up size to full physical extent 52.00 MiB
Logical volume "SNAP" created. [root@centos7-1 ~]# lvs
  LV    VG         Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root  cl         -wi-ao----   9.02g                                                    
  swap  cl         -wi-ao---- 500.00m                                                    
  SNAP  vg_storage swi-a-s--- 120.00m      lv_vo  0.01                                   
  lv_vo vg_storage owi-aos--- 120.00m

第2步:在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间占的用量上升了。

[root@centos7- ~]# dd if=/dev/zero of=/linuxlvm/files count= bs=100M
记录了1+ 的读入
记录了1+ 的写出
104857600字节( MB)已复制,0.680154 秒, MB/秒 [root@centos7- ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root cl -wi-ao---- .02g
swap cl -wi-ao---- 500.00m
SNAP vg_storage swi-a-s--- 120.00m lv_vo 83.69
lv_vo vg_storage owi-aos--- 120.00m

第3步:为了校验SNAP快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记得先卸载掉逻辑卷设备与目录的挂载。

[root@centos7- ~]# umount /linuxlvm

[root@centos7- ~]# lvconvert --merge /dev/vg_storage/SNAP
Merging of volume vg_storage/SNAP started.
lv_vo: Merged: 18.84%
lv_vo: Merged: 100.00%

第4步:快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的100MB的垃圾文件也被清除了。

[root@centos7- ~]# mount -a
[root@centos7- ~]# ls /linuxlvm/
lost+found today.txt

删除逻辑卷

当生产环境中想要重新部署LVM或者不再需要使用LVM时,则需要执行LVM的删除操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。

第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。

[root@centos7- ~]# umount /linuxlvm/
[root@centos7- ~]# vim /etc/fstab #
# /etc/fstab
# Created by anaconda on Mon Oct ::
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(), findfs(), mount() and/or blkid() for more info
#
/dev/mapper/cl-root / xfs defaults
UUID=07d3a8ca-89fa--837d-47ac9f7660c4 /boot xfs defaults
/dev/mapper/cl-swap swap swap defaults
/dev/vg_storage/lv_vo /linuxlvm ext4 defaults 0 0

第2步:删除逻辑卷设备,需要输入y来确认操作。

[root@centos7- ~]# lvremove /dev/vg_storage/lv_vo
Do you really want to remove active logical volume vg_storage/lv_vo? [y/n]: y
Logical volume "lv_vo" successfully removed

第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。

[root@centos7- ~]# vgremove vg_storage
Volume group "vg_storage" successfully removed

第4步:删除物理卷设备。

[root@centos7- ~]# pvremove /dev/vdb /dev/vdc
Labels on physical volume "/dev/vdb" successfully wiped.
Labels on physical volume "/dev/vdc" successfully wiped.

在上述操作执行完毕之后,再执行lvdisplay、vgdisplay、pvdisplay命令来查看LVM的信息时就不会再看到信息了(前提是上述步骤的操作是正确的)。

Linux-逻辑卷LVM的更多相关文章

  1. LINUX逻辑卷(LVM)管理与逻辑卷分区

    LINUX之逻辑卷管理与逻辑卷扩展 LVM是逻辑卷管理(Logical Volume Manager)的简称,他是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,和直接使用物理存储在管理上相 ...

  2. Linux逻辑卷管理器(LVM)

    LVM基础 通过使用Linux的逻辑卷管理器(Logical Volume Manager, LVM),用户可以在系统运行时动态调整文件系统的大小,把数据从一块硬盘重定位到另一块硬盘,也可以提高I/O ...

  3. 自学Linux Shell8.2-linux逻辑卷LVM管理

    点击返回 自学Linux命令行与Shell脚本之路 8.2-linux逻辑卷LVM管理 Linux逻辑卷管理器软件包用来通过将另外一个硬盘上的分区加入已有文件系统,动态地添加存储空间. 1. 逻辑卷L ...

  4. linux逻辑卷管理

    近期在进行linux充电,依据网络资料自己整理的资料,分享一下 ---------------------------------------------------------- Linux逻辑卷管 ...

  5. Linux逻辑卷管理器concept

    Linux逻辑卷管理concept-------------------------转载2013/10/09 通过使用Linux的逻辑卷管理器(Logical Volume Manager, LVM) ...

  6. Linux逻辑卷的拉伸和缩小

    相对于普通磁盘优势是逻辑卷可以在线动态的拉伸(不用先unmount操作),只要vg中有足够的空间即可 1:首先查看vg是否有足够的空间 [root@gechong mapper]# vgdisplay ...

  7. Linux 逻辑卷扩容

    Linux 逻辑卷扩容 关键词:pv(物理卷).vg(卷组) .lv(逻辑卷) 今天在用linux过程中,根分区容量不够了,突然想起来好久没更新博客,就来说说逻辑卷扩容的问题吧. 1.扩容前的检查 记 ...

  8. 创建逻辑卷LVM以及swap分区

    #!/bin/bash ##创建逻辑卷LVM /dev/mapper/lvm_data-data### ###default 大小为500G,但是LV一般会比500略小################ ...

  9. 逻辑卷LVM

    1.理解LVM http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html 2.创建LVM 根据“理解LVM”提供的原理思路搞 a)建立 ...

  10. linux逻辑卷管理(LVM)

    1. 逻辑卷(LVM)的原理 LVM(Logical Volume Manager)逻辑卷管理 是在物理磁盘和文件系统的之间添加一个逻辑层,通过对底层物理磁盘的封装,以逻辑卷的方式呈现给上层应用,通过 ...

随机推荐

  1. Android开发,关于如何在应用间共享SharedPreference

    开发一个应用,需要用到两个应用A和B之间共享数据的问题,这个数据是个单一的数据,所以就想用SharedPrefernce来进行保存. 使用网上的各种应用间的共享代码,B是读取A的数据,所以代码为: C ...

  2. 关于MongoDB数据库的日志解析

    MongoDB日志记录了数据库实例的健康状态.语句的执行状况.资源的消耗情况,所以日志对于分析数据库服务和性能优化很有帮助. 因此,很有必要花费一些时间来学习解析一下MongoDB的日志文件. 日志信 ...

  3. 最小生成树(Prim算法)

    Java实现Prim算法 package com.java; import java.util.*; /** * 普里姆算法—Prim算法 * 算法思路:将图中所有的顶点分为两类:树顶点(已被选入生成 ...

  4. Xml文档规则

    Xml文档规则: 名字中不能包含空格 名字不能以数字或标点符号开头 左尖括号 < 后不可以有空格 起始和结束标签的大小写必须一致(严格区分大小写) XML文件中出现的第一个元素是根元素 XML文 ...

  5. python开发规范和(configparser、random模块)

    目录结构: bin:存放程序入口,程序启动文件. conf:存放配置文件,配置文件主要是一些全局变量,路径信息等. core:程序核心文件,不涉及到业务逻辑. app:存放和系统业务相关的逻辑. db ...

  6. 面向对象_item项目

    详细见老师博客:http://www.cnblogs.com/Eva-J/articles/7351812.html#_label9 __getitem__\__setitem__\__delitem ...

  7. C#基础知识之关键字

    关键字是 C# 编译器预定义的保留字.这些关键字不能用作标识符,但是,如果您想使用这些关键字作为标识符,可以在关键字前面加上 @ 字符作为前缀.在 C# 中,有些关键字在代码的上下文中有特殊的意义,如 ...

  8. Enterprise Architect 时序图

    添加时序图 1,在类图下面新建包 添加sequence时序图 点击流程控制,可以打开流程控制设计界面 我选择的是Lifeline线,你可以选择都差不多. 点击其中一条liftline连到其他上面 双击 ...

  9. 2019年桌面Linux需要做好的7件事

    2019年桌面Linux需要做好的7件事 新的一年已经到来,这意味着又一年过去了,Linux还是没有发现自己主宰了桌面.Linux在许多方面做得非常好,在接下来的几周,我们将研究一些最适合您各种需求的 ...

  10. day23--面向对象之封装、继承、多态

    面向对象的三大特性: 封装: 在类的内部(class内部)可以由属性和方法,外部代码可以通过直接调用实例变量的方法来操作数据,这样就隐藏了内部的逻辑,但是外部还是可以直接修改实例的属性,因此当需求中存 ...