Linux LVM(Logical Volume Manager)

Background Knowledge

Logical Volumn Management

逻辑卷管理是对底层磁盘的抽象管理,可以不再限制磁盘空间大小,对于磁盘的管理更为灵活。

它将底层物理硬盘抽象起来,以逻辑卷的形式表现给上层系统,逻辑卷的大小可以动态调整,调整过程中不会丢失现有数据。新加入的硬盘也不会改变现有上层的逻辑卷。 不同系统对磁盘抽象管理系统都有类似的实现。

How a disk are used?

Physical Disk -> Partition -> Format -> Install OS

实战操作

一、LVM的工作原理与概念

  • PE(physical extend) 逻辑卷管理的基本单位,默认是4M大小。
  • PV(physical volume) 包含多个PE
  • VG(volume group) 包含多个PV
  • LV(logical volume) 从VG中拿PE

操作的目的是创建一个逻辑卷,取代原来的硬盘分区

  1. 创建PV 首先把物理硬盘条带化(处理格式化)为物理卷,实际上是物理硬盘划分成了一个个的PE 假设把硬盘400M格式化,有包括100个PE

  2. 创建卷组,VG 空间池,把多个PV装入VG, 包含多个物理卷

  3. 创建LV,逻辑卷 我们最终使用的是逻辑卷

创建好后,/dev/vgname/lvname, 这是我们要格式化的对象

每一个逻辑卷的空间可能来自不同的物理硬盘。

二. LVM 的创建

卷组是逻辑卷的空间池

  1. 将物理磁盘设备初始化为物理卷
$ pvcreate /dev/sdb /dev/sdc
  1. 创建卷组,并将PV加入卷组中,将物理卷集合起来
$ vgcreate linuxcast /dev/sdb /dev/sdc
  1. 基于卷组创建逻辑卷
$ lvcreate -n mylv -L 2G linuxcast
-n 逻辑卷名字
-L 空间为2G
linuxcast 要从linuxcast中获取空间
  1. 为创建好的逻辑卷创建文件系统
$ mkfs.ext4 /dev/linuxcast/mylv
  1. 将格式化好的逻辑卷挂载使用
$ mkdir -p /mnt/mylv
$ mount /dev/linuxcast/mylv /mnt/mylv

查看LVM

  • 查看物理卷信息
$ pvdisplay(详细)
$ pvs
  • 查看卷组信息
$ vgdisplay(详细)
$ vgs
  • 查看逻辑卷信息
$ lvdisplay(详细)
$ lvs

三、删除逻辑卷

  1. 删除LV
$ lvremove /dev/linuxcast/mylv
  1. 删除VG
$ vgremove linuxcast
  1. 删除物理卷
$ pvremove /dev/sdb

四、LVM的扩大与缩小

  1. 保证VG中有足够的空闲空间,如果不够用需要先拉升VG卷组,先到第五步,然后在回来操作第四步
$ vgdisplay
  1. 扩充逻辑卷
$ lvextend -L +1G /dev/linuxcast/mylv
  1. 查看扩充后LV的大小
$ lvdisplay
  1. 更新文件系统
$ resize2fs /dev/linuxcast/mylv
  1. 查看更新后的文件系统
$ df -h

当卷组不够用到时候,我们想卷组中增加PV(物理卷)

五、拉升一个卷组

  1. 将要添加到VG的硬盘格式化为PV
$ pvcreate /dev/sdd
  1. 将新的PV添加到指定卷组中
$ vgextend linuxcast /dev/sdd
  1. 查看扩充后的VG大小
$ vgdisplay

六、缩小一个逻辑卷(必须离线,容易出错,小心,实验失败,缩小小心)

假设当前的逻辑卷大小为500M

  1. 卸载已经挂载的逻辑卷
$ umount /dev/linuxcast/mylv
  1. 缩小文件系统(会提示需要运行fsck检查文件系统)
$ e2fsck -f /dev/linuxcast/mylv

目标,最后的大小为100M

$ resize2fs /dev/linuxcast/mylv 100M
  1. 缩小LV(这里需要需要缩小400M)
$ lvreduce -L -400M /dev/linuxcast/mylv
  1. 查看缩小后的LV
$ vgdisplay
  1. 挂载
$ mount /dev/linuxcast/mylv /mnt/mylv

七、缩小卷组(比如要从系统中抽走一块硬盘)

移除一个PV(物理卷,一块硬盘)

  1. 将一个PV从指定卷组中移除

    $ vgreduce linuxcast /dev/sdd
    
  2. 查看缩小后的卷组大小

    $ vgdisplay
    

视频教程:

http://study.163.com/course/courseLearn.htm?courseId=232008#/learn/video?lessonId=340074&courseId=232008

脚本:

https://github.com/netqyq/lvm-manage