LVM 解析


Linux LVM分区与应用与详解-哔哩哔哩


传统磁盘管理

无法扩充其大小, 只能通过添加硬盘, 创建新的分区来扩充空间.

逻辑卷管理下, 可以不中断上层业务扩充文件系统的大小.

介绍

Logical Volume Manager, 封装底层物理硬盘, 以逻辑卷的形式表现给上层系统, 大小可动态调整. 就是你不知道下面干了什么, 操作系统帮你干了这些工作.

这样底层的操作就不会影响上层的操作系统.

就是一种磁盘管理机制.

但需要注意, 在 LVM 中, 建议不使用 XFS 文件系统, 存在一些不兼容.

相关概念

PE

PE, Physical Extend, 物理拓展, 是逻辑卷空间管理的最基本单位, 默认是 4M 大小

PV

PV, Physical Volume, 物理卷. 和基本的物理介质, 如分区, 硬盘相比, 只是多了与 LVM 相关的参数, 因此可以把一个分区, 硬盘设置为 PV.

VG

VG, Volume Group, 卷组,相当于一个内存池. 一个 VG 由多个 PV 组成, 但一个 PV 只能分配给一个 VG.

LV

LV, Logical Volume, 逻辑卷, 相当于是我们在 LVM 上创建的硬盘分区.

我们最终操作使用的是逻辑卷,逻辑卷是为了取代原本的硬盘和分区。

工作流程

  1. 先将底层硬盘格式化为 PV 物理卷, 实质上是把硬盘划分为一个一个的 PE 物理扩展
  2. 创建 VG 卷组, 其作用是装 PE, 可以把多个 PV 加到 VG 中. VG 的大小是所有 PV 的大小之和
  3. 创建 LV 逻辑卷, 就是分配 VG 中的 PE
  4. 为创建好的 LV 逻辑卷创建文件系统
  5. 将格式化好的 LV 逻辑卷挂载使用

VG 和 LV 都要创建名称作为标识

创建好一个卷组之后就会出现一个以卷组名字命名的文件夹 /dev/vgname/lvname

每一个逻辑卷的空间可能来自不同的物理硬盘, 因为组成 VG 的 PE 来自不同的硬盘.

VG 大小不够就往里面加硬盘, 也就是加 PE 的数量.

先分割硬盘, 然后把内存块放进池子, 把一些内存块划为一块, 就得到了 LV.

基本使用

物理卷 PV

pvcreate 创建物理卷 PV

先用 fdisk, gdiskparted 分区工具对想要进行分区的硬盘进行分区 (也可以直接用硬盘).

假如现在有 /dev/sdb, /dev/sdc1, /dev/sdc2 可用:

1
pvcreate /dev/sdb /dev/sdc1 /dev/sdc2

此时这些裸磁盘在被做成物理卷后, 会被切分为若干个 PE, 大小为 4MB.

查看物理卷 PV 的信息

可以用 pvs “PV Show” 查看所有的简略信息:

1
$ pvs

pvdisplay 查看详细信息:

1
$ pvdisplay

(也可以查看具体的某一个)

将磁盘由物理卷还原

如将 /dev/sdc2 还原:

1
$ pvremove /dev/sdc2

此时文件系统类型不再是物理卷类型.

修改 PV 属性

设置为不可分配:

1
pvchange -x n /dev/sdc2
  • -x, --allocatable, 是否可分配, n 表示 no, y 表示 yes

设置为可分配:

1
pvchange -x y /dev/sdc2

卷组 VG

vgcreate 创建卷组 VG

假如现在 /dev/sdb, /dev/sdc1, /dev/sdc2 已为物理卷.

/dev/sdb/dev/sdc1 加入卷组 vg0

1
vgcreate vg0 /dev/sdb /dev/sdc1

逻辑卷实际位置在, dev/mapper 中.

查看卷组 VG 的信息

vgs, vgdisplay

vgextend 扩容 VG

/dev/sdc2 加入到 vg0 中:

1
vgextend vg0 /dev/sdc2

vgreduce 缩减 VG

/dev/sdc2 移除 vg0:

1
vgreduce vg0 /dev/sdc2

vgremove 删除一个 VG

vg0 删除:

1
vgremove vg0

(此时 vg0 中的物理卷并未被删除, 只是被移出了 vg0)

卷组误操作与恢复

查看卷组的操作:

1
vgcfgrestore -l vg0
  • -l, --list, 列出日志
    (注意这里的路径显示可能有问题)

恢复到一个状况:

1
vgcfgrestore -f 日志文件路径 vg0
  • -f, --file, 指定日志文件

修改卷组属性

是否激活一个卷组 (是否可使用):

1
2
vgchange -ay vg0
vgchange -an vg0
  • -a, --activate, 是否激活, y 表示 yes, n 表示 no
    (未激活表示其下的 LV 不可用)

逻辑卷 LV

查看逻辑卷

查看简略信息:

1
lvs

查看详细信息:

1
lvdisplay

创建逻辑卷

1
lvcreate -L 1G -n lv01 vg0
  • -L, --size, 指定逻辑卷大小
  • -n, --name, 指定逻辑卷名称
  • -l, --extends, 指定 PE 个数
    最后的参数为使用的卷组.

这个逻辑卷的路径为 /dev/vg0/lv01 (等价于 /dev/mapper/vg0-lv01).

格式化逻辑卷并挂载使用

1
2
mkfs.ext4 /dev/vg0/lv01
mount /dev/vg0/lv01 /mnt

删除逻辑卷

1
2
umount /mnt
lvremove /dev/vg1/lv01

扩容逻辑卷

只要卷组中还有空间, 就可以扩容逻辑卷:

1
lvextend -L 2G /dev/vg0/lv01
  • -L, --size, 指定新的大小
  • -l, --extends, 指定新的 PE 数量
  • -r, --resizefs, 此时会同步扩容文件系统

(此时只扩展了逻辑卷, 还需要接着扩展文件系统)

扩展文件系统, 针对 XFS 以外的:

1
resize2fs /dev/vg0/lv01

针对 XFS 文件系统:

1
xfs_growfs /mnt

(这里加挂载点)

缩容逻辑卷

注意 XFS 不支持缩容, 可以用 EXT4 为例:

1
2
3
4
umount /mnt
e2fsck -f /dev/vg0/lv01
resize2fs /dev/vg0/lv01
lvreduce -L 500M /dev/vg0/lv01
  • -L, --size, 指定新的大小
  • -l, --extends, 指定新的 PE 数量

修改逻辑卷属性

1
2
3
4
lvchange -ay lv01
lvchange -an lv01
lvchange -pr lv01
lvchange -prw lv01
  • -a, --active, 是否启用, y 表示 yes, n 表示 no
  • -p, --permission, r 表示 read-only, rw 表示可读可写

逻辑卷快照

创建快照:

1
lvcreate -L 64M -s -n datasnap /dev/vg0/lv01
  • -s, --snapshot, 表明要创建快照
  • -n, --name, 指定快照名称
    (此时快照的 UUID 和逻辑卷一样, 对于 XFS 挂载时需指定 nouuid)

挂载快照:

1
2
mkdir -p /mnt/datasnap
mount /dev/vg0/datasnap /mnt/datasnap

卸载快照:

1
umount /mnt/datasnap

快照恢复:

1
lvconvert --merge /dev/vg0/datasnap

移除快照:

1
lvremove /dev/vg0/datasnap

LVM 解析
http://example.com/2024/03/09/LVM-解析/
作者
Jie
发布于
2024年3月9日
许可协议