引言
逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先需要了解逻辑卷管理中的一些概念。
- 物理卷(Physical Volume,PV):也就是物理磁盘分区,如果想要使用LVM来管理这个分区,可以使用fdisk将其ID改为LVM可以识别的值,即8e。
- 卷组(Volume Group,VG):PV的集合
- 逻辑卷(Logic Volume,LV):VG中画出来的一块逻辑磁盘
了解概念之后,逻辑卷是如何产生的就很清晰了:物理磁盘或者磁盘分区转换为物理卷,一个或多个物理卷聚集形成一个或多个卷组,而逻辑卷就是从某个卷组里面抽象出来的一块磁盘空间。具体架构如下:
为什么要使用逻辑卷
对于物理磁盘,我们直接分区、格式化为文件系统之后就可以使用,那为什么还需要使用逻辑卷的方式来管理磁盘呢?我认为主要有2个原因:
- 业务上使用大容量的磁盘。举个例子,我们需要在/data下挂载30TB的存储,对于单个磁盘,是无法满足要求的,因为市面上没有那么大的单块磁盘。但是如果我们使用逻辑卷,将多个小容量的磁盘聚合为一个大的逻辑磁盘,就能满足需求。
- 扩展和收缩磁盘。在业务初期规划磁盘时,我们并不能完全知道需要分配多少磁盘空间是合理的,如果使用物理卷,后期无法扩展和收缩,如果使用逻辑卷,可以根据后期的需求量,手动扩展或收缩。
添加磁盘和分区
1.先添加一块磁盘
2.进行磁盘/dev/sdb的分区
将磁盘分为sdb1和sdb2俩个分区
创建物理卷
pvcreate /dev/sdb1
查看物理卷
pvdisplay 或者 pvs
创建卷组
vgcreate vg0 /dev/sdb1
或者
vgcreate -s 2G vg0 /dev/sdb1
-s 定义大小
vg0 卷组名字
查看卷组
vgdisplay 或者 vgs
创建逻辑卷
lvcreate -n mysql -L 2G vg0
-n 逻辑卷名字
-L 指定大小
查看逻辑卷
lvdisplay 或者 lvs
格式化
mkfs.ext4 /dev/vg0/mysql
文件系统为ext4
挂载和自动挂载
1.创建挂载目录
mkdir /mnt/mysql
2.临时挂载
mount /dev/vg0/mysql /mnt/mysql
3.自动挂载//修改/etc/fstab文件
在线扩容逻辑卷
扩展逻辑卷涉及到的问题
- 检查逻辑卷(LV)所在的卷组中是否有足够的未分配磁盘空间
- 如果有,你可以使用这些空间来扩展逻辑卷
- 如果没有,请向系统中添加新的磁盘或 LUN
- 将物理磁盘转换为物理卷(PV)
- 扩展卷组
- 增加逻辑卷大小
- 扩大文件系统
- 检查扩展的文件系统大小
卷组有足够的空间直接扩展逻辑卷
1.先扩容内存
lvextend -L +3G /dev/vg0/mysql
+3G是在原来的基础上在增加3G,若是没有+而是直接3G,则是扩容到3G
2.再同步文件系统
resize2fs /dev/vg0/mysql
这里的resize2fs只支持同步ext4的文件系统,而 xfs 文件系统同步则是xfs_growfs /dev/vgmysql/log
3.扩容内存和同步文件系统一步到位
lvextend -r -L 6G /dev/vg0/mysql
这里我们把逻辑卷扩容到了6G,-r 参数则是同步文件系统
若是卷组没有足够的空间我们先扩容物理卷然后在分配给vg0卷组足够的空间,若是物理卷的空间不够则需要添加新的磁盘
离线缩减逻辑卷
逻辑卷的缩容只针对ext4的文件系统,xfs的文件系统不支持缩容
1.取消挂载
umount /mnt/mysql/
2.检查文件系统
fsck -f /dev/vg0/mysql
3.缩减文件系统 //缩减后剩余的空间必须大于该逻辑卷已经使用的空间
resize2fs /dev/vg0/mysql 3G
4.缩减逻辑卷
lvreduce -L 3G /dev/vg0/mysql
5.重新挂载
mount -a
ext4文件系统实现逻辑卷快照
1.创建快照
lvcreate -s -n mysql-snapshort -L 500M -p r /dev/vg0/mysql
-s 创建快照
-p r 只读
2.挂载//若是创建快照的时候没有加-p r 则挂载的时候要加-o ro
mount /dev/vg0/mysql-snapshort /mnt/snap/
只有当原来逻辑卷中的文件修改时才会将逻辑卷中的文件保存到快照中
恢复逻辑卷快照
1.取消挂载
umount /mnt/mysql
umount /mnt/snap
2.恢复快照//快照恢复后则不存在
lvconvert –merge /dev/vg0/mysql-snapshort
3.恢复挂载
mount -a
xfs文件系统实现逻辑卷快照
我们需要先创建一个xfs文件系统的逻辑卷,由于我的vg足够我直接创建
lvcreate -n log -L 2G vg0
mkfs.xfs /dev/vg0/log
mkdir /mnt/log
mount /dev/vg0/log /mnt/log/
实现逻辑卷快照
1.创建快照
lvcreate -s -n log-snapshort -L 500M /dev/vg0/log
2.挂载
//xfs文件系统若是uuid一样则不能挂载,而快照的话则是和被快照的分区uuid是一样的
mount -o ro,nouuid /dev/vg0/log-snapshort /mnt/snap/
这里nouuid就是挂载的时候不检查uuid
恢复逻辑卷快照
1.取消挂载
umount /mnt/snap
umount /mnt/log
2.恢复//快照恢复后则不存在
lvconvert –merge /dev/vg0/log-snapshort
3.重新挂载
mount -a
跑路
1.先取消挂载
umount /mnt/log
umount /mnt/mysql
2.删除逻辑卷
lvremove /dev/vg0/log
lvremove /dev/vg0/mysql
3.删除卷组
vgremove vg0
4.删除物理卷
pvremove /dev/sdb1
5.取消磁盘分区
fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):d
分区号 (1,2,默认 2):1
分区 1 已删除
命令(输入 m 获取帮助):d
已选择分区 2
分区 2 已删除
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。