20.管理存储堆栈
一、创建和扩展逻辑卷
(1)物理卷(PV)、卷组(VG)、逻辑卷(LV)
物理卷(PV,Physical Volume)
- 物理存储设备(如硬盘分区、SSD、RAID 设备等),经过 LVM 初始化后成为 PV,用于构建卷组。
- 底层设备需先创建分区(推荐类型为
8e,即 Linux LVM)。
卷组(VG,Volume Group)
- 由一个或多个 PV 组成的存储池,将分散的物理存储整合为一个统一的逻辑存储池,屏蔽底层物理设备差异。
逻辑卷(LV,Logical Volume)
- 从 VG 中划分出的逻辑存储单元,可像普通分区一样格式化并挂载使用,支持动态扩展 / 缩减(需文件系统支持)。
(2)构建LVM存储
1. 准备物理设备(以分区/dev/sdb1为例)
# 查看磁盘分区(确认设备名)
fdisk -l /dev/sdb# 若未分区,创建分区(类型设为8e)
fdisk /dev/sdb
# 输入n创建新分区,t修改类型为8e,w保存退出2. 创建物理卷(PV)
# 初始化物理卷(将分区标记为LVM物理卷)
pvcreate /dev/sdb1# 示例:同时初始化多个设备
pvcreate /dev/sdb1 /dev/sdc13. 创建卷组(VG)
# 创建卷组(vg0为卷组名,包含/dev/sdb1)
vgcreate vg0 /dev/sdb1# 示例:指定PE大小(默认4MB,范围1-65536MB)
vgcreate -s 8M vg0 /dev/sdb1 /dev/sdc1 # PE大小设为8MB4. 创建逻辑卷(LV)
# 从vg0中创建20GB的逻辑卷lv_data
lvcreate -L 20G -n lv_data vg0# 示例:按卷组剩余空间的50%创建LV
lvcreate -l 50%FREE -n lv_backup vg0# 示例:使用卷组全部空间创建LV
lvcreate -l 100%VG -n lv_full vg05. 格式化并挂载 LV
# 格式化LV为ext4文件系统(xfs也常用,需注意xfs不支持缩减)
mkfs.ext4 /dev/vg0/lv_data# 创建挂载点并挂载
mkdir /data
mount /dev/vg0/lv_data /data# 永久挂载(写入/etc/fstab)
echo "/dev/vg0/lv_data /data ext4 defaults 0 0" >> /etc/fstab(3)显示LVM组件状态
查看物理卷(PV)
pvdisplay # 详细信息(大小、所属VG等)
pvs # 简洁信息(设备、大小、状态)查看卷组(VG)
vgdisplay vg0 # 详细信息(总大小、剩余空间、包含的PV等)
vgs # 简洁信息(VG名、大小、剩余空间)查看逻辑卷(LV)
lvdisplay /dev/vg0/lv_data # 详细信息(路径、大小、所属VG等)
lvs # 简洁信息(LV名、大小、所属VG)(4)扩展和缩减LVM存储
1. 扩展逻辑卷(LV)
前提:卷组(VG)有剩余空间,或已添加新 PV 到 VG。
# 步骤1:扩展LV(增加10GB,或扩展至50GB)
lvextend -L +10G /dev/vg0/lv_data # 增加10GB
# 或 lvextend -L 50G /dev/vg0/lv_data # 扩展至总容量50GB# 步骤2:扩展文件系统(根据文件系统类型)
# ext4文件系统
resize2fs /dev/vg0/lv_data# xfs文件系统(需先挂载,且只能扩展不能缩减)
xfs_growfs /data # 需指定挂载点而非设备若 VG 空间不足,先扩展 VG:
# 新增PV(如/dev/sdc1)并添加到vg0
pvcreate /dev/sdc1
vgextend vg0 /dev/sdc1 # 将新PV加入VG2. 缩减逻辑卷(LV)
注意:
- 仅 ext4 等支持缩减,xfs 不支持!
- 缩减前必须卸载 LV 并检查文件系统完整性。
# 步骤1:卸载LV
umount /data# 步骤2:检查文件系统(ext4)
e2fsck -f /dev/vg0/lv_data # 强制检查,确保无错误# 步骤3:缩减文件系统(先缩文件系统,再缩LV!)
resize2fs /dev/vg0/lv_data 30G # 缩至30GB# 步骤4:缩减LV(需与文件系统大小一致)
lvreduce -L 30G /dev/vg0/lv_data# 步骤5:重新挂载
mount /dev/vg0/lv_data /data(5)删除LVM存储
注意:删除前需卸载 LV,确保数据已备份!
卸载逻辑卷
umount /data
# 若在/etc/fstab有配置,需删除对应行2.删除逻辑卷(LV)
lvremove /dev/vg0/lv_data
# 输入y确认3. 删除卷组(VG)
vgremove vg04.删除物理卷(PV)
pvremove /dev/sdb1 /dev/sdc15.(可选)删除底层分区
fdisk /dev/sdb # 进入分区工具删除对应分区二、管理分层存储
(1)存储堆栈
存储堆栈是计算机系统中从物理硬件到用户应用的存储层次结构,各层负责不同功能,共同实现数据的存储与访问。典型分层结构如下:
物理层(Physical Layer)
- 底层物理存储设备:硬盘(HDD)、固态硬盘(SSD)、NVMe 设备、RAID 阵列等。
- 功能:提供原始存储介质,通过硬件接口(如 SATA、PCIe)与上层交互。
设备层(Device Layer)
- 对物理设备的抽象与管理:分区(如 MBR/GPT 分区表)、逻辑设备(如 LVM 的 PV)、硬件 RAID 控制器。
- 功能:将物理设备划分为可管理的逻辑单元,屏蔽硬件细节。
卷管理层(Volume Layer)
- 技术:LVM(逻辑卷管理)、Stratis、ZFS、Btrfs 等。
- 功能:整合多个物理 / 逻辑设备为存储池,动态分配逻辑卷,支持快照、thin provisioning(精简配置)、冗余等高级功能。
文件系统层(File System Layer)
- 技术:ext4、XFS、Btrfs、ZFS 等。
- 功能:管理逻辑卷上的文件组织,提供目录结构、权限控制、数据索引等,使应用可通过文件路径访问数据。
(2)Stratis存储管理
Stratis 是 Red Hat 主导开发的新一代本地存储管理工具,基于 LVM 和 XFS,提供简化的存储池管理、快照、thin provisioning 等功能,旨在替代传统 LVM 的复杂操作。
1. 核心概念
- 块设备(Block Device):物理存储设备(如
/dev/sdb)或分区,作为 Stratis 的底层存储。 - 池(Pool):由一个或多个块设备组成的存储池,类似于 LVM 的卷组(VG),是 Stratis 管理的基本单元。
- 文件系统(Filesystem):从池中创建的逻辑存储单元,类似于 LVM 的逻辑卷(LV),自动使用 XFS 格式化,支持动态扩展。
- 快照(Snapshot):文件系统的只读或可写副本,基于 COW(写时复制)机制,节省空间。
- Thin Provisioning:允许创建总容量超过池实际空间的文件系统,仅在数据写入时分配实际空间。
2. 安装 Stratis
# RHEL/CentOS 8+ 或 Fedora
dnf install stratis-cli stratisd -y# 启动并启用服务
systemctl enable --now stratisd3. 基本操作命令及示例
(1)创建存储池(Pool)
# 查看可用块设备(确认未被使用的设备,如/dev/sdb、/dev/sdc)
lsblk# 从单个设备创建池(pool0)
stratis pool create pool0 /dev/sdb# 从多个设备创建池(支持冗余,类似RAID1)
stratis pool create pool0 /dev/sdb /dev/sdc # 自动配置为镜像模式(冗余)(2)创建文件系统(Filesystem)
# 从pool0创建文件系统fs_data(大小自动为thin provisioning,初始不占用实际空间)
stratis filesystem create pool0 fs_data# 查看所有池和文件系统
stratis pool list # 查看池状态(总容量、已用空间等)
stratis filesystem list # 查看文件系统(所属池、挂载点等)(3)挂载文件系统
# 创建挂载点
mkdir /stratis_data# 挂载文件系统(使用Stratis的UUID或路径,推荐UUID)
# 查看UUID:stratis filesystem list
mount /dev/stratis/pool0/fs_data /stratis_data# 永久挂载(写入/etc/fstab,使用UUID)
echo "UUID=$(blkid -s UUID -o value /dev/stratis/pool0/fs_data) /stratis_data xfs defaults 0 0" >> /etc/fstab(4)扩展存储池(添加设备)
当池空间不足时,可添加新块设备扩展:
# 向pool0添加新设备/dev/sdd
stratis pool add-data pool0 /dev/sdd# 查看扩展后的池信息
stratis pool list pool0(5)管理快照(Snapshot)
# 为fs_data创建只读快照snap1
stratis filesystem snapshot pool0 fs_data snap1# 创建可写快照(-w选项)
stratis filesystem snapshot -w pool0 fs_data snap2# 查看快照
stratis filesystem list pool0 # 快照与原文件系统同属一个池# 挂载快照(与挂载普通文件系统相同)
mkdir /snap1_data
mount /dev/stratis/pool0/snap1 /snap1_data(6)删除操作
# 卸载文件系统/快照
umount /stratis_data
umount /snap1_data# 删除文件系统/快照
stratis filesystem destroy pool0 fs_data
stratis filesystem destroy pool0 snap1# 删除存储池(需先删除池中所有文件系统)
stratis pool destroy pool04. Stratis 与 LVM 的对比优势
- 简化操作:无需手动创建 PV/VG/LV,一步创建池和文件系统。
- 自动管理:文件系统自动使用 XFS,支持动态扩展(无需手动调整文件系统)。
- 高级功能:内置快照、thin provisioning,无需额外配置。
- 冗余支持:多设备池自动配置镜像(类似 RAID1),提升数据安全性。
三、知识点总结
- 分别说明 LVM 中物理卷(PV)、物理区块(PE)、卷组(VG)、逻辑卷(LV)的概念以及它们之间的关系。
LVM 中物理卷、物理区块、卷组、逻辑卷的概念及关系
物理卷(PV):指经过 LVM 初始化的物理存储设备(如硬盘分区、整个硬盘),是 LVM 的底层存储载体。
物理区块(PE):PV 被划分的最小可分配单元(默认 4MB),是 LVM 中数据分配的基本单位。
卷组(VG):由一个或多个 PV 组合而成的逻辑存储池,将多个 PV 的 PE 统一管理,形成一个可分配的 “资源池”。
逻辑卷(LV):从 VG 中分配部分 PE 形成的逻辑存储单元,可像普通分区一样格式化并挂载使用。
关系:PV 包含多个 PE;多个 PV 组成 VG,VG 统一管理所有 PV 的 PE;LV 从 VG 中分配指定数量的 PE 形成,本质是 PE 的集合。
2.简单说下创建 LVM 存储需要哪几个步骤。
初始化物理设备为 PV(pvcreate 设备路径);
将 PV 加入卷组 VG(vgcreate 卷组名 物理卷路径);
从 VG 中创建逻辑卷 LV(lvcreate -L 大小 -n 逻辑卷名 卷组名);
格式化 LV 并挂载使用(mkfs.文件系统 逻辑卷路径;mount 逻辑卷路径 挂载点)。
3.创建或扩展逻辑卷时,使用-l 和-L 选项来指定大小有什么区别?
-l:按物理区块(PE)数量指定大小(如 -l 100 表示分配 100 个 PE);
-L:按实际存储大小指定(如 -L 10G 表示分配 10GB 空间)。
