您现在的位置是:首页 > 文章详情

linux中逻辑卷管理–lvm

日期:2017-11-08点击:784

一、理论原理篇

  • LVM(Logic Volume Manager)逻辑卷管理,是linux环境下对磁盘分区进行管理的一种机制。
  • LVM是建立在磁盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。

1.lvm术语介绍

  1. 物理存储介质(the physical media):硬盘,是存储系统最低层的存储单元。
  2. 物理卷(physical Volume, PV):物理卷是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备,是LVM的基本存储逻辑块,但和物理存储介质比较的话,却包含有与LVM相关的管理参数。
  3. 卷组(Volume Group, VG):LVM的卷组类似于非LVM系统的物理硬盘,由物理卷组成。可以在卷组上创建一个或者多个lvm分区(逻辑卷)。
  4. 逻辑卷(Logical Volume, LV):类似于非LVM系统中的硬盘分区,在逻辑卷上可以建立文件系统。
  5. PE(physical extent, PE):每一个物理卷被划分为称为PE的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元,PE的大小是可以配置的,默认为4MB。

2.lvm原理图示

3.各命令含义汇总

 1)物理卷: pvcreate #创建物理卷 pvremove #数据擦除 pvmove #把含有数据的pv上的数据挪到其他pv上面 resize2fs #扩展物理卷 2)卷组: vgcreate #创建卷组 vgextend #扩展卷组数据 vgreduce #缩减卷组数据 3)逻辑卷: lvcreate #创建逻辑卷 lvextend #扩展逻辑卷数据 lvreduce #缩减逻辑卷数据,但应注意逻辑卷不能在线缩减 

二、实践篇

为了即时看到改变,所以应该使用监控方方便查看,监控的命令如下:

 [root@localhost ~]# watch -n 1 "pvs;echo ====================;\ > vgs;echo ====================;\ > lvs;echo ====================;\ > df -h /westos "

1、lvm建立

建立lvm之前,应该先用fdisk划分物理分区,并且修改标签为lvm,划分物理分区的具体方法在上一篇文章里面详细介绍。下面直接从创建物理卷开始

 [root@localhost ~]# pvcreate /dev/vdb1 #对创建的物理分区创建物理卷 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 ~]# vgcreate vg0 /dev/vdb1 #创建物理卷组vg0 Volume group "vg0" successfully created [root@localhost ~]# lvcreate -L 100M -n lv0 vg0 #从vg0里面创建一个大小为100M名字为lv0的逻辑卷 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 ~]# mkfs.xfs /dev/vg0/lv0 #对创建的逻辑卷进行格式化 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 ~]# mount /dev/vg0/lv0 /westos #挂载逻辑卷

因为之前运行了监控命令,可以得到完成逻辑卷建立的结果如截图:

2.lvm的扩展

从原理图中可以看出来,lv从物理卷组vg中取出,所以如果对lv进行扩展的话,会出现两种情况:  1. vg中有充足的容量进行扩展,此时可以直接用命令来进行扩展  2. vg中容量不足以支持扩展的大小,那么此时就必须通过新建物理分区,先对vg进行扩展,再扩展lv  具体做法如下:

1)vg中有充足的容量

 [root@localhost ~]# lvextend -L 160M /dev/vg0/lv0 #将lv0的容量扩展到160M Extending logical volume lv0 to 160.00 MiB Logical volume lv0 successfully resized [root@localhost ~]# xfs_growfs /dev/vg0/lv0 #更新 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 ~]# lvextend -L 240M /dev/vg0/lv0 Extending logical volume lv0 to 240.00 MiB Insufficient free space: 20 extents needed, but only 9 available

所以此时应该先新建一个物理分区,把新建的物理分区加入到vg0里面,才能继续进行扩展

 [root@localhost ~]# fdisk /dev/vdb ...8e... #新建物理分区 #此时需要注意的是当新建分区保存退出的时候,会提示vdb设备更忙,所以需要运行partprobe命令手动更新分区表,使系统识别到新建的分区。 [root@localhost ~]# vgextend vg0 /dev/vdb2 Physical volume "/dev/vdb2" successfully created Volume group "vg0" successfully extended [root@localhost ~]# lvextend -L 250M /dev/vg0/lv0 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 ~]# xfs_growfs /dev/vg0/lv0 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 #而在ext4文件系统中,若想新型扩展,应注意: mkfs.ext4 /dev/vg0/lv0 扩展: lvextend -L 400M /dev/vg0/lv0 resize2fs /dev/vg0/lv0

运行之后监控的结果如下图:

3.lvm的缩减

注意:lvm不能进行在线缩减,必须先卸载才能缩减

(1)对设备的缩减

 [root@localhost ~]# umount /westos/ [root@localhost ~]# e2fsck -f [root@localhost ~]# resize2fs /dev/vg0/lv0 100M 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 ~]# lvreduce -L 100M /dev/vg0/lv0 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)对卷组的缩减

若要对没有数据的卷组进行移除,缩减,可以直接进行移除,但是若要对有数据的卷组进行移除,就必须先把数据迁移到其他卷组上,这里只示范对有数据的卷组进行移除的过程:

 #由上面的截图可以看出来/dev/vdb2不足以放下vdb1上面的容量,所以添加了一个vdb3 [root@localhost ~]# pvmove /dev/vdb1 /dev/vdb3 /dev/vdb1: Moved: 7.9% /dev/vdb1: Moved: 65.8% /dev/vdb1: Moved: 100.0% [root@localhost ~]# vgreduce vg0 /dev/vdb1 #应该先把vdb1从vg0上面取下来 Removed "/dev/vdb1" from volume group "vg0" [root@localhost ~]# pvremove /dev/vdb1 #再执行pvremove 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 ~]# cd /westos/ #此时lv0挂载在/westos目录上面 [root@localhost westos]# ls [root@localhost westos]# touch file{1..5} [root@localhost ~]# lvcreate -L 100M -n lv0backup -s /dev/vg0/lv0 Logical volume "lv0backup" created [root@localhost ~]# umount /westos/ [root@localhost ~]# mount /dev/vg0/lv0backup /westos [root@localhost ~]# cd /westos/ [root@localhost westos]# ls file1 file2 file3 file4 file5

监控结果如图:可以看出此时挂载的是快照lv0backup

这里写图片描述

5、lvm的删除

lvm的删除应注意和lvm建立的顺序刚好相反一步步删除

 [root@localhost ~]# umount /westos/ [root@localhost ~]# lvremove /dev/vg0/lv0 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 ~]# cat /proc/partitions major minor #blocks name 253 0 10485760 vda 253 1 10484142 vda1 253 16 10485760 vdb

当设备处于闲置状态的时候,容易出现没有按照顺序一步步删除,而是直接删除硬盘分区,但是手动同步分区表的话会出现报错  解决方法:  vgreduce vg0 --removemissing

原文链接:https://www.centoschina.cn/course/intermediate/9174.html
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章