一.逻辑卷管理器LVM
1.LVM介绍
逻辑卷管理器(LogicalVolumeManager)本质上是一个虚拟设备驱动,是在内核中块设备和物理设备之间添加的一个新的抽象层次,如图所示。
它可以将几块磁盘(物理卷,PhysicalVolume) 组合起来形成一个存储池或者卷组(VolumeGroup)。LVM可以每次从卷组中划分出不同大小的 逻辑卷(LogicalVolume) 创建新的逻辑设备。
底层的原始的磁盘不再由内核直接控制,而由LVM层来控制。对于上层应用来说卷组替代了磁盘块成为数据存储的基本单元。LVM管理着所有物理卷的物理盘区,维持着逻辑盘区和物理盘区之间的映射。LVM逻辑设备向上层应用提供了和物理磁盘相同的功能,如文件系统的创建和数据的访问等。但LVM逻辑设备不受物理约束的限制,逻辑卷不必是连续的空间,它可以跨越许多物理卷,并且可以在任何时候任意的调整大小。相比物理磁盘来说,更易于磁盘空间的管理。
特点:
1、动态在线扩容(重点)
2、离线裁剪
3、数据条带化
4、数据镜像
2.相关名词强调
-
物理卷(Physical Volume,PV)
物理卷是底层真正提供容量,存放数据的设备,它可以是整个硬盘、硬盘上的分区等。 -
卷组(Volume Group, VG)
卷组建立在物理卷之上,它由一个或多个物理卷组成。即把物理卷整合起来提供容量分配。
一个LVM系统中可以只有一个卷组,也可以包含多个卷组。 -
逻辑卷(Logical Volume, LV)
逻辑卷建立在卷组之上,它是从卷组中“切出”的一块空间。它是最终用户使用的逻辑设备。逻辑卷创建之后,其大小可以伸缩。 -
物理区域 PE(physical extent)
每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是能被LVM寻址的最小单元。PE的大小可指定,默认为4 MB。 PE的大小一旦确定将不能改变,同一个卷组中的所有物理卷的PE的大小是一致的。
4MB=4096kb=4096kb/4kb=1024个block
说明:
- 硬盘读取数据最小单位1个扇区512字节
- 操作读取数据最小单位1个数据块=8*512字节=4096字节=4KB
- lvm寻址最小单位1个PE=4MB
- 逻辑区域 LE(logical extent)
逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
3.LVM建立
实现思路:
- 物理的设备
- 将物理设备做成物理卷
- 创建卷组并将物理卷加入其中
- 创建逻辑卷
- 格式化逻辑卷
- 挂载使用
# Tips:用下面命令看效果
watch -n 1 "df -h /test;echo ===;pvs;echo =====;vgs;echo ===;lvs"
# 1.添加一块新的硬盘/dev/sdb,大小为10G。
# 在新硬盘上建立3主+1扩(3主大小为:2G 2G 2G),分区类型设置为lvm
fdisk /dev/sdb
# 建立好分区后,按t修改分区类型
# 2.创建物理卷
pvcreate /dev/sdb1 /dev/sdb2
# 3.创建卷组并将物理卷加入其中
# 设定pe大小为2M PE大,读取速度快,但浪费空间。
vgcreate vg01 -s 2M /dev/sdb1 /dev/sdb2
# 4.创建逻辑卷
# -L 指定大小 -n 指定名称
lvcreate -n lv01 -L 2.5G vg01
########################################################################
# 这时会在操作系统层面映射两个地方:
[root@server ~]# ll /dev/mapper/vg01-lv01
lrwxrwxrwx 1 root root 7 Jan 7 11:16 /dev/mapper/vg01-lv01 -> ../dm-2
[root@server ~]# ll /dev/vg01/lv01
lrwxrwxrwx 1 root root 7 Jan 7 11:16 /dev/vg01/lv01 -> ../dm-2
########################################################################
# 5.格式化逻辑卷
mkfs.xfs /dev/vg01/lv01
# 6.挂载使用
mount /dev/vg01/lv01 /test
# /test为新建的挂载点
4.LVM动态扩容
思路:
- 查看/test目录所对应的逻辑卷是哪一个 /dev/mapper/vg02-lv01
- 查看当前逻辑卷所在的卷组vg01剩余空间是否足够
- 如果vg01空间不够,得先扩容卷组,再扩容逻辑卷
- 如果vg01空间足够,直接扩容逻辑卷
# 1.查看/test目录属于哪个卷组
df -h
# 2.查看卷组的剩余空间
vgs
####################################################################
# 当卷组剩余空间不够时:
# 1)首先得有物理设备 /dev/sdb3
# 2)将物理设备做成物理卷
pvcreate /dev/sdb3
# 3)将物理卷加入到卷组中(卷组扩容)
vgextend vg01 /dev/sdb3
####################################################################
# 3.扩容逻辑卷
lvextend -L 4G /dev/vg01/lv01 #-L 4G最终的大小
或者
lvextend -L +1.5G /dev/vg01/lv01 #-L +1.5G 2.5+1.5=4
# 4.查看结果
lvs
# 5.同步文件系统
xfs_growfs /dev/vg01/lv01
# 6.再次查看验证
df -h
注意:
# 文件系统为ext4时 使用以下命令同步文件系统:
resize2fs /dev/vg01/lv01
5.LVM缩减
xfs文件系统不支持缩减,ext文件系统支持缩减。
# 1.卸载逻辑卷
umount /test
# 2.扫描这个设备里面的东西,否则直接缩减会造成损坏
e2fsck -f /dev/vg01/lv01
# 3.缩减文件系统
resize2fs /dev/vg01/lv01 1500M
# 4.缩减lvm设备
lvreduce -L 1500M /dev/vg01/lv01
# 5.重新挂载
mount /dev/vg01/lv01 /test
# 6.将/dev/sdb3从vg中移除
vgreduce vg01 /dev/sdb3
# 7.再将/dev/sdb3从pv中移除
pvremove /dev/sdb3
6.LVM快照
建立快照:
# 1.在LVM上建立测试文件
mount /dev/vg01/lv01 /test
touch /test/file{1..10}
# 2.先卸载再进行快照
umount /test
lvcreate -L 128M -n lv01.bak -s /dev/vg01/lv01
# 3.挂载快照
mount /dev/vg01/lv01.bak /test
# 测试:
cd /test
rm -fr * # 删除快照上的所有文件
umount /test # 卸载
# 删除快照后,重新制作快照
lvremove /dev/vg01/lv01.bak
lvcreate -L 128M -n lv01.bak -s /dev/vg01/lv01
mount /dev/vg01/lv01.bak /test #重新挂载
ls /test #文件全部恢复
7.LVM删除
# 1.卸载设备
umount /test
# 2.删除lv
lvremove /dev/vg01/lv01
# 3.删除vg
vgremove vg01
# 4.删除pv
pvremove /dev/sdb3
# 5.删除分区 进入后按d删除分区
fdisk /dev/sdb
8.LVM条带化
问题:
当多个进程同时访问一个磁盘时,可能会出现磁盘冲突。磁盘系统对访问次数(每秒的IO操作,IOPS)和数据传输速率(读写速率,TPS)有限制。
当达到这些限制时,后面需要访问磁盘的进程就需要挂起等待,这就是磁盘冲突。避免磁盘冲突是优化I/O性能的一个重要目标。
条带化技术是一种自动的将I/0负载均衡到多个物理磁盘上的技术。条带化技术将一块连续的数据分成很多小部分,并把他们分别存储到不同的磁盘上去。这样就能使多个进程同时访问数据的多个不同部分而不会造成磁盘冲突,最大化I/0性能。
LVM的条带化:为了性能考虑,将数据跨越多个磁盘存储,即把LV上连续的数据分成大小相同的块,然后依次存储在各个磁盘PV上,类似于RAID0的数据存放形式,实现数据读写的并发;管理员一句自己的数据需求,定义数据分块大小,分布PV磁盘个数信息,从而实现读写性能最佳化。
实现:
pvcreate /dev/sdb[12]
vgcreate vg01 /dev/sdb[12]
lvcreate -n lv01 -L 1G vg01 -i 2 /dev/sdb[12]
# -i 参数:给出条带化的数量
mkfs.ext4 /dev/vg01/lv01
mount /dev/vg01/lv01 /test
测试:
yum -y install sysstat
iostat -m -d /dev/sdb[12] 1
# -d 查看磁盘
# -m 以什么速度显示,每秒M
# 1 每隔1s显示一次
dd if=/dev/zero of=/test/testfile bs=1M count=1000 #模拟写数据
iostat -m -d /dev/sdb[12] 1
9.LVM镜像
# 实现:
pvcreate /dev/sdb[12]
vgcreate vg01 /dev/sdb[12]
lvcreate -n lv01 -L 2G vg01 -m 1 /dev/sdb[12]
# -m参数:给出镜像的个数;1表示1个镜像
lvs #Cpy%Sync 53.52该值是100%说明复制ok
mkfs.ext4 /dev/vg01/lv01
mount /dev/mapper/vg01-lv01 /test
# 测试:
touch /test/file{1..3}
mkdir /test/dir{1..3}
# 1. 使用dd命令破坏一个物理卷
dd if=/dev/zero of=/dev/sdb1 bs=1M count=100
# 2. 再次查看物理卷(pvs)发现有一个unknown Device
# 3. 将损坏的盘从卷组中移除
vgreduce vg01 --removemissing --force
# 4. 再次查看挂载点/test数据依然存在
二.虚拟数据优化器VDO
1.VDO介绍
VDO(Virtual Data Optimize)是RHEL8/Centos8上新推出的一个存储相关技术(最早在7.5测试版中开始测试),是Redhat收购的Permabit公司的技术。
VDO的主要作用是节省磁盘空间,比如让1T的磁盘能装下1.5T的数据,从而降低数据中心的成本。
2.VDO实现
# 1.安装VDO
dnf install vdo
# 2.创建VDO,名字叫vdo1
vdo create --name=vdo1 --device=/dev/sdb
vdo status --name=vdo1 | less
Deduplication:enabled #检测并删除重复数据的功能时开启的
Compression: enabled #数据压缩功能开启
# 3.使用VDO
mkfs.xfs -K /dev/mapper/vdo1
mkdir /test_vdo
mount /dev/mapper/vdo1 /test_vdo/
# 4.测试VDO性能
watch -n 1 "df -H /westos;echo ====;vdostats --human-readable"
# 选择一个较大的文件,将其复制到上面建立的/test_vdo目录下,多复制几次
# 查看所占用的容量
# 5.删除VDO
vdo remove --name=vdo1
开机自动挂载
vim /etc/fstab
# 添加下面一行
/dev/mapper/vdo1 /test_vdo xfs defaults,x-systemd.requires=vdo.service 0 0