Skip to main content

LVM

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

结构和术语介绍

物理卷 (PV)

一个可供存储 LVM 的块设备. 例如: 一块硬盘, 一个 MBR 或 GPT分区 , 一个回环文件, 一个被内核映射的设备 (例如 dm-crypt. 它包含一个特殊的 LVM 头。

卷组 (VG)

物理卷的一个组,作为存放逻辑卷的容器。 PEs are allocated from a VG for a LV.

逻辑卷 (LV)

"虚拟 / 逻辑卷" 存放在一个卷组中并由物理块组成。是一个类似于物理设备的块设备,例如,你可以直接在它上面创建一个文件系统 文件系统

物理块 (PE)

一个卷组中最小的连续区域 (默认为 4 MiB),多个物理块将被分配给一个逻辑卷。你可以把它看成物理卷的一部分,这部分可以被分配给一个逻辑卷。

逻辑结构大概像是这个样子

|----------|   |----------|
| 逻辑卷 LV | | 逻辑卷...|
|----------| |----------|
| |
\ /
|-----------|
| 卷组 VG |
|-----------|
/ \
| |
|----------| |----------|
| 物理卷 PV | | 物理卷...|
|----------| |----------|
graph TB
A(逻辑卷 LV) --> B(卷组 VG)
C(逻辑卷...) --> B
B --> D(物理卷 PV)
B --> E(物理卷...)

我们并不需要太过关心 PE

记好这三层的缩写 我们待会要把这三层定义和创建出来。

使用 LVM

在继续配置 LVM 前,必须对设备进行 分区

这里假设有两个硬盘 两个分区
并且会同时演示如何拓展空间 所以有些命令不是最佳路径

  • /dev/sdb1
  • /dev/sdc1

创建物理卷(PV)

pvcreate /dev/sdb1
pvcreate /dev/sdc1

查看创建好的物理卷

pvdisplay

创建卷组(VG)

vgcreate vg_demo /dev/sdb1

这里 vg_demo 是你的卷组名
后面的分区可以为多个 这里用一个方便后续演示扩容

查看已创建好的卷组

vgdisplay

创建逻辑卷

lvcreate -L 10G vg_demo -n lv_demo

创建一个大小为 10G,名字为 lv_demo,所属 vg_demo 的逻辑卷。

查看已创建的逻辑卷

lvdisplay

格式化并挂载逻辑卷

# 查看逻辑卷挂载位置
vgscan
# or
fdisk -l

# 格式化逻辑卷
mkfs -t ext4 /dev/vg_demo/lv_demo

# 创建待挂载目录
mkdir /demo

# 挂载
mount /dev/vg_demo/lv_demo /demo

df -hl 就可以看到已经挂载的存储空间了

接下来我们进行扩容

对 VG 增加 PV

首先 需要创建好 PV

步骤在上面 不再重复写了

vgextend vg_demo /dev/sdc1

调整 LV 大小

lvresize -l 102398 /dev/vg_demo/lv_demo

#or

lvresize -L +20G /dev/vg_demo/lv_demo

102398 是扩容后的 PE 总大小
PE 大小通过 pvdisplay 查看

调整分区大小

resize2fs /dev/vg_demo/lv_demo

创建一个3pv的vg的完整例子

# 创建pv
pvcreate /dev/sdb
pvcreate /dev/sdc
pvcreate /dev/sdd

# 检视pv
pvdisplay

# 创建vg
vgcreate vg_stor_01 /dev/sdb /dev/sdc /dev/sdd

# 检视vg
vgdisplay

# 创建lv
lvcreate -L 149G vg_stor_01 -n lv_stor_01

# 检视lv
lvdisplay

# 查看挂载点
fdisk -l

# 格式化lv
mkfs -t ext4 /dev/mapper/vg_stor_01-lv_stor_01

# 创建挂载点
mkdir /opt/s3storage

# 挂载
mount /dev/mapper/vg_stor_01-lv_stor_01 /opt/space