LVM的主要特点就是可以将已经格式化的分区进行动态的缩减。LVM的实现方式是将几个实体的partitions或者disk通过软件组成一个大磁盘(VG),然后可以将大磁盘进行切割,切割后可得到lv(相当于分区),在lv上进行格式化挂载。vg和lv的容量都可以动态地进行缩减。下面来说一下具体过程:
1)pv阶段。
pv阶段涉及到的命令:
1、pvcreate:将分区partition建立成为pv
2、pvscan:检索目前系统中具有pv的磁盘,显示pv
3、pvdisplay:显示系统中pv的状态
4、pvremove:删除pv,该partition不在具有pv属性
5、pvmove:可以将一个分区pe块上的数据转移到另一个分区的pe块上
例:pvmove /dev/sda10 /dev/sda11
首先分割出4个分区,通过pvcreate创建pv。在划分分区时,注意要将systemID改成8e(即Linux LVM)
创建pv(pvcreate /dev/sda{10,11,12,13})
2)VG阶段。
VG阶段使用到的命令:
1、vgcreate:创建VG(-s:指定pe块大小)
例:vgcreate [-s N[mgt]] vg名称 所使用的pv
2、vgscan:简要显示系统上的vg信息
3、vgdisplay:显示vg的状态
4、vgextend:在VG上增加额外的pv(扩展VG)
5、vgreduce:在VG上移除pv(缩减VG)
6、vgchange:设定VG是否启动
7、vgremove:删除VG
将前3个pv组成一个vg,指定pe大小为8M(vgcreate -s 8m babyVG /dev/sda{10,11,12})
VG创建完成,VG可以通过添加pv或者删除pv来动态的扩大(vgextend)和缩减(vgreduce)。
上图将/dev/sda10这块pv从babyVG中移除,VG容量变为6G,再给他添两块/dev/sda10与/dev/sda13
通过pvscan查看pv信息,4块pv已经全部属于babyVG。
3)LV阶段。
LV阶段涉及到的命令:
1、lvcreate:创建lv
例:lvcreate [-l N] [-L size] [-n lvname] VGname
-l:后面指定pe数量
-L:size指定lv大小(-l与-L选择一个指定大小即可)
-n:后面接lv名称
2、lvscan:查看系统上的lv
3、lvdisplay:显示lv状态
4、lvextend:扩大lv容量
例:lvextend [-l +N] [-L +size[mg]]
-l:后面指定pe数量,+100
-L:size指定要增加的大小 +3G
5、lvreduce:缩减lv容量
例:lvreduce [-l -N] [-L -size[mg]]
-l:后面指定pe数量,-100
-L:size指定要缩减的大小 -3G
6、lvresize:重新设置lv容量
例:lvresize [-l N] [-L size[mg]]
-l:重新设置lv的pe数量
-L:重新设置lv大小
7、lvremove:删除lv
创建一个LV,进行格式化,挂载。
lv创建完毕,大小5G
这样就挂载完毕,这个文件系统就可以正常使用了。
LV的访问路径
1、/dev/VG_NAME/LV_NAME
2、/dev/mapperVG_NAME-LV_NAME
此两者均为符号链接,指向的文件是/dev/dm-N(/dev/dm-0,/dev/dm-1.....)
4)扩大LV
如果哪一天babyLV这个分区的容量不够了,可以对babyLV 这个分区进行扩容,如果VG不够大,可以先对VG进行扩容,lv的扩容可以在线进行,不需要umount文件系统。
在扩大LV时,可以使用的命令很多:
1、lvextend -l +N
2、lvextend -L +size(mg)
3、lvresize -l N
4、lvresize -L size(mg)
可以看到文件系统已经扩大至7G
5)缩小LV
如果LV过大,可以缩减LV。如果VG的使用率很低,可以将个别pv从中抽离。在缩减LV时需要注意,要先卸载文件系统,然后对文件系统进行强制检测(fsck -f),然后减小文件系统的容量(resize2fs),之后才可以减小LV的大小。
在缩减LV时,文件系统缩小的容量可能无法和LV缩小的容量完全一样,但是整个过程中LV的容量必须大于文件系统的容量,所以这里文件系统缩小之后容量可以稍稍小于LV缩小之后的容量,缩减完毕后,在resize2fs至LV的大小以充分利用空间。我这里现将文件系统resize2fs至3G,等完成之后在resize2fs至LV的大小(4G)
这时候VG利用率不高,假如我想腾出/dev/sda11用于其他地方
可以看见建立在/dev/sda11上的pv中的pe块都写有数据,不能直接将其移除,可以将/dev/sda11上写有数据的pe块都转移至/dev/sda13上,因为/dev/sda13上的pe块都未被使用。
可以看见所有的pe都已经转移至/dev/sda13,然后就可以对其进行移除了。
/dev/sda11已经从babyVG中移除。
6)快照
可以对VG上的某一个LV进行快照,快照那一刻该LV上的系统信息就会被记录下来。可以手动分配快照的大小,一般是小于等于被快照的LV大小。该LV上的某个pe上的数据发生了更改,原始的pe就会被移送至快照区域,没有发生更改的pe块则被LV上的文件系统和快照共享。当然,如果被修改的数据的总容量大于快照区的容量,快照就会失效。由于LV和快照共享很多pe块,所以快照区必须和被快照的LV在同一个VG上。来建立一个快照。
命令:lvcreate -s [-l N][-L size] -n 快照名 /dev/......(被快照的LV)
快照创建完成。
将快照进行挂载之后,快照的信息与别快照的LV一模一样(包括里面的数据)。当然,也可以将被快照的LV当做备份,把所有的测试放到快照区域中,测试完了即可将快照删除,不会影响被快照的LV中的数据。这也是个不错的选择。
原文地址:http://ljbaby.blog.51cto.com/10002758/1632988