LVM(Logical Volume Manager)逻辑卷管理是Linux磁盘管理中的常用操作, 本文主要描述LVM的基本原理以及对LVM的扩展和缩减的基本操作.
LVM实质是过软件方式将多个物理分区或磁盘组合成为一个容量可变大小的磁盘卷组VG, 再通过对VG中的基本单位PE构成可变大小的逻辑卷LV.
LVM的优点: 通过调整VG中PV的数量来动态调整VG的容量大小, 通过调整LV中PE的数量来动态调整LV的容量大小.
LVM中组成部分:
1. 分区: 磁盘中的可用分区, 分区类型ID应在创建磁盘分区过程中指定为8e
2. PV(Physical Valume)物理卷: LVM中最底层用于构成VG的组成部分
3. VG(Volume Group)卷组: VG就是通过将PV组合起来的逻辑上的大磁盘
4. PE(Physical Extend)物理扩展块: LVM中的最小单元, 在创建VG时进行划分, 创建指定大小的LV实质就是通过一定数量的PE来构建LV
5. LV(Logic Volume)逻辑卷: 从VG中划分出指定数量的PE来构建指定大小的LV
创建LVM的过程如下图所示:
主要步骤:
1. 创建PV: 将特定类型(8e)的可用分区创建为PV
2. 创建VG: 将指定PV构成一个可变大小的卷组VG, 并指定VG中的单位PE大小
# VG创建后会产生1个实际设备文件: /dev/dm-#; 同时产生2个指向该实际设备文件的符号链接文件, 命名方式为: /dev/VG_NAME/LV_NAME 和 /dev/mapper/VG_NAME-LV_NAME
3. 创建LV: 通过已有VG中指定数量的PE来构成可变大小的逻辑卷LV
=============================================================
新建LVM
1在现有磁盘上创建2个8e类型的分区/dev/sda7和/dev/sda8, 大小分别为2G和3G, 如图所示:
2通过pvcreat将新建两个分区创建为PV, 命令如下, 结果如图所示:
# pvcreate /dev/sda{7,8}
3使用vgcreat将指定的PV设备创建VG名称为myvg, 命令如下, 结果如图所示:
# vgcreate -s 8M myvg /dev/sda7 #选项: -s #Unit: 用于指定VG中的PE块的大小和单位
4在myvg中划分出LV的名称为mylv, 大小为3G, 命令如下, 结果如图所示:
# lvcreate -L 3G -n mylv myvg #选项: -L #Unit: 指定创建LV的大小; -n LV_NAME: 指定创建LV的名称
5对mylv进行ext4格式的文件格式化, 并将其挂在至/tmp/lv目录, 结果如图所示:
至此, 在LVM上创建的文件系统就可以通过/tmp/lv/进行访问
=============================================================
对LV进行扩容
当用户感觉现有的LV分区的磁盘空间较小时, 可以通过LVM对mylv再扩充3G空间
1在现有磁盘上创建1个新的磁盘分区/dev/sda9, 类型为8e, 大小为4G, 结果如图所示:
2将/dev/sda9创建为PV, 并将/dev/sda9添加至现有的myvg中, 该步骤与创建LV中的第2,3步类似, 此处就不赘述, 结果如图所示
3使用lvextend命令对当前mylv进行扩容至大小为6G, 命令如下, 结果如图所示:
# lvextend -L +3G /dev/myvg/mylv #选项: -L [+]#Unit: 指定扩容空间, 使用+时表示#为变量值, 不使用+时表示#为目标值, Unit用于指定单位
4相对mylv的挂载点/tmp/mylv进行查看发现目录大小没有改变, 因为此时文件系统没有变化, 需要使用resize2fs来重新规划文件系统边界, 命令如下, 结果如图所示:
# resize2fs /dev/myvg/mylv #使用resize2fs命令不指定分区调整后的大小时, 会使用全部分区大小
至此, LV扩展已经完成, 通过显示扩容后的文件系统大小为6G
注: 对LV进行扩容时, 不需要卸载文件系统, 在文件系统挂载状态时就能够进行扩容
=============================================================
对LV进行裁剪
如果发现现有LV分区上的文件系统使用率较低, 浪费现有磁盘空间时, 可以对LV进行裁剪已达到缩减LV分区大小的目的.
对mylv进行裁剪, 会保证文件系统内已有的文件的完整性, 为此先向mylv的文件系统内复制了两个目录/bin和/sbin, 如图所示
1先将mylv卸载, 再对mylv的文件系统进行强制磁盘检查, 命令如下,
# umount /dev/myvg/mylv # e2fsck -f /dev/myvg/mylv
2使用resize2fs命令将mylv文件系统的大小缩减至1G大小, 命令如下, 结果如图所示:
# resize2fs /dev/myvg/mylv 1G #指定文件系统更改后的大小为1G
3使用lvreduce命令将mylv分区缩减至1G大小, 缩减空间被重新分配至myvg中, 命令如下, 结果如图所示:
# lvreduce -L 1G /dev/myvg/mylv
4如果要将mylv中使用的空间集中到指定物理磁盘分区上, 需要查看现有PV的使用情况, 如下图所示:
发现现在使用的全部是物理磁盘分区/dev/sda7中的空间, /dev/sda8和/dev/sda9中式空白的
5现在需要使用/dev/sda9来作为PV使用, 其他两块磁盘从PV中删除, 就需要使用pvmove来将/dev/sda7中的数据全部转移至/dev/sda9中, 命令如下, 结果如图所示:
# pvmove /dev/sda7 /dev/sda9
6再次查看可得/dev/sda7中的所有数据已经转移至/dev/sda9中
7此时使用vgreduce来将指定设备从myvg中取出, 命令如下, 结果如下所示:
# vgreduce myvg /dev/sda{7,8}
8使用pvremove将/dev/sda7和/dev/sda8从PV中删除, 命令如下, 结果如图所示:
pvremove /dev/sda{7,8}
9最后将mypv挂载至原挂载点, 如图所示:
可以看到复制的/bin和/sbin两个目录依旧存在, 说明对LV进行裁剪不影响其内部文件系统
至此, LV裁剪已经完成
注: 对LV进行裁剪时时, 需要先将文件系统卸载, 再对文件系统进行强制检查并重新修改文件系统边界, 对LVM中的磁盘分区操作时, 要保证需要移除的物理磁盘分区是空白的, 才能将其对应的PV先移出VG, 再将其本身移出PV
本文出自 “Pavel” 博客,请务必保留此出处http://pavel86.blog.51cto.com/8349178/1689134
原文地址:http://pavel86.blog.51cto.com/8349178/1689134