1. 项目概述
在虚拟机环境中运行CentOS 7系统时,/data数据分区空间不足是运维人员经常遇到的棘手问题。上周我就处理了一个生产案例:某电商平台的日志存储分区在促销活动期间突然爆满,导致订单服务异常。这种场景下,快速安全地完成在线扩容成为关键技能。
传统物理服务器扩容需要停机加硬盘,而虚拟机环境下我们可以利用LVM(Logical Volume Manager)的特性实现不停机扩容。本文将基于VMware虚拟化平台,详细演示从虚拟机配置调整到系统层面完成的完整扩容流程,包含多种边界情况的处理方案。
重要提示:操作前务必对关键数据做完整备份,虽然LVM扩容过程相对安全,但任何磁盘操作都存在风险。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与原理分析
2.1 虚拟机磁盘配置检查
首先通过SSH连接到目标CentOS 7系统,使用lsblk命令查看当前磁盘布局:
bash复制[root@server ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─centos-root 253:0 0 45G 0 lvm /
└─centos-data 253:1 0 4G 0 lvm /data
从输出可见:
- 系统有单个50G虚拟磁盘(sda)
- /data分区仅有4G空间且采用LVM管理
- 根分区占用45G空间
2.2 LVM架构解析
LVM的三大核心组件:
- PV(Physical Volume):物理磁盘或分区
- VG(Volume Group):多个PV组成的存储池
- LV(Logical Volume):从VG划分出的逻辑卷
当前环境中:
- sda2分区是PV
- 该PV属于名为centos的VG
- /data对应的是centos-data这个LV
扩容原理:先在虚拟机层面增加磁盘容量,然后将新增空间加入PV,最终扩展LV和文件系统。
3. 虚拟机磁盘扩容操作
3.1 VMware虚拟机配置修改
- 关闭CentOS虚拟机(非必须但建议)
- 右键虚拟机 → 编辑设置 → 选择硬盘
- 将磁盘容量从50GB调整为70GB(示例值)
- 确认后开启虚拟机
注意:部分VMware版本需要先删除快照才能调整磁盘大小
3.2 系统层面识别新空间
使用fdisk查看调整后的磁盘:
bash复制[root@server ~]# fdisk -l /dev/sda
Disk /dev/sda: 75.2 GB, 75161927680 bytes
虽然虚拟机显示70G,但系统识别为75.2GB(计算方式差异)
但执行lsblk仍显示50G,因为新增空间尚未分配:
bash复制[root@server ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
[...]
4. 分区与LVM扩容实战
4.1 创建新分区
- 使用fdisk操作磁盘:
bash复制[root@server ~]# fdisk /dev/sda
- 输入
p查看现有分区表 - 输入
n创建新主分区 - 使用默认起始扇区(接续sda2之后)
- 使用全部剩余空间
- 输入
t修改分区类型为8e(LVM类型) - 输入
w保存退出
4.2 刷新内核分区表
无需重启的两种方法:
bash复制# 方法1:partprobe
[root@server ~]# partprobe /dev/sda
# 方法2:echo到sysfs
[root@server ~]# echo 1 > /sys/class/block/sda/device/rescan
验证新分区:
bash复制[root@server ~]# fdisk -l /dev/sda
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 104857599 102758400 49G 8e Linux LVM
/dev/sda3 104857600 146800639 41943040 20G 8e Linux LVM
4.3 LVM扩容全流程
- 创建物理卷:
bash复制[root@server ~]# pvcreate /dev/sda3
Physical volume "/dev/sda3" successfully created
- 扩展卷组:
bash复制[root@server ~]# vgextend centos /dev/sda3
Volume group "centos" successfully extended
- 查看可用空间:
bash复制[root@server ~]# vgdisplay centos
Free PE / Size 5119 / 20.00 GiB
- 扩展逻辑卷:
bash复制[root@server ~]# lvextend -L +10G /dev/centos/data
Size of logical volume centos/data changed from 4.00 GiB to 14.00 GiB
- 调整文件系统(针对xfs):
bash复制[root@server ~]# xfs_growfs /data
meta-data=/dev/mapper/centos-data isize=512 agcount=4, agsize=262144 blks
data = bsize=4096 blocks=1048576, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 1048576 to 3670016
5. 验证与异常处理
5.1 扩容结果验证
bash复制[root@server ~]# df -h /data
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-data 14G 3.2G 11G 23% /data
5.2 常见问题解决方案
问题1:fdisk看不到新增空间
- 检查虚拟机设置是否生效
- 在虚拟机执行
echo 1 > /sys/class/block/sda/device/rescan
问题2:vgextend报错"Device not found"
- 执行
partprobe刷新分区表 - 检查
/dev/sda3是否存在
问题3:xfs_growfs报错"not a mounted XFS filesystem"
- 确认文件系统类型:
blkid /dev/centos/data - ext4系统应使用:
resize2fs /dev/centos/data
问题4:LVM空间分配计算
- 查看PE大小:
vgdisplay centos | grep "PE Size" - 计算可扩展大小:
Free PE * PE Size
6. 高级技巧与优化建议
6.1 无损在线扩容方案
对于不能停机的生产环境:
- VMware热添加虚拟磁盘
- 系统识别新磁盘:
echo "- - -" > /sys/class/scsi_host/host0/scan - 后续LVM操作与前述一致
6.2 空间分配策略优化
建议保留10%-20%的VG空闲空间:
- 突发扩容需求
- 快照创建空间
- 避免碎片化影响性能
6.3 自动化监控脚本示例
创建容量监控脚本/usr/local/bin/check_disk.sh:
bash复制#!/bin/bash
THRESHOLD=90
DATA_USAGE=$(df -h /data | awk 'NR==2{print $5}' | cut -d'%' -f1)
if [ $DATA_USAGE -ge $THRESHOLD ]; then
echo "Warning: /data usage is ${DATA_USAGE}%" | mail -s "Disk Alert" admin@example.com
fi
设置cron每周检查:
bash复制0 0 * * 0 /usr/local/bin/check_disk.sh
7. 安全操作规范
-
操作前必须验证备份有效性
- 执行
tar -cvf /backup/data_backup.tar /data - 验证备份包:
tar -tvf /backup/data_backup.tar | head
- 执行
-
关键操作检查清单
步骤 检查项 验证命令 1 虚拟机磁盘扩容成功 fdisk -l /dev/sda2 新分区正确创建 lsblk /dev/sda3 PV加入VG pvdisplay /dev/sda34 LV扩展完成 lvdisplay /dev/centos/data5 文件系统调整 df -h /data -
回退方案
- 如果扩容失败:
bash复制
lvreduce -L -10G /dev/centos/data vgreduce centos /dev/sda3 pvremove /dev/sda3
- 如果扩容失败:
