声明:本文仅作学习交流使用,引用需标明出处。
如有谬误,敬请指正
Linux 进阶:LVM 逻辑卷管理与 RAID 磁盘阵列全解析
在 Linux 系统运维中,物理磁盘分区面临空间零散、无法动态扩容,以及数据存储效率低、冗余性差等问题。逻辑卷管理(LVM) 和 RAID 磁盘阵列 作为两大核心存储技术,分别从弹性空间管理和磁盘整合优化角度解决了上述痛点。本文将融合核心知识点,从概念、实操、核心特性等方面全面解析 LVM 和 RAID,修正文档谬误,形成从原理到实践的完整知识体系。
一、逻辑卷管理(LVM):弹性化的存储管理方案
LVM 是在传统存储流程 分区规划 → 格式化 中新增的 逻辑层 ,通过虚拟整合多块物理存储资源,打造为可 动态扩容、灵活调整大小 的虚拟磁盘分区,彻底解决物理分区空间零散、扩容繁琐的问题。
其核心为三层架构,从底层到上层依次为 物理卷(PV) 、卷组(VG) 、逻辑卷(LV),整体使用流程为:
识别硬盘 → 分区规划 → 物理卷 → 卷组 → 逻辑卷 → 格式化 → 挂载使用
💡 一句话总结:LVM 就是为了打破物理磁盘边界,实现存储空间的整合、统一管理并弹性分配存储空间。
1.1 LVM 核心组件及概念
LVM 的三层组件各司其职,形成 零散存储整合(未分区的整块磁盘 或 未格式化的独立分区)→ 虚拟存储池 → 弹性分区使用 的完整链路。同时,卷组(VG)与 MBR 分区体系的扩展分区存在高度类比性,便于理解其"容器"属性。
LVM 三层核心架构
| 层级 | 组件 | 说明 |
|---|---|---|
| 底层 | 物理卷(PV) | LVM 的底层物理存储单元,直接对应硬盘或硬盘分区,是已规整的存储原材料。可在创建卷组时由系统自动转换。 |
| 中层 | 卷组(VG) | 由多个物理卷整合而成的虚拟存储空间,自身无法直接存储数据,仅作为容纳逻辑卷的"容器",相当于 LVM 体系中的"扩展分区"。 |
| 上层 | 逻辑卷(LV) | 从卷组中划分出的虚拟逻辑分区,可被格式化、挂载并直接存储数据,是用户实际操作的存储单元,支持动态调整大小。 |
卷组(VG)与扩展分区的类比
二者本质均为"容器",核心特性高度一致:
共同特性:
- 自身不能直接存储数据(扩展分区 ≠ 可存文件的分区,卷组 ≠ 可格式化挂载的逻辑卷)
- 仅用来包含更小的存储单元(扩展分区包含逻辑分区,卷组包含逻辑卷)
- 均为解决"数量/空间不够"的问题(扩展分区突破 MBR 主分区最多 4 个的限制,卷组整合多块 PV 突破单个磁盘空间的限制)
体系层级对应关系:
| 层级 | MBR 分区体系 | LVM 体系 | 角色 |
|---|---|---|---|
| 物理层 | 硬盘 /dev/sda |
硬盘 /dev/sda |
裸设备 |
| 原料层 | 主分区 | PV(物理卷) | 已规整的原材料 |
| 容器层 | 扩展分区 | VG(卷组) | 存储容器 |
| 可用层 | 逻辑分区 | LV(逻辑卷) | 最终可用单元 |
🧱 通俗理解:物理卷(PV)是零散的存储空间,好似砖头;卷组(VG)是整合后的存储池,好似砖头堆成的建材池;逻辑卷(LV)是弹性的存储空间,如同可随时切割的房间;LVM 则是整个弹性空间的管理者。
1.2 LVM 核心管理工具集
物理卷、卷组、逻辑卷的管理命令按功能分类如下(加粗为最常用命令,掌握这些即可):
| 功能 | 物理卷(PV)管理 | 卷组(VG)管理 | 逻辑卷(LV)管理 |
|---|---|---|---|
| scan 扫描/查看 | pvs |
vgs |
lvs |
| create 创建 | pvcreate |
vgcreate |
lvcreate |
| display 显示 | pvdisplay |
vgdisplay |
lvdisplay |
| remove 删除 | pvremove |
vgremove |
lvremove |
| extend 扩展 | 无 | vgextend |
lvextend |
remove删除使用中的逻辑卷必须先卸载挂载,并删除对应/etx/fstab配置
⚠️ 注意 :区分字母
l与数字1,避免1vcreate/Ivdisplay等书写错误。
1.3 LVM 完整部署及使用(全实操步骤)
以 虚拟机中 20G 硬盘 /dev/sdb 为基础,采用 MBR 分区模式,划分 2 个 2G 主分区 /dev/sdb1、/dev/sdb2,完成从磁盘分区到逻辑卷永久挂载的全流程。
步骤1:环境准备与磁盘分区
通过 VMware 添加 20G SCSI 类型硬盘,系统识别为 /dev/sdb,使用 fdisk 划分 2 个 2G 主分区:
bash
[root@localhost ~]# lsblk /dev/sdb # 查看新磁盘,确认识别
[root@localhost ~]# fdisk /dev/sdb # 进入分区工具
# 创建 sdb1(2G 主分区):n → p → 分区号 1 → 起始扇区默认 → 结束扇区 +2G
# 创建 sdb2(2G 主分区):n → p → 分区号 2 → 起始扇区默认 → 结束扇区 +2G
# 查看分区表:p
# 保存并退出:w
[root@localhost ~]# partprobe /dev/sdb # 刷新分区表,让系统识别新分区
[root@localhost ~]# lsblk /dev/sdb # 验证分区结果
步骤2:创建物理卷(PV)
将空闲分区转换为物理卷,支持批量创建:
bash
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2 # 批量创建 PV
[root@localhost ~]# pvs # 查看 PV 创建结果
步骤3:创建卷组(VG)
将多个物理卷整合为卷组,示例命名为 systemvg,整合后容量约 4G:
bash
[root@localhost ~]# vgcreate systemvg /dev/sdb1 /dev/sdb2 # 整合 PV 为 VG
[root@localhost ~]# vgs # 查看 VG 创建结果
步骤4:创建逻辑卷(LV)
从卷组中划分指定大小的逻辑卷,核心参数 -L 指定大小、-n 指定名称:
bash
[root@localhost ~]# lvcreate -L 180M -n vo systemvg # 创建 LV
[root@localhost ~]# lvs # 查看 LV 创建结果
易错点:指定名称后不要忘记后接卷组名
步骤5:格式化逻辑卷
将逻辑卷格式化为主流文件系统(如 ext4):
bash
[root@localhost ~]# mkfs.ext4 /dev/systemvg/vo # 格式化为 ext4
[root@localhost ~]# blkid /dev/systemvg/vo # 查看文件系统信息
步骤6:挂载逻辑卷(临时 + 永久)
逻辑卷需挂载至指定目录才能使用,临时挂载重启失效,永久挂载需编辑 /etc/fstab:
bash
# 临时挂载
[root@localhost ~]# mkdir /vo # 创建挂载点
[root@localhost ~]# mount /dev/systemvg/vo /vo # 执行挂载
# 永久挂载
[root@localhost ~]# vim /etc/fstab # 编辑配置文件
# 添加行:/dev/systemvg/vo /vo ext4 defaults 0 0
[root@localhost ~]# mount -a # 验证挂载配置
[root@localhost ~]# df -hT # 验证挂载结果
[root@localhost ~]# echo 123 > /vo/test01.txt # 写入测试文件
[root@localhost ~]# cat /vo/test01.txt # 读取文件,验证可读写
1.4 LVM 动态扩容(核心实操,分两种场景)
LVM 的核心优势是 动态扩容不中断使用 。扩容需完成两步核心操作:更新逻辑卷空间 + 更新文件系统大小(仅扩容逻辑卷,文件系统无法识别新空间)。
扩容前需先判断卷组空间是否充足,并根据文件系统类型选择不同的刷新命令:
| 文件系统类型 | 刷新命令 |
|---|---|
| ext3 / ext4 | resize2fs |
| xfs | xfs_growfs |
场景1:卷组空间充足(直接扩容 LV + 刷新文件系统)
以将 /dev/systemvg/vo 从 180M 扩容至 300M 为例:
bash
# 步骤1:扩容逻辑卷
[root@localhost ~]# lvextend -L 300M /dev/systemvg/vo
[root@localhost ~]# lvs # 查看 LV 已扩容
# 此时 df -Th 查看文件系统仍为原大小
# 步骤2:刷新 ext4 文件系统
[root@localhost ~]# resize2fs /dev/systemvg/vo
[root@localhost ~]# df -Th # 验证文件系统已扩容至 300M
场景2:卷组空间不足(准备新磁盘/分区 → 先扩 VG → 再扩 LV → 最后刷新文件系统)
以将 /dev/systemvg/vo 扩容至 5G 为例(原 VG 仅 4G,空间不足),需先划分新分区并扩容卷组:
bash
# 步骤1:划分 6G 新分区 /dev/sdb3
[root@localhost ~]# fdisk /dev/sdb # n → p → 分区号 3 → +6G → w
[root@localhost ~]# partprobe /dev/sdb # 刷新分区表
# 步骤2:扩容卷组(卷组扩容时会自动将新分区转换为物理卷)
[root@localhost ~]# vgextend systemvg /dev/sdb3
[root@localhost ~]# vgs # 验证 VG 扩容结果(约 10G)
# 步骤3:扩容逻辑卷
[root@localhost ~]# lvextend -L 5G /dev/systemvg/vo
[root@localhost ~]# lvs # 验证 LV 已扩容至 5G
# 步骤4:刷新文件系统
[root@localhost ~]# resize2fs /dev/systemvg/vo
[root@localhost ~]# df -Th # 验证文件系统已扩容至 5G
1.5 卷组的 PE 设置:LVM 空间划分的最小单位
PE(Physical Extent,物理扩展)是 卷组 划分空间的 最小单位,直接决定逻辑卷的空间划分精度,是 LVM 的核心底层参数。
📌 默认 PE 大小为 4M,创建卷组时可指定,也可对已存在的卷组进行修改。
1.5.1 PE 基础特性
- 只能多给、不能少给:创建逻辑卷时,若目标空间不是 PE 的整数倍,系统会自动分配下一个整数倍的 PE 空间(如 250M 按 4M PE 计算,实际分配 252M,即 63 × 4 = 252M)
- PE 大小决定划分精度,默认 4M 精度较低,可自定义为 1M 实现精准划分
1.5.2 PE 大小的设置与修改
bash
# 查看当前 PE 大小(默认 4M)
[root@localhost ~]# vgdisplay systemvg | grep "PE Size"
# 方式1:创建卷组时指定 PE(示例 1M)
[root@localhost ~]# vgcreate -s 1M systemvg /dev/sdb1 /dev/sdb2
# 方式2:修改已存在卷组的 PE(示例 1M)
[root@localhost ~]# vgchange -s 1M systemvg
# 验证 PE 修改结果
[root@localhost ~]# vgdisplay systemvg | grep "PE Size"
⚠️ 注意 :
vgchange -s命令仅支持修改 未激活 的卷组,生产环境操作前请确保已停用卷组中的逻辑卷。
1.5.3 按 PE 个数创建逻辑卷
除了用 -L 指定具体大小,还可通过 -l(小写 L)指定 PE 个数 创建逻辑卷:
bash
# 创建 600 个 PE 的逻辑卷(PE 为 1M 则为 600M,PE 为 4M 则为 2400M)
[root@localhost ~]# lvcreate -l 600 -n testvo03 systemvg
[root@localhost ~]# lvs # 查看 LV 大小
1.6 LVM 综合实操案例
修改 systemvg 卷组 PE 为 4M,创建 2G 逻辑卷 film,格式化为 xfs 并永久挂载至 /film,扩容至 4G 并刷新文件系统:
bash
# 1. 修改 PE 为 4M
[root@localhost ~]# vgchange -s 4M systemvg
# 2. 创建 2G 逻辑卷
[root@localhost ~]# lvcreate -L 2G -n film systemvg
# 3. 格式化为 xfs
[root@localhost ~]# mkfs.xfs /dev/systemvg/film
# 4. 永久挂载
[root@localhost ~]# mkdir /film
[root@localhost ~]# echo "/dev/systemvg/film /film xfs defaults 0 0" >> /etc/fstab
[root@localhost ~]# mount -a
# 5. 扩容至 4G
[root@localhost ~]# lvextend -L 4G /dev/systemvg/film
# 6. 刷新 xfs 文件系统
[root@localhost ~]# xfs_growfs /dev/systemvg/film
# 7. 验证结果
[root@localhost ~]# lvs && df -Th
二、RAID 磁盘阵列:效率与冗余的磁盘整合方案
RAID 即 廉价冗余磁盘阵列(Redundant Arrays of Inexpensive Disks) ,通过硬件或软件技术将多个较小/低速的磁盘整合为一个大容量虚拟磁盘,核心价值是 提升 I/O 读写效率 和实现 硬件级别的数据冗余。
2.1 主流 RAID 级别核心原理与特性
课程重点讲解 RAID 0、RAID 1、RAID 10、RAID 5 四种级别:
| RAID 级别 | 核心原理 | 特点 | 适用场景 |
|---|---|---|---|
| RAID 0 条带模式 | 将同一文件分散存储在不同磁盘,并行写入/读取 | 磁盘利用率 100%,I/O 读写性能最高;无容错性,单盘损坏则所有数据丢失 | 仅追求效率,不要求数据安全的场景(如临时文件存储) |
| RAID 1 镜像模式 | 将同一文件复制多份,分别写入不同磁盘 | 磁盘利用率 ≤50%,I/O 读写性能最低;有容错性,单盘损坏可从镜像恢复 | 数据安全性要求极高,效率要求低的场景 |
| RAID 10 组合模式 | 先做 RAID 1 镜像,再对镜像组做 RAID 0 条带 | 磁盘利用率 ≤50%,I/O 读写性能中等;容错性高,每组镜像中仅坏 1 块数据不丢失 | 兼顾效率与安全的企业核心业务(如数据库存储) |
| RAID 5 高性价比模式(分布式校验,R0和R1的折中方案) | 数据分散存储,校验数据分布式存放在各磁盘 | 磁盘利用率 (n-1)/n,I/O 读写性能较高;有容错性,单盘损坏可通过校验恢复 | 兼顾成本、效率与安全,企业最常用 |
(了解)RAID 6:在RAID 5的基础上再加一块盘用来校验
2.2 RAID 各级别核心参数对比
| 对比项 | RAID 0 | RAID 1 | RAID 10 | RAID 5 |
|---|---|---|---|---|
| 最少磁盘数 | ≥2 | ≥2 | ≥4 | ≥3 |
| 磁盘利用率 | 100% | ≤50% | ≤50% | (n-1)/n |
| 专用校验盘 | 无 | 无 | 无 | 无(分布式校验) |
| 容错性 | 无 | 有 | 有 | 有 |
| I/O 读写性能 | 高 | 低 | 中 | 较高 |
2.3 RAID 阵列的两种实现方式
| 对比项 | 硬 RAID | 软 RAID |
|---|---|---|
| 管理主体 | RAID 控制卡(专用硬件) | 操作系统的 RAID 软件(如 Linux 的 mdadm) |
| 数据流程 | 主板 → RAID 阵列卡 → 磁盘 → 操作系统 → 数据 | 主板 → 磁盘 → 操作系统 → RAID 软件 → 数据 |
| 优势 | 硬件级管理,不占用系统 CPU/内存,性能高、稳定性强 | 无需专用硬件,成本低,配置灵活 |
| 劣势 | 需要专用 RAID 阵列卡,硬件成本较高 | 占用系统 CPU/内存资源,性能略低于硬 RAID |
三、课程核心总结与实操关键点
LVM 和 RAID 作为 Linux 存储领域的核心技术,分别解决了 空间弹性管理 和 磁盘效率与冗余 的问题。
3.1 核心知识总结
- LVM 是支持动态扩容的虚拟分区技术,核心三层架构为 物理卷(PV)→ 卷组(VG)→ 逻辑卷(LV),解决了物理分区空间零散、无法动态扩容的痛点
- LVM 的核心操作包括创建(PV → VG → LV)、格式化、挂载,以及根据卷组空间是否充足的两种扩容方式,扩容后必须刷新文件系统才能让系统识别新空间
- PE 是卷组划分空间的最小单位,默认 4M,可自定义大小,支持按 PE 个数(
-l)或具体大小(-L)创建逻辑卷 - RAID 通过整合多块磁盘实现效率提升和数据冗余,RAID 0 追效率、RAID 1 追可靠、RAID 10 兼顾二者、RAID 5 高性价比(企业首选)
- RAID 的实现方式分为 硬 RAID (硬件管理,性能高、成本高)和 软 RAID(软件管理,成本低、占用系统资源)
3.2 实操关键点
- LVM 命令集 :牢记 PV/VG/LV 的创建、查看、扩展命令,区分 字母
l和数字1,避免书写错误 - 文件系统刷新 :严格区分 ext3/ext4(
resize2fs)和 xfs(xfs_growfs)的刷新命令,不可混用 - RAID 核心判断 :根据场景快速判断所需 RAID 级别,重点掌握各级别的 最少磁盘数、利用率、容错性
- LVM 扩容逻辑 :先判断卷组空间是否充足,不足时需先扩容卷组(
vgextend),且卷组扩容会自动将新分区转换为物理卷,无需手动创建 PV
通过掌握 LVM 和 RAID 的核心技术,可实现 Linux 系统存储的弹性化、高效化和高可用化,满足不同业务场景下的存储需求,是 Linux 进阶运维的必备技能。