Linux LVM磁盘管理

Linux LVM磁盘管理

概述

LVM(Logical Volume Manager,逻辑卷管理器)是一种可用在 Linux 内核的逻辑分卷管理器,可用于管理磁盘驱动器或其他类似的大容量存储设备

在传统 Linux 环境下,磁盘分区是直接与文件目录(filesystem)直接相互挂载的。倘若用户需要对文件目录的容量进行伸缩的话,通常做法有两种:一是新增磁盘分区,二是对原有的磁盘分区进行划分。无论是上述哪一种做法,都会对原有的磁盘分区产生影响,亦或某些文件损坏,亦或磁盘损坏。

为了更加方便用户对磁盘分区进行操作,LVM 为计算机提供了更高层次的磁盘存储方式。原理如下所示:LVM 将一个或多个磁盘的分区在逻辑上集合,相当于一个整体的、容量大的磁盘,以便用来使用。当磁盘分区空间不足时,可以继续将其他的磁盘的分区加入其中。

与传统的磁盘管理相比,LVM 更富有弹性:

  • 使用卷组(VG),使众多硬盘空间看起来像一个大硬盘
  • 使用逻辑卷(LV),可以创建跨越众多硬盘空间的分区
  • 可以创建小的逻辑卷(LV),在空间不足时再动态调整它的大小
  • 在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间
  • 可以在线(online)对逻辑卷(LV)和卷组(VG)进行创建、删除、调整大小等操作。LVM上的文件系统也需要重新调整大小,某些文件系统也支持这样的在线操作
  • 无需重新启动服务,就可以将服务中用到的逻辑卷(LV)在线(online)/动态(live)迁移至别的硬盘上
  • 允许创建快照,可以保存文件系统的备份,同时使服务的下线时间(downtime)降低到最小

相关于 LVM 的几个重要名词:
  • Physical Volume,PV, 物理卷

    可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。物理卷包括一个特殊的 header,其余部分被切割为一块块物理区域(physical extends)

  • Volume Group,VG,卷组

    将一组物理卷收集为一个管理单元。卷组可以视为一个由若干个物理卷组合而成的“磁盘”。卷组同时也能够包含若干个逻辑卷(logical volume)

  • Logical Volume,LV,逻辑卷

    一种特殊的虚拟分区,从属于卷组,可以由若干块物理区域构成。

  • Physical Extent,PE,物理区域

    硬盘可供指派给逻辑卷的最小单位(通常为4MB)


基本操作

Physical Volume,物理卷相关操作

1
2
3
4
5
6
7
8
9
10
# 维护命令
# pvscan # 在系统中的所有磁盘中搜索已存在的物理卷
# pvdisplay [<物理卷>] # 显示 全部/指定 物理卷的属性信息
# pvs # pvdisplay 简约版,仅能得到物理卷的概要信息
# pvchange [-x {y|n}] [-u] # 用于指定物理卷的 PE 是否允许分配或重新生成物理卷的 UUID
# pvmove <源物理卷> [<目的物理卷>] # 将同一 VG 下的 PV 内容进行迁移,若不指定目的物理卷则由 LVM 决定

# 创建与删除命令
# pvcreate <设备名> # 用于在磁盘或磁盘分区上创建物理卷初始化信息,以便对该物理卷进行操作
# pvremove <物理卷> [-d][-f][-y] # 删除物理卷

Volume Group,卷组相关操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 维护命令
# vgscan # 在系统中搜索所有已存在的 vg
# vgck <卷组> # 用于检查卷组中卷组描述区域信息的一致性
# vgdisplay [<卷组>] # 显示 全部/指定 卷组的属性信息
# vgrename <旧卷组名> <新卷组名> # 卷组重命名
# vgchange [-a {y|n}] [-x {y|n}] # 用于指定卷组是否允许分配或者卷组容量是否可伸缩

# 创建与删除命令
# vgcreate <卷组> # 用于创建 LVM 卷组
# vgremove <卷组> # 用于删除 LVM 卷组

# 扩充与缩小命令
# vgextend <卷组> <物理卷> # 向卷组中添加物理卷来增加卷组的容量
# vgreduce <卷组> <物理卷> # 向卷组中删除物理卷来减小卷组的容量

# 合并与拆分命令
# vgmerge <目的卷组> <源卷组> # 将源卷组合并至目的卷组,要求两个卷组的物理区域大小相等且源卷组是非活动的(inactive)
# vgsplit <源卷组> <目的卷组> <源物理卷> # 将源卷组的源物理卷拆分到目的卷组
# vgexport <卷组> # 用于输出卷组,将非活动的(inactive)的卷组导出,可用于其他系统中使用
# vgimport <卷组> <物理卷> # 用于输入卷组

# 备份与恢复命令
# vgcfgbackup <卷组> # 备份卷组的元信息至 /etc/lvml/backup 目录中
# vgcfgrestore <卷组> # 从备份文件中恢复指定卷组

Logical Volume,逻辑卷相关操作

1
2
3
4
5
6
7
8
9
10
11
12
13
# 维护命令
# lvscan # 在系统中搜索所有已存在的 lv
# lvdisplay [<逻辑卷>] # 显示 全部/指定 逻辑卷的属性信息
# lvrename {<卷组> <旧逻辑卷名> <新逻辑卷名> | <旧逻辑卷路径名> <新逻辑卷路径名>}
# lvchange # 更改逻辑卷的属性

# 创建与删除命令
# lvcreate <逻辑卷> <卷组> # 用于创建卷组中的逻辑卷
# lvremove <逻辑卷> <卷组> # 用于删除卷组中的逻辑卷

# 扩充与缩小命令
# lvextend -L +<增量> <逻辑卷> # 根据增量对逻辑卷容量进行扩充
# lvreduce -L -<减量> <逻辑卷> # 根据减量对逻辑卷容量进行缩小


参考资料:

[1] https://jingyan.baidu.com/article/fedf0737772d2835ac897790.html

[2] https://wiki.archlinux.org/index.php/LVM_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#.E5.88.9B.E5.BB.BA.E7.89.A9.E7.90.86.E5.8D.B7.EF.BC.88PV.EF.BC.89

[3] http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html

[4] http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/22/3093405.html