CentOS/RHEL LVM 磁盘扩展完整教程

CentOS/RHEL LVM 磁盘扩展完整教程

📝 前言

在Linux系统管理中,磁盘空间不足是经常遇到的问题。特别是在生产环境中,当根分区空间告急时,我们需要通过添加新磁盘来扩展存储空间。本教程将详细介绍如何在CentOS/RHEL系统中使用LVM(Logical Volume Manager)来扩展现有的逻辑卷。

🎯 适用场景

  • 根分区磁盘空间不足(使用率超过80%)
  • 系统使用LVM管理磁盘
  • 需要在线扩展磁盘空间而不停机
  • 有新的物理磁盘可以添加到系统

📚 LVM 基础概念

LVM 三层架构

复制代码
物理磁盘 → 物理卷(PV) → 卷组(VG) → 逻辑卷(LV) → 文件系统
  1. 物理卷(Physical Volume, PV):实际的物理磁盘或分区
  2. 卷组(Volume Group, VG):多个物理卷组成的存储池
  3. 逻辑卷(Logical Volume, LV):从卷组中分配的逻辑存储单元

LVM 的优势

  • 灵活性:可以动态调整分区大小
  • 扩展性:可以跨多个物理磁盘
  • 快照功能:支持创建快照备份
  • 在线操作:大多数操作可以在不停机的情况下进行

🔍 准备工作:识别可用磁盘

1. 查看系统磁盘状态

bash 复制代码
# 查看磁盘分区信息
lsblk -l

# 查看磁盘使用情况
df -h

# 查看磁盘详细信息
fdisk -l

命令说明:

  • lsblk -l:以列表形式显示所有块设备

  • df -h:显示文件系统磁盘使用情况,-h 参数以可读格式显示

  • fdisk -l:列出所有磁盘和分区的详细信息

2. 识别可扩展的磁盘

查看 lsblk 输出,寻找以下特征的磁盘:

  • 未挂载的磁盘:MOUNTPOINT 列为空
  • 未分区的磁盘:只显示磁盘本身,没有分区(如 sdc 但没有 sdc1)
  • 足够大的磁盘:SIZE 列显示的容量满足需求

3. 查看当前LVM状态

bash 复制代码
# 查看物理卷
pvs
pvdisplay

# 查看卷组
vgs  
vgdisplay

# 查看逻辑卷
lvs
lvdisplay

命令说明:

  • pvs/pvdisplay:显示物理卷信息,pvs 简洁格式,pvdisplay 详细格式

  • vgs/vgdisplay:显示卷组信息和可用空间

  • lvs/lvdisplay:显示逻辑卷信息和使用情况

🛠️ 磁盘扩展详细步骤

步骤1:确认文件系统类型

bash 复制代码
# 方法1:查看挂载信息
mount | grep " / "

# 方法2:显示文件系统类型
df -T /

# 方法3:显示块设备文件系统
lsblk -f


为什么需要确认文件系统类型?

  • 不同文件系统使用不同的扩展命令
  • XFS 使用 xfs_growfs
  • EXT4 使用 resize2fs

步骤2:对新磁盘进行分区

bash 复制代码
# 使用 fdisk 对磁盘进行分区(假设新磁盘为 /dev/sdc)
fdisk /dev/sdc

在 fdisk 交互界面中的操作:

复制代码
命令 (m 为帮助): n        # 创建新分区
分区类型: p              # 主分区
分区号: 1                # 分区号为1
起始扇区: 回车            # 使用默认值
结束扇区: 回车            # 使用整个磁盘
命令 (m 为帮助): t        # 修改分区类型
分区号: 1                # 选择分区1
分区类型: 8e             # LVM类型
命令 (m 为帮助): w        # 写入分区表并退出

步骤作用:

  • 创建分区表,让系统能够识别磁盘
  • 设置分区类型为 LVM (8e),便于后续操作
  • 建议使用整个磁盘作为一个分区

步骤3:创建物理卷

bash 复制代码
# 创建物理卷
pvcreate /dev/sdc1

# 验证物理卷创建成功
pvs


命令作用:

  • pvcreate:将分区初始化为LVM物理卷
  • 在分区上创建LVM元数据
  • 使分区能够被LVM管理

步骤4:扩展卷组

bash 复制代码
# 查看现有卷组名称
vgdisplay

# 将新物理卷添加到卷组(假设卷组名为 centos_centos)
vgextend centos_centos /dev/sdc1

# 验证卷组扩展成功
vgs


命令作用:

  • vgextend:将新的物理卷添加到现有卷组
  • 增加卷组的总容量
  • 为后续逻辑卷扩展提供空间

步骤5:扩展逻辑卷

bash 复制代码
# 查看卷组可用空间
vgdisplay centos_centos

# 方法1:使用所有可用空间扩展逻辑卷
lvextend -l +100%FREE /dev/mapper/centos_centos-root

# 方法2:指定扩展大小(例如500G)
# lvextend -L +500G /dev/mapper/centos_centos-root

# 验证逻辑卷扩展成功
lvs


参数说明:

  • -l +100%FREE:使用卷组中所有可用空间
  • -L +500G:指定增加500G空间
  • -L 1T:指定总大小为1T

步骤6:扩展文件系统

bash 复制代码
# 对于 XFS 文件系统(CentOS 7/8 默认)
xfs_growfs /

# 对于 EXT4 文件系统
# resize2fs /dev/mapper/centos_centos-root


命令作用:

  • xfs_growfs:扩展XFS文件系统到逻辑卷的完整大小
  • resize2fs:扩展EXT4文件系统
  • 必须在逻辑卷扩展后执行,否则新空间无法使用

步骤7:验证扩展结果

bash 复制代码
# 查看磁盘使用情况
df -h

# 查看LVM状态
lvs
vgs
pvs

# 查看详细的挂载信息
mount | grep mapper

📊 操作前后对比示例

扩展前:

bash 复制代码
[root@centos ~]# df -h
/dev/mapper/centos_centos-root  641G  601G   41G  94% /

[root@centos ~]# vgs
VG            #PV #LV #SN Attr   VSize   VFree
centos_centos   2   2   0 wz--n- 648.99g    0

扩展后:

bash 复制代码
[root@centos ~]# df -h
/dev/mapper/centos_centos-root  1.2T  601G  541G  53% /

[root@centos ~]# vgs
VG            #PV #LV #SN Attr   VSize VFree
centos_centos   3   2   0 wz--n- 1.12t    0

⚠️ 重要注意事项

1. 备份数据

bash 复制代码
# 创建重要数据备份
tar -czf /tmp/important_data_backup.tar.gz /path/to/important/data

# 或使用 rsync 同步到其他服务器
rsync -avz /important/data/ user@backup-server:/backup/path/

2. 确认磁盘没有被使用

bash 复制代码
# 检查磁盘是否被挂载
mount | grep sdc

# 检查磁盘是否有文件系统
blkid /dev/sdc

# 确认磁盘不在fstab中
grep sdc /etc/fstab

🔧 故障排除

常见错误及解决方案

1. 分区表错误
bash 复制代码
错误:Device or resource busy
解决:umount /dev/sdc1 或重启系统
2. 物理卷创建失败
bash 复制代码
错误:Device /dev/sdc1 not found or ignored by filtering
解决:partprobe /dev/sdc  # 重新读取分区表
3. 文件系统扩展失败
bash 复制代码
错误:xfs_growfs: /dev/mapper/centos_centos-root is not a mounted XFS filesystem
解决:确认文件系统类型和挂载点正确

回滚操作(如果需要)

bash 复制代码
# 如果需要移除新添加的磁盘
vgreduce centos_centos /dev/sdc1
pvremove /dev/sdc1

📝 一键脚本示例

bash 复制代码
#!/bin/bash
# LVM 扩展自动化脚本

DISK="/dev/sdc"
VG_NAME="centos_centos"
LV_PATH="/dev/mapper/centos_centos-root"

echo "开始LVM磁盘扩展..."

# 1. 分区
echo "正在对 $DISK 进行分区..."
(
echo n
echo p
echo 1
echo
echo
echo t
echo 8e
echo w
) | fdisk $DISK

# 2. 创建物理卷
echo "创建物理卷..."
pvcreate ${DISK}1

# 3. 扩展卷组
echo "扩展卷组..."
vgextend $VG_NAME ${DISK}1

# 4. 扩展逻辑卷
echo "扩展逻辑卷..."
lvextend -l +100%FREE $LV_PATH

# 5. 扩展文件系统
echo "扩展文件系统..."
xfs_growfs /

echo "扩展完成!"
df -h /

🎉 总结

LVM磁盘扩展是Linux系统管理中的常见操作,掌握这项技能对系统管理员来说非常重要。通过本教程,你应该能够:

  1. 理解LVM架构:掌握PV、VG、LV的概念和关系
  2. 识别可用磁盘:使用各种命令查看和分析磁盘状态
  3. 执行扩展操作:按步骤完成完整的磁盘扩展过程
  4. 处理常见问题:识别和解决扩展过程中的常见错误

磁盘操作具有一定风险,建议在生产环境操作前先在测试环境中练习

相关推荐
设计师小聂!6 分钟前
linux常用命令(一)
linux·运维·服务器
hnlucky12 分钟前
《Nginx + 双Tomcat实战:域名解析、静态服务与反向代理、负载均衡全指南》
java·linux·服务器·前端·nginx·tomcat·web
cui_win21 分钟前
【网络】Linux 内核优化实战 - net.ipv4.tcp_congestion_control
linux·网络·tcp/ip
笑稀了的野生俊1 小时前
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32‘ not found
linux·人工智能·ubuntu·大模型·glibc·flash-attn
千帐灯无此声1 小时前
Linux 测开:日志分析 + 定位 Bug
linux·c语言·c++·bug
誰能久伴不乏2 小时前
深入了解 Vim 编辑器:从入门到精通
linux·编辑器·vim
ghie90902 小时前
在Centos系统上如何有效删除文件和目录的指令汇总
linux·运维·centos
Linux-palpitate2 小时前
Keepalived+LVS实现LNMP网站的高可用部署
linux·运维·服务器·mysql·lvs
潇-xiao2 小时前
进程状态 + 进程优先级切换调度-进程概念(5)
linux·笔记
CZZDg2 小时前
LVS负载均衡-DR模式配置
运维·负载均衡·lvs