Lvm是Logical Volume Manager的简写,是Linux系统下对磁盘分区进行管理的一种机制。Lvm将几个磁盘分区或disk通过软件组合成一个大的磁盘VG,然后再通过将这个大的VG分割成若干个逻辑块(LV),最后对相应的逻辑块进行格式化挂载使用。Lvm最大的特点是可弹性调整文件系统的容量,通过调整每个逻辑块(LV)的容量,可轻松在线扩大或缩小某个对应的文件系统的空间,方便快捷。
一、Lvm概念
要学习lvm,必然离不开几个概念,PV、VG、LV等。它们是lvm管理磁盘的基础,lvm任何的管理操作基本都离不开这几个概念。
1、PE
我们知道Linux文件系统中数据存储的最小单位是block,而PE的作用就像block一样,是Lvm数据存储的最小单位,默认是4MB ,一个卷组VG最多能有65534个PE。
2、物理卷PV
物理卷PV可以是硬盘分区,也可以是硬盘本身或回环文件,是Lvm的基本存储逻辑块。物理卷包括一个特殊的header,其余部分被分割为一块块物理区域。
3、卷组VG
将一个物理卷或多个物理卷组合成为一个管理单元,该管理单元就是卷组。卷组就相当于正常的文件系统中的硬盘,可在上面创建一个或多个Lvm分区。
4、逻辑卷LV
逻辑卷就像正常的硬盘分区,用户可以在逻辑卷上格式化创建文件系统。
二、lvm的相关管理命令
lvm应用包括创建管理物理卷、卷组、逻辑卷,对逻辑卷的扩展及缩减空间大小等等。
1、物理卷的管理
与物理卷PV的相关的一些管理命令有:pvcreate,pvdisplay,pvs,pvscan,pvremove,pvmove
pvcreate:将硬盘分区创建成为PV
使用格式:pvcreate [options] [device1] [device2]...
其常用选项包括:
-f:强制创建物理卷,不需要用户确认;
-u:指定PV的UUID;pvscan:搜索目前系统中任何具有PV的数据;
使用格式:pvscan [options]
常用选项:
-n:显示没有关联卷组的物理卷;
-e:仅显示有关联卷组的物理卷;
-u:显示物理卷的UUID;
-s:以短格式显示;pvdisplay:显示出目前系统上得物理卷状态;
使用格式:pvdisplay [options] [device]
常用选项:
-s:以短格式显示;
-m:显示PV与LV、LE的关联情况;
-C:以列表的形式显示;pvremove:移除物理卷,把对应磁盘分区的物理卷PV属性删除;
使用格式:pvremove [options] [device]
选项:
-d:调试模式,显示删除的过程;pvmove:将一个物理卷的数据转移到其他物理卷上,根据数据量的大小,这操作有可能会占用大量的时间,并且降低逻辑卷的性能,建议在空闲时间操作;
2、卷组的管理
卷组的管理命令包括:vgcreate,vgdisplay,vgs,vgscan,vgremove
-
vgcreate:创建卷组VG
命令格式:vgcreate [options] VG_NAME [device1] [device2]...
常用选项:
-l:卷组上允许创建的最大逻辑卷数量;
-p:卷组上允许添加的最大物理卷数;
-s PESIZE:设置卷组上的物理卷PE大小,PE在物理卷加入到卷组时已经设置好。 - vgscan:搜索系统上是否存在VG。
-
vgdisplay:显示目前系统上的VG状态;
命令格式:vgdisplay [options] [device]
常用选项:
-s:以短格式显示;
-A:只显示活动卷组的属性;
-C:以列表的形式显示; -
vgextend:在VG内添加额外的PV;
命令格式:vgextend VG_NAME Device1 Device2 ...
-
vgreduce:在VG内移除PV;
命令格式:vgreduce VG_NAME Device1 Device2 ...
-
vgchange:用于修改卷组的属性,经常被用来设置卷组是处于活动状态或非活动状态。处于活动状态的卷组无法被删除,必须使用vgchange命令将卷组设置为非活动状态后才能删除。
命令格式:vgchange [options] VG_NAME
常用选项:
-a {y|n}:将VG设置为激活或非激活状态;
-l,--logicalvolume:设置逻辑卷的最大数量; -
vgremove:移除卷组;
命令格式:vgremove VGNAME
3、逻辑卷的管理
与LV相关的命令包括:lvcreate、lvscan、lvdisplay、lvextend、lvreduce、lvremove、lvresize。
-
lvcreate:创建逻辑卷
命令格式:lvcreate [options] VG_NAME | -s orginal_LV_NAME
常用选项:
-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节;
-n:设置逻辑卷的命令;
-s:按照给定的逻辑卷的名称或路径,创建其对应的快照卷; - lvscan:扫描系统中的逻辑卷;
- lvdisplay:显示逻辑卷的相关信息;
-
lvextend:增加逻辑卷空间;
命令格式:lvextend [optioins] [Lv_Name]
常用命令:
-L [+]SIZE[kKmMgGtT]:指定扩展后的逻辑卷大小; - lvreduce:缩减逻辑卷空间;
- lvremove:删除指定逻辑卷;
- lvresize:调整LVM逻辑卷的空间大小,可以增大空间和缩小空间。使用lvresize命令调整逻辑卷空间大小和缩小空间时需要谨慎,因为它有可能导致数据丢失。
注意:所有的逻辑卷在创建完成后,必须对其进行格式化挂载才能使用。
三、LVM的基本应用
1、创建一个10G的卷组,取名给myvg,PE大小为16MB
[root@localhost ~]# fdisk -l /dev/sdd
磁盘 /dev/sdd:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x2a039123
设备 Boot Start End Blocks Id System
/dev/sdd1 2048 10487807 5242880 8e Linux LVM
/dev/sdd2 10487808 20973567 5242880 8e Linux LVM
/dev/sdd3 20973568 31459327 5242880 8e Linux LVM
/dev/sdd4 31459328 41943039 5241856 8e Linux LVM
[root@localhost ~]# pvcreate /dev/sdd{1,2}
Physical volume "/dev/sdd1" successfully created
Physical volume "/dev/sdd2" successfully created
[root@localhost ~]# vgcreate -s 16M myvg /dev/sdd{1,2}
Volume group "myvg" successfully created
[root@localhost ~]# vgdisplay myvg
--- Volume group ---
VG Name myvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 9.97 GiB
PE Size 16.00 MiB
Total PE 638
Alloc PE / Size 0 / 0
Free PE / Size 638 / 9.97 GiB
VG UUID RpVYYx-SsPF-2h7l-9hlW-FXMf-ti5T-iCytfw
2、创建一个逻辑卷,取名为mylv,大小为5G。
[root@localhost ~]# lvcreate -L 5G -n mylv myvg
Logical volume "mylv" created.
3、为卷组myvg新增一个分区,扩展其大小为15G;
[root@localhost ~]# pvcreate /dev/sdd{3,4}
Physical volume "/dev/sdd3" successfully created.
Physical volume "/dev/sdd4" successfully created.
[root@localhost ~]# vgextend myvg /dev/sdd3
Volume group "myvg" successfully extended
[root@localhost ~]# vgdisplay myvg
--- Volume group ---
VG Name myvg
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 14.95 GiB
PE Size 16.00 MiB
Total PE 957
Alloc PE / Size 320 / 5.00 GiB
Free PE / Size 637 / 9.95 GiB
VG UUID RpVYYx-SsPF-2h7l-9hlW-FXMf-ti5T-iCytfw
4、在格式化挂载逻辑卷mylv之后,尝试扩展逻辑卷mylv大小为10G;
[root@localhost ~]# df -lh
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 18G 4.8G 13G 28% /
.....
/dev/mapper/myvg-mylv 4.8G 66M 4.5G 2% /mydata
[root@localhost ~]# umount /mydata
[root@localhost ~]# lvextend -L +5G /dev/myvg/mylv
Size of logical volume myvg/mylv changed from 5.00 GiB (320 extents) to 10.00 GiB (640 extents).
Logical volume myvg/mylv successfully resized.
[root@localhost ~]# resize2fs /dev/myvg/mylv
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv to 2621440 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 2621440 blocks long.
[root@localhost ~]# lvdisplay /dev/myvg/mylv
--- Logical volume ---
LV Path /dev/myvg/mylv
LV Name mylv
VG Name myvg
LV UUID LUVw2b-hxTp-nMWh-swgU-n62l-hSL3-QVUoEY
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2018-03-08 20:48:31 +0800
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 640
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:6
5、创建逻辑卷mylv的快照。
使用命令lvcreate创建快照,其格式为:lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name orginal_lv_name
[root@localhost ~]# mount /dev/myvg/mylv /mydata/
[root@localhost ~]# lvcreate -L 10G -s -n mysnap /dev/myvg/mylv
Using default stripesize 64.00 KiB.
Logical volume "mysnap" created.
[root@localhost ~]# mount /dev/myvg/mysnap /snap/
此时对比 /mydate 和/mysnap 目录内的内容,会发现一样。
6、使用快照备份对应的逻辑卷内容,备份完成会后,删除快照;
[root@localhost ~]# tar Jcf snaptest.tar.xz /snap/*
tar: 从成员名中删除开头的“/”
[root@localhost ~]# ll snaptest.tar.xz
-rw-r--r--. 1 root root 7820112 3月 8 21:11 snaptest.tar.xz
[root@localhost ~]# umount /snap/
[root@localhost ~]# lvremove /dev/myvg/mysnap
Do you really want to remove active logical volume myvg/mysnap? [y/n]: y
Logical volume "mysnap" successfully removed
7、缩减逻辑卷mylv的大小为6G;
root@localhost ~]# umount /dev/myvg/mylv
[root@localhost ~]# e2fsck -f /dev/myvg/mylv
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 3A: Optimizing directories
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/myvg/mylv: ***** 文件系统已修改 *****
/dev/myvg/mylv: 3722/655360 files (0.1% non-contiguous), 91436/2621440 blocks
[root@localhost ~]# resize2fs /dev/myvg/mylv 6G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv to 1572864 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 1572864 blocks long.
[root@localhost ~]# lvreduce -L 6G /dev/myvg/mylv
WARNING: Reducing active logical volume to 6.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv? [y/n]: y
Size of logical volume myvg/mylv changed from 10.00 GiB (640 extents) to 6.00 GiB (384 extents).
Logical volume myvg/mylv successfully resized.
root@localhost ~]# mount /dev/myvg/mylv /mydata/
[root@localhost ~]# head -n 2 /mydata/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
8、删除逻辑卷,卷组及物理卷
[root@localhost ~]# umount /mydata/
[root@localhost ~]# lvremove /dev/myvg/mylv
Do you really want to remove active logical volume myvg/mylv? [y/n]: y
Logical volume "mylv" successfully removed
[root@localhost ~]# vgremove /dev/myvg
Volume group "myvg" successfully removed
[root@localhost ~]# pvremove /dev/sdd{1,2,3,4}
Labels on physical volume "/dev/sdd1" successfully wiped.
Labels on physical volume "/dev/sdd2" successfully wiped.
Labels on physical volume "/dev/sdd3" successfully wiped.
Labels on physical volume "/dev/sdd4" successfully wiped.