一、理论原理篇
-
LVM(Logic Volume Manager)逻辑卷管理,是linux环境下对磁盘分区进行管理的一种机制。
-
LVM是建立在磁盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
1.lvm术语介绍
-
物理存储介质(the physical media):硬盘,是存储系统最低层的存储单元。
-
物理卷(physical Volume, PV):物理卷是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备,是LVM的基本存储逻辑块,但和物理存储介质比较的话,却包含有与LVM相关的管理参数。
-
卷组(Volume Group, VG):LVM的卷组类似于非LVM系统的物理硬盘,由物理卷组成。可以在卷组上创建一个或者多个lvm分区(逻辑卷)。
-
逻辑卷(Logical Volume, LV):类似于非LVM系统中的硬盘分区,在逻辑卷上可以建立文件系统。
-
PE(physical extent, PE):每一个物理卷被划分为称为PE的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元,PE的大小是可以配置的,默认为4MB。
2.lvm原理图示
3.各命令含义汇总
1)物理卷:
pvcreate
pvremove
pvmove
resize2fs
2)卷组:
vgcreate
vgextend
vgreduce
3)逻辑卷:
lvcreate
lvextend
lvreduce
二、实践篇
为了即时看到改变,所以应该使用监控方方便查看,监控的命令如下:
[root@localhost ~]
> vgs;echo ====================;\
> lvs;echo ====================;\
> df -h /westos "
1、lvm建立
建立lvm之前,应该先用fdisk划分物理分区,并且修改标签为lvm,划分物理分区的具体方法在上一篇文章里面详细介绍。下面直接从创建物理卷开始
[root@localhost ~]
WARNING: xfs signature detected on /dev/vdb1 at offset 0. Wipe it? [y/n] y
Wiping xfs signature on /dev/vdb1.
Physical volume "/dev/vdb1" successfully created
[root@localhost ~]
Volume group "vg0" successfully created
[root@localhost ~]
WARNING: xfs signature detected on /dev/vg0/lv0 at offset 0. Wipe it? [y/n] y
Wiping xfs signature on /dev/vg0/lv0.
Logical volume "lv0" created
[root@localhost ~]
meta-data=/dev/vg0/lv0 isize=256 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]
因为之前运行了监控命令,可以得到完成逻辑卷建立的结果如截图:
2.lvm的扩展
从原理图中可以看出来,lv从物理卷组vg中取出,所以如果对lv进行扩展的话,会出现两种情况: 1. vg中有充足的容量进行扩展,此时可以直接用命令来进行扩展 2. vg中容量不足以支持扩展的大小,那么此时就必须通过新建物理分区,先对vg进行扩展,再扩展lv 具体做法如下:
1)vg中有充足的容量
[root@localhost ~]
Extending logical volume lv0 to 160.00 MiB
Logical volume lv0 successfully resized
[root@localhost ~]
meta-data=/dev/mapper/vg0-lv0 isize=256 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 25600 to 40960
2)vg中容量不足
由上一步的截图可以看出,若想将lv0的容量扩展到240M的话,vg0的容量不足
[root@localhost ~]
Extending logical volume lv0 to 240.00 MiB
Insufficient free space: 20 extents needed, but only 9 available
所以此时应该先新建一个物理分区,把新建的物理分区加入到vg0里面,才能继续进行扩展
[root@localhost ~]
[root@localhost ~]
Physical volume "/dev/vdb2" successfully created
Volume group "vg0" successfully extended
[root@localhost ~]
Rounding size to boundary between physical extents: 252.00 MiB
Extending logical volume lv0 to 252.00 MiB
Logical volume lv0 successfully resized
[root@localhost ~]
meta-data=/dev/mapper/vg0-lv0 isize=256 agcount=7, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=40960, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 40960 to 64512
mkfs.ext4 /dev/vg0/lv0
扩展:
lvextend -L 400M /dev/vg0/lv0
resize2fs /dev/vg0/lv0
运行之后监控的结果如下图:
3.lvm的缩减
注意:lvm不能进行在线缩减,必须先卸载才能缩减
(1)对设备的缩减
[root@localhost ~]
[root@localhost ~]
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg0/lv0 to 102400 (1k) blocks.
The filesystem on /dev/vg0/lv0 is now 102400 blocks long.
/dev/vg0/lv0
[root@localhost ~]
WARNING: Reducing active logical volume to 100.00 MiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv0? [y/n]: Y
Reducing logical volume lv0 to 100.00 MiB
Logical volume lv0 successfully resized
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv0 vg0 -wi-a----- 100.00m
[root@localhost ~]# mount /dev/vg0/lv0 /westos/
监控结果可以看出,此时lv0已经缩减到100M
(2)对卷组的缩减
若要对没有数据的卷组进行移除,缩减,可以直接进行移除,但是若要对有数据的卷组进行移除,就必须先把数据迁移到其他卷组上,这里只示范对有数据的卷组进行移除的过程:
[root@localhost ~]
/dev/vdb1: Moved: 7.9%
/dev/vdb1: Moved: 65.8%
/dev/vdb1: Moved: 100.0%
[root@localhost ~]
Removed "/dev/vdb1" from volume group "vg0"
[root@localhost ~]
Labels on physical volume "/dev/vdb1" successfully wiped
监控结果如下图,可以看出vdb1已经成功移除,同样的步骤,也可以移除vdb2
4、lvm快照使用
lvcreate -L 100M -n lv0backup -s /dev/vg0/lv0
通过已经存在的/dev/vg0/lv0建立一个大小为100M,名字为lv0backup的lvm快照 快照可以直接挂载。不需要进行格式化等动作,使用快照的时候读取的是lv0,和虚拟机快照相同,当快照里面的东西被误删除之后,可以先取消挂载,lvremove损坏的快照,重新进行快照
[root@localhost ~]
[root@localhost westos]
[root@localhost westos]
[root@localhost ~]
Logical volume "lv0backup" created
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost westos]
file1 file2 file3 file4 file5
监控结果如图:可以看出此时挂载的是快照lv0backup
5、lvm的删除
lvm的删除应注意和lvm建立的顺序刚好相反一步步删除
[root@localhost ~]
[root@localhost ~]
Do you really want to remove active logical volume lv0backup? [y/n]: y
Logical volume "lv0backup" successfully removed
Do you really want to remove active logical volume lv0? [y/n]: y
Logical volume "lv0" successfully removed
[root@localhost ~]# lvremove /dev/vg0/lv1
Do you really want to remove active logical volume lv1? [y/n]: y
Logical volume "lv1" successfully removed
[root@localhost ~]# vgremove vg0
Volume group "vg0" successfully removed
[root@localhost ~]# pvremove /dev/vdb3
Labels on physical volume "/dev/vdb3" successfully wiped
由监控结果可以看出都已经删除,删除完后开始删除硬盘分区即可:
最终结果为:
[root@localhost ~]
major minor
253 0 10485760 vda
253 1 10484142 vda1
253 16 10485760 vdb
当设备处于闲置状态的时候,容易出现没有按照顺序一步步删除,而是直接删除硬盘分区,但是手动同步分区表的话会出现报错 解决方法: vgreduce vg0 --removemissing
本文由 CentOS中文站 - 专注Linux技术 作者:centos 发表,其版权均为 CentOS中文站 - 专注Linux技术 所有,文章内容系作者个人观点,不代表 CentOS中文站 - 专注Linux技术 对观点赞同或支持。如需转载,请注明文章来源。