一、问题背景
生产服务器运行一段时间后,磁盘空间不足是常见问题。数据库日志、应用日志、用户上传文件、备份文件等持续增长,根分区或数据分区空间告警,严重时可能导致服务不可用。
传统分区方式扩容困难,需要停机、备份数据、重新分区、恢复数据,风险高、耗时长。LVM(Logical Volume Manager)提供了灵活的磁盘管理方式,可以在线扩容,无需停机,无需数据迁移。
本文从实战角度出发,介绍 LVM 的核心概念、扩容前检查、扩容步骤、验证方法、常见问题处理、回滚方案和生产环境注意事项。
二、适用场景
- 根分区空间不足,需要扩容
- 数据分区空间不足,需要扩容
- 新增硬盘或云盘,需要扩展现有逻辑卷
- 虚拟机磁盘扩容后,需要将新空间分配给文件系统
- 容器或虚拟化环境中磁盘扩容
- 需要在线扩容,不能停机
不适用场景:
- 系统未使用 LVM,使用传统分区方式(需要先迁移到 LVM)
- 磁盘已损坏或文件系统损坏(需要先修复或恢复数据)
三、核心知识点
3.1 LVM 架构
LVM 分为三层:
物理卷(PV, Physical Volume)
↓
卷组(VG, Volume Group)
↓
逻辑卷(LV, Logical Volume)
↓
文件系统(ext4, xfs, etc.)
3.2 核心概念
物理卷(PV):
- 物理磁盘或分区,例如
/dev/sdb、/dev/sdb1 - 通过
pvcreate初始化为 LVM 物理卷 - 多个物理卷可以组成一个卷组
卷组(VG):
- 由一个或多个物理卷组成
- 卷组是 LVM 的存储池
- 可以从卷组中划分出多个逻辑卷
逻辑卷(LV):
- 从卷组中划分出的逻辑分区
- 逻辑卷可以动态调整大小
- 逻辑卷上创建文件系统后即可挂载使用
PE(Physical Extent):
- 物理卷的最小分配单位,默认 4MB
- 逻辑卷大小必须是 PE 的整数倍
LE(Logical Extent):
- 逻辑卷的最小分配单位,与 PE 大小相同
3.3 扩容原理
LVM 扩容分为两步:
- 扩展逻辑卷大小(
lvextend) - 扩展文件系统大小(
resize2fs或xfs_growfs)
逻辑卷扩容前提:
- 卷组有足够的剩余空间
- 若卷组空间不足,需要先添加新的物理卷到卷组
3.4 常见文件系统扩容命令
ext2/ext3/ext4:resize2fsxfs:xfs_growfsbtrfs:btrfs filesystem resize
注意:
ext4支持在线扩容和离线扩容xfs仅支持在线扩容,不支持缩容- 扩容前务必备份数据
四、整体扩容思路
1. 检查磁盘空间和 LVM 状态
2. 确认扩容目标(扩容哪个逻辑卷、扩容多大)
3. 检查卷组剩余空间
4. 若卷组空间不足,添加新物理卷到卷组
5. 扩展逻辑卷大小
6. 扩展文件系统大小
7. 验证扩容结果
8. 记录操作过程
五、实战步骤
5.1 扩容前检查
5.1.1 检查磁盘空间使用情况
bashdf -h
输出示例:
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs 7.8G 0 7.8G 0% /dev/shm
/dev/mapper/centos-root 50G 45G 5.0G 91% /
/dev/sda1 1014M 150M 865M 15% /boot
/dev/mapper/centos-home 100G 85G 15G 86% /home
判断逻辑:
/dev/mapper/centos-root使用率 91%,需要扩容/dev/mapper/centos-home使用率 86%,需要关注
/dev/mapper/centos-root 即为逻辑卷设备,centos 是卷组名,root 是逻辑卷名。
5.1.2 检查逻辑卷信息
bashlvdisplay
输出示例:
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID abc123-def456-ghi789
LV Write Access read/write
LV Creation host, time localhost, 2023-01-01 10:00:00 +0800
LV Status available
# open 1
LV Size 50.00 GiB
Current LE 12800
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
重点字段:
LV Path:逻辑卷设备路径LV Name:逻辑卷名称VG Name:所属卷组LV Size:当前大小
查看所有逻辑卷简要信息:
bashlvs
输出示例:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home centos -wi-ao---- 100.00g
root centos -wi-ao---- 50.00g
swap centos -wi-ao---- 4.00g
5.1.3 检查卷组信息
bashvgdisplay
输出示例:
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 2
Act PV 2
VG Size 199.00 GiB
PE Size 4.00 MiB
Total PE 50944
Alloc PE / Size 39424 / 154.00 GiB
Free PE / Size 11520 / 45.00 GiB
VG UUID xyz789-abc123-def456
重点字段:
VG Name:卷组名称VG Size:卷组总大小Alloc PE / Size:已分配空间Free PE / Size:剩余空间
判断逻辑:
- 若
Free PE / Size显示剩余空间充足,可以直接扩展逻辑卷 - 若剩余空间不足,需要先添加新物理卷到卷组
查看所有卷组简要信息:
bashvgs
输出示例:
VG #PV #LV #SN Attr VSize VFree
centos 2 3 0 wz--n- 199.00g 45.00g
5.1.4 检查物理卷信息
bashpvdisplay
输出示例:
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <99.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 25343
Free PE 0
Allocated PE 25343
PV UUID aaa111-bbb222-ccc333
--- Physical volume ---
PV Name /dev/sdb1
VG Name centos
PV Size <100.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 25600
Free PE 11520
Allocated PE 14080
PV UUID ddd444-eee555-fff666
重点字段:
PV Name:物理卷设备VG Name:所属卷组PV Size:物理卷大小Free PE:剩余空间
判断逻辑:
/dev/sda2已满,无剩余空间/dev/sdb1有剩余空间
查看所有物理卷简要信息:
bashpvs
输出示例:
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <99.00g 0
/dev/sdb1 centos lvm2 a-- <100.00g 45.00g
5.1.5 检查文件系统类型
bashdf -T
输出示例:
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs tmpfs 7.8G 0 7.8G 0% /dev/shm
/dev/mapper/centos-root xfs 50G 45G 5.0G 91% /
/dev/sda1 xfs 1014M 150M 865M 15% /boot
/dev/mapper/centos-home xfs 100G 85G 15G 86% /home
重点:
/dev/mapper/centos-root文件系统类型为xfs- 后续扩容时需要使用
xfs_growfs命令
或使用:
bashblkid /dev/mapper/centos-root
输出示例:
/dev/mapper/centos-root: UUID="abc123-def456" TYPE="xfs"
5.1.6 检查磁盘硬件
查看所有块设备:
bashlsblk
输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 4G 0 lvm [SWAP]
└─centos-home 253:2 0 45G 0 lvm /home
sdb 8:16 0 100G 0 disk
└─sdb1 8:17 0 100G 0 part
├─centos-home 253:2 0 100G 0 lvm /home
sdc 8:32 0 200G 0 disk
判断逻辑:
sda、sdb已分区并加入 LVMsdc是新添加的磁盘,未分区,可以用于扩容
5.2 场景一:卷组有剩余空间,直接扩展逻辑卷
适用场景:
vgs显示卷组有剩余空间(VFree> 0)- 需要扩容的逻辑卷所在卷组有空闲空间
5.2.1 备份重要数据
风险提示:
- 虽然 LVM 扩容通常安全,但仍建议备份关键数据
- 备份方式:tar 打包、rsync 同步、快照备份等
示例备份命令:
bashtar -czf /backup/root_backup_$(date +%Y%m%d).tar.gz -C / --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/backup .
或使用 rsync:
bashrsync -avzP / /backup/root_backup/ --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/backup
5.2.2 扩展逻辑卷
假设要将 /dev/centos/root 从 50GB 扩展到 80GB。
方式一:指定扩展后的总大小
bashlvextend -L 80G /dev/centos/root
方式二:指定增加的大小
bashlvextend -L +30G /dev/centos/root
方式三:使用所有剩余空间
bashlvextend -l +100%FREE /dev/centos/root
参数说明:
-L:指定大小(K, M, G, T)-l:指定 PE 数量+100%FREE:使用卷组中所有剩余空间
输出示例:
Size of logical volume centos/root changed from 50.00 GiB (12800 extents) to 80.00 GiB (20480 extents).
Logical volume centos/root successfully resized.
验证逻辑卷是否扩展成功:
bashlvs
输出示例:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home centos -wi-ao---- 100.00g
root centos -wi-ao---- 80.00g
swap centos -wi-ao---- 4.00g
确认 root 逻辑卷大小已变为 80GB。
5.2.3 扩展文件系统
逻辑卷扩展后,文件系统大小未变,需要手动扩展。
查看文件系统类型:
bashdf -T /
输出示例:
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 50G 45G 5.0G 91% /
文件系统类型为 xfs,使用 xfs_growfs 扩展。
5.2.3.1 扩展 xfs 文件系统
bashxfs_growfs /
或指定设备:
bashxfs_growfs /dev/mapper/centos-root
输出示例:
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=3276800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=6400, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 13107200 to 20971520
重点关注:
data blocks changed from 13107200 to 20971520:表示文件系统已扩展
5.2.3.2 扩展 ext4 文件系统
若文件系统类型为 ext4:
bashresize2fs /dev/mapper/centos-root
输出示例:
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/centos-root is mounted on /; on-line resizing required
old_desc_blocks = 7, new_desc_blocks = 10
The filesystem on /dev/mapper/centos-root is now 20971520 blocks long.
注意:
ext4支持在线扩容,无需卸载- 扩容前可先执行
e2fsck -f /dev/mapper/centos-root检查文件系统(需要卸载或进入单用户模式)
5.2.4 验证扩容结果
bashdf -h /
输出示例:
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 80G 45G 35G 57% /
确认:
- 容量已从 50GB 变为 80GB
- 可用空间已增加
查看逻辑卷信息:
bashlvdisplay /dev/centos/root
确认 LV Size 为 80GB。
5.3 场景二:卷组空间不足,需要添加新物理卷
适用场景:
vgs显示卷组剩余空间不足- 系统有新的硬盘或云盘可以使用
5.3.1 识别新磁盘
bashlsblk
输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 4G 0 lvm [SWAP]
└─centos-home 253:2 0 45G 0 lvm /home
sdb 8:16 0 100G 0 disk
└─sdb1 8:17 0 100G 0 part
└─centos-home 253:2 0 100G 0 lvm /home
sdc 8:32 0 200G 0 disk
判断逻辑:
sdc是新添加的 200GB 磁盘,未分区,可以直接使用- 若磁盘已分区,需要先删除分区或使用现有分区
查看磁盘分区信息:
bashfdisk -l /dev/sdc
输出示例:
Disk /dev/sdc: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00000000
确认磁盘无分区。
5.3.2 创建物理卷
5.3.2.1 直接使用整个磁盘
bashpvcreate /dev/sdc
输出示例:
Physical volume "/dev/sdc" successfully created.
验证:
bashpvs
输出示例:
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <99.00g 0
/dev/sdb1 centos lvm2 a-- <100.00g 45.00g
/dev/sdc lvm2 --- 200.00g 200.00g
/dev/sdc 已成为物理卷,但尚未加入卷组(VG 列为空)。
5.3.2.2 使用分区
若需要将磁盘分区后再创建物理卷:
创建分区:
bashfdisk /dev/sdc
操作步骤:
- 输入
n创建新分区 - 选择分区类型(
p主分区) - 输入分区号(默认 1)
- 输入起始扇区(默认)
- 输入结束扇区(默认,使用全部空间)
- 输入
t修改分区类型 - 输入
8e(Linux LVM 类型) - 输入
w保存并退出
或使用 parted:
bashparted /dev/sdc
(parted) mklabel gpt
(parted) mkpart primary 0% 100%
(parted) set 1 lvm on
(parted) quit
刷新分区表:
bashpartprobe /dev/sdc
创建物理卷:
bashpvcreate /dev/sdc1
5.3.3 将物理卷添加到卷组
bashvgextend centos /dev/sdc
参数说明:
centos:卷组名称/dev/sdc:要添加的物理卷
输出示例:
Volume group "centos" successfully extended
验证:
bashvgs
输出示例:
VG #PV #LV #SN Attr VSize VFree
centos 3 3 0 wz--n- 399.00g 245.00g
确认:
- 卷组
centos的物理卷数量从 2 增加到 3 - 卷组总大小从 199GB 增加到 399GB
- 剩余空间从 45GB 增加到 245GB
查看卷组详细信息:
bashvgdisplay centos
确认 Cur PV 和 VG Size 已更新。
5.3.4 扩展逻辑卷
添加物理卷到卷组后,卷组有了足够的剩余空间,可以按照【场景一】的步骤扩展逻辑卷。
例如,将 /dev/centos/root 扩展 50GB:
bashlvextend -L +50G /dev/centos/root
或使用所有剩余空间:
bashlvextend -l +100%FREE /dev/centos/root
5.3.5 扩展文件系统
根据文件系统类型选择命令:
xfs:
bashxfs_growfs /
ext4:
bashresize2fs /dev/mapper/centos-root
5.3.6 验证扩容结果
bashdf -h /
bashlvs
bashvgs
5.4 场景三:云服务器磁盘扩容
云服务器(阿里云、腾讯云、AWS 等)通常先在控制台扩展磁盘大小,然后在系统内部识别并扩容。
5.4.1 在云控制台扩展磁盘
登录云服务商控制台,找到对应实例,选择磁盘,执行扩容操作。
例如将 100GB 云盘扩展到 200GB。
注意:
- 部分云服务商扩容需要重启实例
- 部分云服务商支持在线扩容
5.4.2 在系统内识别新磁盘大小
扩容后,系统可能未自动识别新大小,需要手动刷新。
查看当前磁盘大小:
bashlsblk
输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 100G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 99G 0 part
├─centos-root 253:0 0 50G 0 lvm /
└─centos-home 253:1 0 49G 0 lvm /home
若 vda 仍显示 100GB,需要刷新:
bashecho 1 > /sys/class/block/vda/device/rescan
或重新扫描 SCSI 设备:
bashecho "- - -" > /sys/class/scsi_host/host0/scan
再次查看:
bashlsblk
输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 200G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 99G 0 part
├─centos-root 253:0 0 50G 0 lvm /
└─centos-home 253:1 0 49G 0 lvm /home
vda 已识别为 200GB,但分区 vda2 仍为 99GB。
5.4.3 扩展分区
使用 growpart 扩展分区(部分发行版需要安装 cloud-utils-growpart 包):
bashgrowpart /dev/vda 2
参数说明:
/dev/vda:磁盘设备2:分区号
输出示例:
CHANGED: partition=2 start=2099200 old: size=207616000 end=209715200 new: size=417331167 end=419430367
或使用 parted 手动扩展分区:
bashparted /dev/vda
(parted) print
(parted) resizepart 2 100%
(parted) quit
刷新分区表:
bashpartprobe /dev/vda
验证分区是否扩展:
bashlsblk
输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 200G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 199G 0 part
├─centos-root 253:0 0 50G 0 lvm /
└─centos-home 253:1 0 49G 0 lvm /home
vda2 已扩展到 199GB。
5.4.4 扩展物理卷
bashpvresize /dev/vda2
输出示例:
Physical volume "/dev/vda2" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
验证:
bashpvs
输出示例:
PV VG Fmt Attr PSize PFree
/dev/vda2 centos lvm2 a-- <199.00g 100.00g
物理卷 /dev/vda2 大小已从 99GB 增加到 199GB,卷组剩余空间增加 100GB。
5.4.5 扩展逻辑卷和文件系统
按照【场景一】的步骤扩展逻辑卷和文件系统。
5.5 场景四:扩容根分区
根分区扩容与普通分区扩容流程相同,但需要注意:
- 根分区通常不能卸载,必须在线扩容
- xfs 和 ext4 均支持在线扩容
- 扩容前务必备份关键数据
步骤与【场景一】或【场景二】相同。
5.6 场景五:扩容数据分区
数据分区扩容流程与根分区相同。
若数据分区可以卸载,建议卸载后再扩容(ext4 支持离线扩容,xfs 仅支持在线扩容)。
卸载分区:
bashumount /data
扩展逻辑卷:
bashlvextend -L +50G /dev/centos/data
扩展文件系统(ext4):
bashe2fsck -f /dev/centos/data
resize2fs /dev/centos/data
重新挂载:
bashmount /dev/centos/data /data
验证:
bashdf -h /data
若数据分区无法卸载,按照在线扩容流程操作。
六、常用命令汇总
6.1 查看命令
bash# 查看磁盘空间使用情况
df -h
df -T
# 查看块设备
lsblk
# 查看磁盘分区
fdisk -l
# 查看物理卷
pvs
pvdisplay
pvscan
# 查看卷组
vgs
vgdisplay
vgscan
# 查看逻辑卷
lvs
lvdisplay
lvscan
# 查看文件系统类型
blkid /dev/mapper/centos-root
6.2 创建命令
bash# 创建物理卷
pvcreate /dev/sdc
# 创建卷组
vgcreate vg_data /dev/sdc
# 创建逻辑卷
lvcreate -L 100G -n lv_data vg_data
# 创建文件系统
mkfs.xfs /dev/vg_data/lv_data
mkfs.ext4 /dev/vg_data/lv_data
6.3 扩展命令
bash# 扩展物理卷
pvresize /dev/vda2
# 扩展卷组
vgextend centos /dev/sdc
# 扩展逻辑卷
lvextend -L +50G /dev/centos/root
lvextend -l +100%FREE /dev/centos/root
# 扩展文件系统
xfs_growfs /
resize2fs /dev/mapper/centos-root
6.4 删除命令(慎用)
bash# 删除逻辑卷
lvremove /dev/centos/data
# 从卷组中移除物理卷
vgreduce centos /dev/sdc
# 删除卷组
vgremove centos
# 删除物理卷
pvremove /dev/sdc
风险提示:
- 删除操作会导致数据丢失
- 删除前务必备份数据
- 删除逻辑卷前需要先卸载
七、配置示例
7.1 完整创建 LVM 的示例
假设新服务器有两块硬盘 /dev/sdb 和 /dev/sdc,需要创建 LVM 并挂载到 /data。
7.1.1 创建物理卷
bashpvcreate /dev/sdb /dev/sdc
7.1.2 创建卷组
bashvgcreate vg_data /dev/sdb /dev/sdc
7.1.3 创建逻辑卷
bashlvcreate -L 500G -n lv_data vg_data
或使用所有空间:
bashlvcreate -l 100%FREE -n lv_data vg_data
7.1.4 创建文件系统
bashmkfs.xfs /dev/vg_data/lv_data
7.1.5 挂载
bashmkdir -p /data
mount /dev/vg_data/lv_data /data
7.1.6 写入 /etc/fstab
bashecho "/dev/vg_data/lv_data /data xfs defaults 0 0" >> /etc/fstab
验证:
bashdf -h /data
7.2 /etc/fstab 配置示例
bash# 根分区
/dev/mapper/centos-root / xfs defaults 0 0
# boot 分区
UUID=abc123-def456 /boot xfs defaults 0 0
# swap 分区
/dev/mapper/centos-swap swap swap defaults 0 0
# home 分区
/dev/mapper/centos-home /home xfs defaults 0 0
# 数据分区
/dev/vg_data/lv_data /data xfs defaults 0 0
建议使用 UUID 而非设备路径,避免设备名称变化导致挂载失败:
bashblkid /dev/mapper/centos-root
输出示例:
/dev/mapper/centos-root: UUID="abc123-def456" TYPE="xfs"
修改 /etc/fstab:
bashUUID=abc123-def456 / xfs defaults 0 0
八、日志与指标观察方法
8.1 查看系统日志
扩容过程中若出现错误,查看系统日志:
bashdmesg | tail -n 50
bashtail -f /var/log/messages
bashjournalctl -xe
8.2 监控磁盘空间
使用监控系统(Prometheus、Zabbix、Grafana)监控磁盘使用率。
Prometheus 查询磁盘使用率:
promql100 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100
设置告警规则,当磁盘使用率超过 80% 时告警。
8.3 查看扩容操作日志
LVM 命令执行后会记录日志:
bashgrep -E "lvm|lvextend|vgextend|pvcreate" /var/log/messages | tail -n 20
或查看 audit 日志:
bashausearch -m USER_CMD -c lvextend
九、排查路径
1. 检查磁盘空间是否不足
↓
2. 确认文件系统挂载点和逻辑卷路径
↓
3. 检查卷组是否有剩余空间
↓
4. 若卷组剩余空间充足:
- 扩展逻辑卷
- 扩展文件系统
- 验证结果
↓
5. 若卷组剩余空间不足:
- 检查是否有新磁盘可用
- 创建物理卷
- 将物理卷添加到卷组
- 扩展逻辑卷
- 扩展文件系统
- 验证结果
↓
6. 若是云服务器:
- 在控制台扩展磁盘
- 刷新系统识别
- 扩展分区
- 扩展物理卷
- 扩展逻辑卷
- 扩展文件系统
- 验证结果
↓
7. 记录操作过程和结果
十、风险提醒
10.1 数据风险
- LVM 扩容通常安全,但仍建议备份关键数据
- 扩容前检查文件系统是否有损坏(
xfs_repair、e2fsck) - 扩容过程中若断电或系统崩溃,可能导致文件系统损坏
10.2 操作风险
- 扩容命令写错可能导致逻辑卷或卷组无法使用
- 删除命令(
lvremove、vgremove、pvremove)会导致数据丢失 - 扩容前确认设备路径,避免操作错误的磁盘
10.3 性能风险
- 扩容过程中,文件系统扩展可能消耗较多 CPU 和 I/O 资源
- 建议在业务低峰期操作
- 扩容大容量逻辑卷时,文件系统扩展可能耗时较长
10.4 云服务器特殊风险
- 部分云服务商扩容需要重启实例
- 扩容后若未刷新系统识别,可能导致扩容失败
- 扩容分区时操作错误可能导致数据丢失
10.5 文件系统特殊风险
- xfs 仅支持扩容,不支持缩容
- ext4 支持扩容和缩容,但缩容需要卸载文件系统
- 扩容过程中不要中断操作
十一、验证方式
11.1 验证逻辑卷是否扩展
bashlvs
lvdisplay /dev/centos/root
确认 LV Size 是否符合预期。
11.2 验证文件系统是否扩展
bashdf -h /
确认容量是否增加。
11.3 验证卷组剩余空间
bashvgs
确认 VFree 是否减少。
11.4 验证物理卷是否添加
bashpvs
vgdisplay centos
确认物理卷数量和卷组大小。
11.5 验证文件系统完整性
xfs:
bashxfs_repair -n /dev/mapper/centos-root
-n 表示只检查,不修复。
ext4:
bashe2fsck -n /dev/mapper/centos-root
11.6 验证业务是否正常
- 检查业务日志是否有异常
- 检查应用是否能正常读写文件
- 检查数据库是否能正常启动
十二、回滚方案
12.1 逻辑卷扩展失败
若 lvextend 执行失败,通常不会影响现有数据。
检查错误信息,确认问题:
- 卷组剩余空间不足:添加物理卷或释放空间
- 设备路径错误:确认逻辑卷路径
- 文件系统已满:清理文件后再扩展
12.2 文件系统扩展失败
若 xfs_growfs 或 resize2fs 执行失败,文件系统可能处于不一致状态。
xfs 修复:
bashumount /
# 无法卸载根分区,需要进入单用户模式或使用 Live CD
xfs_repair /dev/mapper/centos-root
mount /
ext4 修复:
bashumount /
e2fsck -f /dev/mapper/centos-root
mount /
12.3 扩容后系统无法启动
若扩容后系统无法启动,可能是 /etc/fstab 配置错误或文件系统损坏。
使用 Live CD 或救援模式进入系统:
- 检查
/etc/fstab配置是否正确 - 检查文件系统是否损坏,使用
xfs_repair或e2fsck修复 - 检查 grub 配置是否正确
12.4 缩容逻辑卷(ext4)
xfs 不支持缩容,ext4 支持但需要卸载文件系统。
风险提示:
- 缩容前务必备份数据
- 缩容可能导致数据丢失
- 缩容后的大小必须大于已使用空间
步骤:
- 卸载文件系统
bashumount /data
- 检查文件系统
bashe2fsck -f /dev/centos/data
- 缩容文件系统
bashresize2fs /dev/centos/data 50G
- 缩容逻辑卷
bashlvreduce -L 50G /dev/centos/data
- 重新挂载
bashmount /dev/centos/data /data
- 验证
bashdf -h /data
十三、生产环境注意事项
13.1 操作前准备
- 通知相关人员,说明操作内容和可能影响
- 备份关键数据
- 准备回滚方案
- 选择业务低峰期操作
- 准备应急联系方式
13.2 操作中监控
- 实时观察磁盘空间变化
- 实时观察系统日志
- 实时观察业务日志
- 准备好回滚命令
13.3 操作后验证
- 验证逻辑卷大小
- 验证文件系统大小
- 验证文件系统完整性
- 验证业务是否正常
- 持续观察一段时间,确认无异常
13.4 文档与记录
- 记录操作时间、操作人、操作命令
- 记录扩容前后的容量
- 记录遇到的问题和解决方法
- 更新运维文档
- 更新 CMDB 或资产管理系统
13.5 预防措施
- 建立磁盘空间告警,提前扩容
- 定期检查磁盘使用率
- 定期清理无用日志和文件
- 建立日志轮转机制
- 建立数据归档机制
- 合理规划磁盘分区和逻辑卷大小
十四、常见问题处理
14.1 扩容后 df 显示大小未变化
原因:
- 逻辑卷扩展了,但文件系统未扩展
解决:
bashxfs_growfs /
# 或
resize2fs /dev/mapper/centos-root
14.2 pvresize 提示设备大小未变化
原因:
- 系统未识别到磁盘扩容
解决:
bashecho 1 > /sys/class/block/vda/device/rescan
partprobe /dev/vda
pvresize /dev/vda2
14.3 lvextend 提示卷组空间不足
原因:
- 卷组剩余空间不足
解决:
- 添加新物理卷到卷组
bashpvcreate /dev/sdc
vgextend centos /dev/sdc
lvextend -L +50G /dev/centos/root
14.4 xfs_growfs 提示文件系统已是最大
原因:
- 逻辑卷未扩展,或已扩展但大小与文件系统一致
解决:
- 检查逻辑卷大小
bashlvs
- 若逻辑卷未扩展,先扩展逻辑卷
bashlvextend -L +50G /dev/centos/root
xfs_growfs /
14.5 提示设备正在使用,无法操作
原因:
- 设备被进程占用
解决:
- 查看占用进程
bashlsof /dev/mapper/centos-root
- 停止相关进程或卸载设备
bashumount /data
14.6 growpart 提示分区无法扩展
原因:
- 分区后有其他分区,无法扩展
解决:
- 检查分区表
bashfdisk -l /dev/vda
- 若分区后有其他分区,需要先删除或移动
14.7 扩容后系统变慢
原因:
- 文件系统扩展过程消耗 I/O 资源
解决:
- 等待文件系统扩展完成
- 检查 I/O 负载
bashiostat -x 1
14.8 提示 PE 大小不匹配
原因:
- 卷组 PE 大小与指定的不一致
解决:
- 使用
-l参数指定 PE 数量而非大小
bashlvextend -l +100%FREE /dev/centos/root
十五、总结
LVM 是 Linux 下灵活的磁盘管理工具,支持在线扩容,无需停机,无需数据迁移。
核心流程:
- 检查磁盘空间和 LVM 状态
- 若卷组有剩余空间,直接扩展逻辑卷
- 若卷组空间不足,添加新物理卷到卷组
- 扩展逻辑卷
- 扩展文件系统
- 验证扩容结果
关键要点:
- 扩容前备份关键数据
- 确认文件系统类型,选择正确的扩展命令
- 云服务器扩容需要先在控制台扩展磁盘,再在系统内识别
- xfs 仅支持扩容,不支持缩容
- ext4 支持扩容和缩容
- 扩容过程中不要中断操作
- 扩容后验证逻辑卷、文件系统、业务是否正常
常见场景:
- 卷组有剩余空间:直接扩展逻辑卷和文件系统
- 卷组空间不足:添加物理卷到卷组,再扩展
- 云服务器扩容:控制台扩容 → 系统识别 → 扩展分区 → 扩展物理卷 → 扩展逻辑卷 → 扩展文件系统
风险控制:
- 备份数据
- 选择业务低峰期操作
- 检查文件系统完整性
- 准备回滚方案
- 操作后充分验证
预防机制:
- 建立磁盘空间告警
- 定期检查磁盘使用率
- 定期清理无用文件
- 建立日志轮转和数据归档机制
- 合理规划磁盘分区和逻辑卷大小
通过本文的完整流程,可以安全高效地完成 Linux 磁盘 LVM 扩容,确保业务连续性,避免因磁盘空间不足导致的服务中断。

本文链接:https://www.yunweipai.com/archives/49379




网友评论comments