本手册基于 银河麒麟(ARM64)LVM 环境编写,涵盖运维中常见的存储扩容场景、完整操作步骤、文件系统适配知识及避坑要点,可作为长期学习和参考指南。
一、扩容核心概念与分类
1. 存储扩容的核心目标
解决服务器根目录、数据目录等分区空间不足的问题,分为 LVM 扩容 (推荐,灵活可扩展)和 非 LVM 扩容 (直接调整分区,灵活性差)两类,本手册以企业主流的 LVM 扩容 为主。
2. LVM 核心组件(必须掌握)
LVM(逻辑卷管理)通过将物理磁盘抽象为逻辑卷,实现存储的灵活扩容 / 缩容,核心组件关系:物理磁盘 → 物理卷(PV) → 卷组(VG) → 逻辑卷(LV) → 文件系统
| 组件 | 英文全称 | 作用 |
|---|---|---|
| 物理卷(PV) | Physical Volume | 将物理磁盘 / 分区初始化为 LVM 可识别的格式,是 LVM 的底层存储单元 |
| 卷组(VG) | Volume Group | 将多个 PV 合并为一个 "存储池",可动态添加 / 移除 PV |
| 逻辑卷(LV) | Logical Volume | 从 VG 中划分的逻辑分区,可直接格式化挂载,支持动态扩容 |
| 文件系统 | File System | 格式化 LV 的格式(如 XFS、Ext4),需单独扩容才能识别 LV 新增空间 |
3. 常见扩容场景
| 扩容场景 | 适用情况 | 核心特点 |
|---|---|---|
| 新增物理磁盘扩容 | 服务器有空闲磁盘槽位 / 可挂载新磁盘(如本次 vdb/vdc 扩容) |
最常用、无风险,不影响现有数据 |
| 现有磁盘未分配空间扩容 | 已挂载的磁盘存在未划分的空闲分区(如 /dev/vda 有剩余空间) |
无需新增硬件,需调整分区表 |
| 云服务器云盘扩容 | 云主机挂载的云盘容量不足(如阿里云 EBS、华为云 EVS) | 需先在云平台控制台扩容云盘,再在系统内操作 |
二、不同场景下的 LVM 扩容全步骤
场景 1:新增物理磁盘扩容(本次操作场景)
适用于服务器新增物理磁盘 / 云盘,需将新磁盘加入现有 LVM 卷组,扩展逻辑卷。
前置准备
-
确认新增磁盘 登录服务器,检查新磁盘是否被系统识别(无分区、无挂载)
# 查看磁盘列表,确认新增磁盘(如 vdb、vdc) lsblk # 检查磁盘是否有数据/分区(无输出则为干净磁盘) fdisk -l /dev/vdb -
备份关键数据 对根目录、数据库目录等核心数据进行备份(如
tar打包/etc、/var/lib/mysql),避免操作失误导致数据丢失。 -
选择操作时机 务必在 业务低峰期 执行(如凌晨),LVM 扩容为在线操作,不影响业务运行,但需避免高负载时操作。
步骤 1:创建物理卷(PV)
将新增的空白磁盘初始化为 LVM 物理卷
# 初始化单块磁盘(如 vdb)
pvcreate /dev/vdb
# 批量初始化多块磁盘(如 vdb、vdc)
pvcreate /dev/vdb /dev/vdc
# 验证 PV 创建结果(显示 vdb、vdc 状态为 available)
pvdisplay
常见问题 :若提示 device is busy,说明磁盘已被挂载或有分区,需先执行 umount /dev/vdb 卸载或 fdisk /dev/vdb 删除分区。
步骤 2:扩展卷组(VG)
将新创建的 PV 加入现有卷组(本次卷组名为 klas)
# 查看现有卷组信息(确认卷组名、剩余空间)
vgdisplay
# 将 PV 加入卷组 klas
vgextend klas /dev/vdb
# 批量加入多块 PV
vgextend klas /dev/vdb /dev/vdc
# 验证 VG 扩展结果(Free PE / Size 会增加新磁盘容量)
vgdisplay klas
步骤 3:扩展逻辑卷(LV)
从卷组中分配空间,扩展目标逻辑卷(本次目标 LV 为 /dev/mapper/klas-root)
# 方式1:使用卷组内所有剩余空间(推荐)
lvextend -l +100%FREE /dev/mapper/klas-root
# 方式2:指定扩容大小(如给根目录扩容 200G)
lvextend -L +200G /dev/mapper/klas-root /dev/vdb
# 验证 LV 扩展结果(LV Size 显示扩容后容量)
lvdisplay /dev/mapper/klas-root
参数说明:
-l +100%FREE:使用卷组内全部空闲空间;-L +200G:指定扩容大小(+表示新增,无+表示设置为目标大小)。
步骤 4:扩展文件系统
LV 扩容后,文件系统并未识别新增空间,需执行对应命令扩展文件系统(关键步骤!)
| 文件系统类型 | 扩容命令 | 特点 |
|---|---|---|
| XFS(本次使用) | xfs_growfs /dev/mapper/klas-root |
仅支持在线扩容,不支持缩容 |
| Ext4 | resize2fs /dev/mapper/klas-root |
支持在线扩容 / 缩容,需先执行 e2fsck -f 检查 |
# 查看文件系统类型(确认根目录为 XFS)
df -Th /
# XFS 文件系统扩容
xfs_growfs /dev/mapper/klas-root
步骤 5:扩容验证
# 1. 查看文件系统容量(根目录容量应显示为扩容后大小)
df -h /
# 2. 查看 LVM 各组件状态(确认 PV/VG/LV 均正常)
pvdisplay && vgdisplay klas && lvdisplay /dev/mapper/klas-root
✅ 预期结果:根目录容量从 83G 扩展至 483G,业务运行无异常。
场景 2:现有磁盘未分配空间扩容
适用于已挂载的磁盘(如 /dev/vda)存在未划分的空闲空间,无需新增硬件。
核心步骤
-
调整分区表 :使用
fdisk或gdisk删除原有分区,重新创建更大的分区(需注意分区类型为8e(LVM))。# 进入 fdisk 工具 fdisk /dev/vda # 输入 p 查看分区表 → d 删除现有 LVM 分区 → n 创建新分区 → t 修改类型为 8e → w 保存 -
扩展物理卷 :更新 PV 大小,使其识别新增的分区空间
pvresize /dev/vda2 -
后续步骤:重复 「场景 1 步骤 2 - 步骤 5」(扩展 VG → 扩展 LV → 扩展文件系统)。
场景 3:云服务器云盘扩容
适用于阿里云、华为云等云平台的云主机,需先在控制台扩容云盘,再在系统内操作。
核心步骤
-
云平台控制台扩容:登录云平台 → 找到目标云盘 → 执行「扩容」操作(如将 100G 扩容为 500G)。
-
系统内扫描磁盘 :刷新磁盘信息,使系统识别扩容后的容量
# 重新扫描 SCSI 总线(通用命令) echo 1 > /sys/class/block/vda/device/rescan -
后续步骤 :
- 若云盘为 LVM 格式:重复「场景 2 步骤 1 - 步骤 5」;
- 若云盘为非 LVM 格式:使用
resize2fs/xfs_growfs直接扩展文件系统。
三、关键知识补充与避坑指南
1. 在线扩容 vs 离线扩容
| 操作类型 | 适用场景 | 注意事项 |
|---|---|---|
| 在线扩容 | LVM 扩容、XFS/Ext4 文件系统扩容 | 无需卸载分区,不影响业务运行,推荐生产环境使用 |
| 离线扩容 | 非 LVM 分区扩容、文件系统缩容 | 需卸载分区,会中断业务,需提前停机维护 |
2. 常见问题排查
| 问题现象 | 原因 | 解决方案 |
|---|---|---|
df -h 显示容量未变化 |
仅扩展了 LV,未扩展文件系统 | 执行 xfs_growfs/resize2fs 命令 |
pvcreate 提示 device is busy |
磁盘已挂载或存在分区 | 执行 umount /dev/vdb 卸载,或 fdisk 删除分区 |
lvextend 提示 insufficient free space |
卷组剩余空间不足 | 检查 VG 剩余空间,或新增 PV 加入 VG |
3. 重要注意事项
- 扩容前必备份:无论何种场景,扩容前必须备份核心数据,避免分区表损坏或命令错误导致数据丢失。
- 区分文件系统类型 :XFS 和 Ext4 的扩容命令不同,需先用
df -Th确认类型,避免用错命令。 - 避免缩容操作:XFS 文件系统不支持缩容,Ext4 缩容风险极高(易导致数据损坏),生产环境尽量不执行缩容。
- 记录操作步骤:扩容过程中记录每一步命令和输出,便于出现问题时回滚排查。
四、扩容后维护建议
- 定期检查存储状态 :每周执行
df -h、vgdisplay检查磁盘使用率和 LVM 状态,提前预警空间不足。 - 监控告警配置:在 Zabbix、Prometheus 等监控平台配置磁盘使用率告警(如使用率超过 80% 触发告警)。
- 文档归档:将本次扩容的步骤、命令、验证结果归档,作为后续扩容的参考模板。