八.管理存储堆栈
1.逻辑卷管理(LVM)
1.1逻辑卷管理简介
逻辑卷管理(LVM)是 Linux 系统中用于灵活管理磁盘存储 的技术,通过对物理磁盘进行逻辑抽象 ,通过抽象层将物理存储设备 与逻辑存储分离。
1.1.1架构
(1)物理设备
物理设备十LVM存储数据的"硬件载体",可以是各类块存储设备;
如:
块设备:如/dev/sdb(未分区的磁盘)、/dev/sdc1(磁盘分区);
RAID 阵列:由多块磁盘组成的冗余存储(如 RAID 5 阵列);
(2)物理卷(PV)
需要将物理设备初始化为物理卷 (PV),LVM 会把 PV 划分为物理区块(PE),PE 是 PV 上的最小存储单元(默认大小为 4MB,可自定义)。
(3)卷组(VG)
由一个或多个PV组成的存储池;
一个 PV 只能属于一个 VG ,但一个 VG 可以包含多个 PV;VG 中可包含未使用的空间,也可创建任意数量的逻辑卷(LV)。
(4)逻辑卷(LV)
从VG中划分出来的逻辑存储单元,由"逻辑区块(LE)"组成,LE 会映射到 PV 的 PE 上(LE 与 PE 大小默认相同,确保一一对应)
1.1.2简易理解
(1)物理卷PV
LVM 先把每块硬盘变成 "标准化的乐高积木";
(2)卷组VG
把这些 "乐高积木块(PV)" 全倒进一个 "大池子" 里,这个池子就是卷组 VG。池子越大,能用来 "搭东西" 的资源就越多。
(3)逻辑卷LV
从 "乐高池(VG)" 里拿出积木,捏成一个 "可以存数据的橡皮泥块",这就是逻辑卷 LV。这个 "橡皮泥块" 可以直接当磁盘用(格式化、存文件),而且大小能随时调整
1.2 LVM工作流程
(1)物理设备准备
(2)创建物理卷PV
(3)创建卷组VG
(4)创建逻辑卷LV
(5)格式化
(6)挂载文件系统
1.3创建逻辑卷
1.3.1准备物理设备(可选)
(1)查看块设备
lsblk
(2)创建新分区
LVM分区上,分区类型是Linux LVM
如:
创建分区:
parted /dev/vdb mklabel gpt
parted /dev/vdb mkpart first 1Mib 258Mib
parted /dev/vdb mkpart second 258MiB 514MiB
注册新分区:
udevadm settle
将此分区类型设置为Linux LVM:
parted /dev/vdb set 1 lvm on
parted /dev/vdb set 2 lvm on
1:第n个分区,根据实际情况更改



1.3.2创建物理卷PV
初始化物理设备/分区为物理卷,pvcreate命令;
如:
sudo pvcreate /dev/vdb1 /dev/vdb2

1.3.3创建卷组VG
将一个或多个PV结合为一个卷组,vgcreate命令;
如:
sudo vgcreate vg01 /dev/vdb1 /dev/vdb2

1.3.4创建逻辑卷LV
lvcreate可以根据VG中的可用物理区块PE,创建新的逻辑卷LV;
如:
sudo lvcreate -n lv01 -L 400MB vg01
****-n:****设置LV的名称;
****-l:****表示LV的数量;
****-L:****表示字节大小;

1.3.5验证逻辑卷信息
sudo lvdisplay /dev/vg01/lv01

1.3.6添加文件系统
mkfs命令在新逻辑卷上创建文件系统,创建挂载点并挂载;
如:
(1)创建文件系统/格式化逻辑卷
mkfs -t xfs /dev/vg01/lv01

(2)创建挂载点
mkdir /data

(3)挂载文件系统
配置/etc/fstab设置永久挂载,再使用mount挂载;
echo "/dev/vg01/lv01 /data xfs defaults 0 0" > /etc/fstab
mount -a
1.3.7验证挂载的文件系统是否可以访问,并显示LVM状态信息
(1)验证是否可以将文件复制到/data目录(挂载点)
cp -a /etc/*.conf /data
ls /data | wc -l

(2)查看PV状态信息:pvdisplay
pvdisplay /dev/vdb1 /dev/vdb2

|--------------|----------------------------------------------------|
| PV Name | 物理卷设备路径:/dev/vdb1 |
| VG Name | 所属卷组:vg01 |
| PV Size | 物理卷大小: 257.00 MiB , 无不可用空间 |
| Allocatable | 是否可分配:yes (but full) → 空间已全部分配,无剩余 |
| PE Size | 物理区块(PE)大小:4.00 MiB(LVM 的最小存储单元) |
| Total PE | 总 PE 数量:64(257MiB ÷ 4MiB ≈ 64) |
| Free PE | 空闲 PE:0 → 无剩余空间 |
| Allocated PE | 已分配 PE:64 → 空间全被使用 |
(3)查看vg状态信息vgdisplay
vgdisplay vg01

|-----------------|-------------------------------------------------------------|
| VG Name | 卷组名称:vg01 |
| Metadata Areas | 元数据区域数量:2 → 对应两个 PV |
| VG Size | 总容量:508.00 MiB(257MiB + 256MiB - 5MiB,5MiB 为元数据开销 ) |
| PE Size | PE 大小:4.00 MiB(与 PV 一致 ) |
| Total PE | 总 PE 数量 :127(508MiB ÷ 4MiB ≈ 127) |
| Alloc PE / Size | 已分配 PE / 容量:100 / 400.00 MiB → 已用 400MiB |
| Free PE / Size | 空闲 PE / 容量:27 / 108.00 MiB→ 剩余 108MiB(与/dev/vdb2的空闲 PE 一致) |
(4)查看lv状态信息lvdisplay
lvdisplay /dev/vg01/lv01

|------------|--------------------------------------------------|
| LV Path | 设备路径:/dev/vg01/lv01 |
| LV Name | 逻辑卷名称:lv01 |
| VG Name | 所属卷组:vg01 |
| LV Size | 逻辑卷大小:400.00 MiB(与卷组 "已分配 400MiB" 对应) |
| Current LE | 逻辑区块(LE)数量:100(400MiB ÷ 4MiB = 100,LE 与 PE 一一映射) |
| Segments | 分段数:2 → 空间来自两个 PV(/dev/vdb1和/dev/vdb2) |
(5)查看可用磁盘空间

1.4创建重复使用的逻辑卷
1.4.1VDO概念
VDO(虚拟数据优化器)是红帽在RHEL 8/9中集成的存储优化技术,作为LVM的扩展,为逻辑卷提供重复数据删除(识别并删除重复块)和压缩(压缩存储数据)功能,从而大幅节省物理存储空间。配置VDO卷,用来使用最多256TB的物理存储。
1.4.2VDO组成
LVM VDO 由两个逻辑卷组成,形成 "存储池 + 虚拟卷" 的层级结构:
|---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
| 组件 | 作用与特性 |
| VDO POOL LV(存储池逻辑卷) | 1. 是底层物理存储的载体 ,负责实际数据存储 、重复数据删除 和压缩 ; 2. 大小由物理设备容量决定(最多支持 256 TB 物理存储); 3. 每个 POOL LV 只能对应一个 VDO LV 。 |
| VDO LV(虚拟逻辑卷) | 1. 基于 VDO POOL LV 创建的 "虚拟设备 ",提供给用户的逻辑存储 ; 2. 可设置远大于物理存储的逻辑大小 (利用重复数据删除和压缩的空间优化); 3. 用户通过 VDO LV 挂载、读写数据,无需感知底层 POOL 的存在。 |
1.4.3 示例

1.有一块 128GB 的物理硬盘。
2.在上面创建一个 VDO Pool LV ,大小就是 128GB。
3.然后可以在 VDO Pool PV 上创建一个 VDO LV ,并告诉操作系统 这是一个 512GB 的磁盘。
4.现在,操作系统就看到了一个 512GB 的"硬盘",并可以在上面创建文件系统、存数据。只要存入的数据重复率很高(比如虚拟机镜像、容器镜像、备份文件等),并且可压缩,那么这 128GB 的物理空间 就可能存下高达 512GB 的"逻辑数据"。
注:
使用VDO重复数据删除和压缩,需要vdo 和kmod-kvdo软件包
dnf install vdo kmod-kvdo
1.4.4VDO核心能力
(1) 重复数据删除:
识别并删除 存储块中的重复内容(如多个文件的相同片段),只保留一份数据,节省空间。
(2) 数据压缩:
对非重复数据 进行压缩存储,进一步提升空间利用率。
(3) 存储精简:
VDO LV 的逻辑大小可远大于物理存储(如物理存储 1TB,逻辑大小可设为 10TB),按需分配空间,提高存储灵活性。
1.4.5操作流程
(1)创建物理卷/dev/vdb(pvcreate)
(2)创建卷组vdo-vg02(vgcreate)
(3)创建VDO Pool LV(lvcreate)
lvcreate --type vdo \ # 指定类型
--virtualsize 500G \ # 指定逻辑大小,VDO LV最大空间
-L 100G \ # 指定物理大小,实际占用vg02的空间
-n vdo-pool \
vdo-vg02
(4)在VDO Pool LV上创建VDO LV(lvcreate)
lvcreate -L 500G -n vdo-lv vdo-vg02/vdo-pool
创建成功后,操作系统会将VDO LV识别为500G的块设备;
(5)格式化和挂载
可以像使用普通磁盘一样使用此VDO卷(vdo-lv)

1.5扩展卷组与逻辑卷
1.5.1扩展卷组
可以通过添加额外的物理卷来为卷组增加更多的磁盘空间,再从额外的物理卷中卫逻辑卷分配新的物理区块;
流程:
(1)准备物理设备(若不存在)
建立LVM分区操作


(2)创建物理卷
pvcreate /dev/vdb3

(3)扩展卷组(vgextend)
vgextend vg01 /dev/vdb3

在vg01卷组中添加物理卷/dev/vdb3
(4)验证卷组是否可用
vgdisplay vg01
1.5.2扩展逻辑卷
在上述扩展卷组流程操作中添加新操作:
(5)扩展逻辑卷(lvextend)
lvextend -L 700M /dev/vg01/lv01

(6)扩展文件系统(xfs文件系统为例)
xfs_growfs 挂载目录
仅扩展逻辑卷的大小不会自动让文件系统识别并使用新增的空间,必须让文件系统扩容 ,从而真正利用到扩展后的逻辑卷空间。
1.6缩减卷组和删除逻辑卷
1.6.1缩减卷组
删除额外的物理卷(未使用的);
如:
vgreduce vg01 /dev/vdb3
只用未被使用的物理卷 ,才能从卷组中删除,否则需要迁移数据(pvmove)。
在迁移数据前,备份VG中所有LV上的存储数据,操作期间以外断电可能会使VG处于不一致状态,或LV上的数据丢失!!!
流程:
(1)检查PV是否空闲:
pvs -o vg01 /dev/vdb3
vg01:物理卷名字
若输出的ALLocateable为no,则无数据占用,直接删除即可
(2)若有数据占用,先迁移数据
pvmove /dev/sdb
该命令会将/dev/sdb上的所有数据自动迁移到vg01中其他 PV(如/dev/sdc)的空闲空间。
(3)再删除物理卷
vgreduce vg01 /dev/vdb3
1.6.2删除逻辑卷
流程:
(1)取消文件系统的挂载(umount同时修改/etc/fstab)
如:
umount /data
(2)删除逻辑卷(lvremove)
lvremove /dev/vg01/lv01
(3)删除卷组(vgremove)
vgremove vg01
(4)删除物理卷(pvremove)
pvremove /dev/vdb1 /dev/vdb2
2.管理分区存储
2.1存储栈
存储栈是存储管理的 "层级架构",从下到上分为多个功能层,每层负责特定的存储管理任务,最终为用户提供可用的文件系统。
RHEL存储栈是一个分层架构,由多个成熟稳定的组件组成,共同管理系统的存储资源。
结构:
|------------|-----------------------|-----------------------|
| 层级 | 核心组件 | 作用 |
| 底层 | 物理磁盘、RAID 卡 | 存储硬件载体 |
| 中间层 | 多路径、RAID、LVM | 硬件抽象、冗余备份、容量弹性管理 |
| 上层 | XFS/Ext4 文件系统 Stratis | 数据组织与访问、高级存储功能(快照/去重) |
2.2块设备
块设备是 Linux存储堆栈 的基础组件 ,指以 "固定大小数据块 " 为单位读写的存储设备,是 LVM、RAID 等技术的操作对象。
核心特性:
支持随机读写,数据块大小通常为 512 字节或 4KB;
设备文件路径统一位于/dev目录,如/dev/sda(第一块 SCSI 硬盘)、/dev/vdb1(第二块虚拟硬盘的第一个分区);
可通过lsblk(列表块设备)、blkid(查看设备 UUID)、fdisk -l(查看分区信息)命令管理。
常见块设备类型:
物理硬盘:/dev/sda、/dev/vda(虚拟硬盘);
分区:/dev/sda1、/dev/vdb2;
逻辑卷:/dev/mapper/vg01-lv01(LVM 逻辑卷);
RAID 阵列:/dev/md0(软件 RAID 设备)。
2.3多路径
多路径是通过多条物理路径连接存储设备 的技术,用于提高存储访问的可靠性和性能。
核心价值:
冗余备份:一条路径故障时,自动切换到备用路径 ,避免存储中断;
负载均衡:将存储 IO 请求分散到多条路径,提升读写效率。
2.4RAID
RAID(独立磁盘冗余阵列)是将多块物理硬盘组合为逻辑阵列 的技术 ,核心提供冗余 (数据备份 )和性能提升(并行读写)。
2.5逻辑卷管理器
LVM 是 Linux 下动态管理 存储的核心工具,通过"物理卷→卷组→逻辑卷"的层级结构,实现存储的弹性扩容/缩容、跨设备整合。
核心组件:
|------------|-----------------------------------------------------------|
| 组件 | 定义与作用 |
| 物理卷(PV) | 对物理磁盘/分区的 LVM 格式化(如 /dev/vdb1),划分为最小单元 PE(默认 4MB) |
| 卷组(VG) | 整合多个 PV 为 "存储池",屏蔽底层设备差异(如将 /dev/vdb1+/dev/vdb2 合并为 vg01) |
| 逻辑卷(LV) | 从 VG 中动态划分的 "虚拟分区",可直接格式化挂载,支持在线扩容 |
2.6Stratis存储管理
Stratis 是红帽推出的 "智能存储管家",基于 LVM 和 XFS,简化存储管理并提供高级功能(快照、去重、精简配置)。
注:
Stratis创建的文件系统只能使用Stratis工具和命令,进行重新配置;
Stratis使用存储的元数据来识别管理的池、卷和文件系统;
使用非Stratis命令手动配置文件系统,可能会导致该元数据丢失;
2.6.1核心组件:
(1)存储池(Pool):
由多块磁盘组成的 "存储池"(类似 LVM 的 VG);
(2)文件系统(Filesystem):
从存储池动态分配空间,支持按需扩展;
(3)快照(Snapshot):
文件系统的 "时间点副本",用于备份或回滚。
2.6.2操作流程:
(1)安装并启用Stratis
(2)创建存储池
(3)创建文件系统
(4)挂载使用
(5)管理
完整流程

2.7安装与启用Stratis
安装Stratis-cli和stratisd软件包,再启动并启用Stratisd服务
安装:
dnf install stratis-cli Stratisd

启动:
systemctl enable --now Stratisd
2.8创建Stratis池
(1)创建块设备的池
stratis pool create pool-01 /dev/vdb

(2)查看可用池列表
stratis pool list

(3)添加额外块设备
stratis pool add-data pool-01 /dev/vdc

(4)查看池的块设备
stratis blockdev list pool-01

(5)再次验证池的情况
stratis pool list

与(2)对比,发现扩展成功
2.9管理Stratis文件系统
(1)创建动态文件系统
stratis filesystem create pool-01 fs1

stratis文件系统的链接位于/dev/Stratis/poolname目录中
(2)查看可用的文件系统
stratis filesystem list

(3)创建文件系统快照
stratis filesystem snapshot pool-01 fs1 snapshot

(4)验证快照可用性

(5)可以通过快照访问在创建快照后被删除的文件
删除:

通过快照访问:

(6)销毁快照与文件系统
注:
首先取消挂载
销毁文件系统与快照:
stratis filesystem destroy pool-01 fs1 snapshot

2.10持久挂载Stratis文件
编辑/etc/fstab文件,持久挂载stratis文件系统
(1)查看文件系统的UUID
lsblk --output=UUID /dev/stratis/pool-01/fs1

(2)修改配置文件
vim /etc/fstab
写入:
UUID=b77e63b8-669a-4f31-8052-1c6141a730bc 挂载目录名字 \
xfs defaults,x-systemd,requires=stratisd,service 0 0
(3)启用新配置
systemctl daemon-reload
(4)挂载并验证
mount 挂载目录
mount | grep 挂载目录
3.核心命令
3.1 LVM命令
|------------|--------------------------------|
| 操作 | 命令 |
| 创建 PV | pvcreate /dev/vdb1 |
| 查看 PV | pvs/pvdisplay |
| 创建 VG | vgcreate vg01 /dev/vdb1 |
| 扩展 VG | vgextend vg01 /dev/vdb3 |
| 创建 LV | lvcreate -n lv01 -L 10G vg01 |
| 扩展 LV | lvextend -L +5G /dev/vg01/lv01 |
| 查看 LV | lvs/lvdisplay |
3.2 VDO 命令
|-------------|---------------------------------------------------------------------|
| 操作 | 命令 |
| 安装依赖 | dnf install -y vdo kmod-kvdo |
| 创建 VDO Pool | lvcreate --type vdo -L 100G --virtualsize 500G -n vdo-pool vdo-vg02 |
| 创建 VDO LV | lvcreate -L 500G -n vdo-lv vdo-vg02/vdo-pool |
3.3 Stratis 命令
|------------|-----------------------------------------------|
| 操作 | 命令 |
| 创建池 | stratis pool create pool-01 /dev/vdb /dev/vdc |
| 创建文件系统 | stratis filesystem create pool-01 fs1 |
| 创建快照 | stratis filesystem snapshot pool-01 fs1 snap1 |
| 销毁文件系统 | stratis filesystem destroy pool-01 fs1 |