生产服务器运行一段时间后,磁盘空间不足是常见问题。数据库日志、应用日志、用户上传文件、备份文件等持续增长,根分区或数据分区空间告警,严重时可能导致服务不可用。
传统分区方式扩容困难,需要停机、备份数据、重新分区、恢复数据,风险高、耗时长。LVM(Logical Volume Manager)提供了灵活的磁盘管理方式,可以在线扩容,无需停机,无需数据迁移。
本文从实战角度出发,介绍 LVM 的核心概念、扩容前检查、扩容步骤、验证方法、常见问题处理、回滚方案和生产环境注意事项。
不适用场景:
LVM 分为三层:
物理卷(PV, Physical Volume)
↓
卷组(VG, Volume Group)
↓
逻辑卷(LV, Logical Volume)
↓
文件系统(ext4, xfs, etc.)
物理卷(PV):
/dev/sdb、/dev/sdb1pvcreate 初始化为 LVM 物理卷卷组(VG):
逻辑卷(LV):
PE(Physical Extent):
LE(Logical Extent):
LVM 扩容分为两步:
lvextend)resize2fs 或 xfs_growfs)逻辑卷扩容前提:
ext2/ext3/ext4:resize2fsxfs:xfs_growfsbtrfs:btrfs filesystem resize注意:
ext4 支持在线扩容和离线扩容xfs 仅支持在线扩容,不支持缩容1. 检查磁盘空间和 LVM 状态
2. 确认扩容目标(扩容哪个逻辑卷、扩容多大)
3. 检查卷组剩余空间
4. 若卷组空间不足,添加新物理卷到卷组
5. 扩展逻辑卷大小
6. 扩展文件系统大小
7. 验证扩容结果
8. 记录操作过程
bash df -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 是逻辑卷名。
bash lvdisplay
输出示例:
--- 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:当前大小查看所有逻辑卷简要信息:
bash lvs
输出示例:
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
bash vgdisplay
输出示例:
--- 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 显示剩余空间充足,可以直接扩展逻辑卷查看所有卷组简要信息:
bash vgs
输出示例:
VG #PV #LV #SN Attr VSize VFree
centos 2 3 0 wz--n- 199.00g 45.00g
bash pvdisplay
输出示例:
--- 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 有剩余空间查看所有物理卷简要信息:
bash pvs
输出示例:
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <99.00g 0
/dev/sdb1 centos lvm2 a-- <100.00g 45.00g
bash df -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 文件系统类型为 xfsxfs_growfs 命令或使用:
bash blkid /dev/mapper/centos-root
输出示例:
/dev/mapper/centos-root: UUID="abc123-def456" TYPE="xfs"
查看所有块设备:
bash lsblk
输出示例:
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 是新添加的磁盘,未分区,可以用于扩容适用场景:
vgs 显示卷组有剩余空间(VFree > 0)风险提示:
示例备份命令:
bash tar -czf /backup/root_backup_$(date +%Y%m%d).tar.gz -C / --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/backup .
或使用 rsync:
bash rsync -avzP / /backup/root_backup/ --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/backup
假设要将 /dev/centos/root 从 50GB 扩展到 80GB。
方式一:指定扩展后的总大小
bash lvextend -L 80G /dev/centos/root
方式二:指定增加的大小
bash lvextend -L +30G /dev/centos/root
方式三:使用所有剩余空间
bash lvextend -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.
验证逻辑卷是否扩展成功:
bash lvs
输出示例:
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。
逻辑卷扩展后,文件系统大小未变,需要手动扩展。
查看文件系统类型:
bash df -T /
输出示例:
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 50G 45G 5.0G 91% /
文件系统类型为 xfs,使用 xfs_growfs 扩展。
bash xfs_growfs /
或指定设备:
bash xfs_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:表示文件系统已扩展若文件系统类型为 ext4:
bash resize2fs /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 检查文件系统(需要卸载或进入单用户模式)bash df -h /
输出示例:
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 80G 45G 35G 57% /
确认:
查看逻辑卷信息:
bash lvdisplay /dev/centos/root
确认 LV Size 为 80GB。
适用场景:
vgs 显示卷组剩余空间不足bash lsblk
输出示例:
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 磁盘,未分区,可以直接使用查看磁盘分区信息:
bash fdisk -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
确认磁盘无分区。
bash pvcreate /dev/sdc
输出示例:
Physical volume "/dev/sdc" successfully created.
验证:
bash pvs
输出示例:
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 列为空)。
若需要将磁盘分区后再创建物理卷:
创建分区:
bash fdisk /dev/sdc
操作步骤:
n 创建新分区p 主分区)t 修改分区类型8e(Linux LVM 类型)w 保存并退出或使用 parted:
bash parted /dev/sdc
(parted) mklabel gpt
(parted) mkpart primary 0% 100%
(parted) set 1 lvm on
(parted) quit
刷新分区表:
bash partprobe /dev/sdc
创建物理卷:
bash pvcreate /dev/sdc1
bash vgextend centos /dev/sdc
参数说明:
centos:卷组名称/dev/sdc:要添加的物理卷输出示例:
Volume group "centos" successfully extended
验证:
bash vgs
输出示例:
VG #PV #LV #SN Attr VSize VFree
centos 3 3 0 wz--n- 399.00g 245.00g
确认:
centos 的物理卷数量从 2 增加到 3查看卷组详细信息:
bash vgdisplay centos
确认 Cur PV 和 VG Size 已更新。
添加物理卷到卷组后,卷组有了足够的剩余空间,可以按照【场景一】的步骤扩展逻辑卷。
例如,将 /dev/centos/root 扩展 50GB:
bash lvextend -L +50G /dev/centos/root
或使用所有剩余空间:
bash lvextend -l +100%FREE /dev/centos/root
根据文件系统类型选择命令:
xfs:
bash xfs_growfs /
ext4:
bash resize2fs /dev/mapper/centos-root
bash df -h /
bash lvs
bash vgs
云服务器(阿里云、腾讯云、AWS 等)通常先在控制台扩展磁盘大小,然后在系统内部识别并扩容。
登录云服务商控制台,找到对应实例,选择磁盘,执行扩容操作。
例如将 100GB 云盘扩展到 200GB。
注意:
扩容后,系统可能未自动识别新大小,需要手动刷新。
查看当前磁盘大小:
bash lsblk
输出示例:
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,需要刷新:
bash echo 1 > /sys/class/block/vda/device/rescan
或重新扫描 SCSI 设备:
bash echo"- - -" > /sys/class/scsi_host/host0/scan
再次查看:
bash lsblk
输出示例:
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。
使用 growpart 扩展分区(部分发行版需要安装 cloud-utils-growpart 包):
bash growpart /dev/vda 2
参数说明:
/dev/vda:磁盘设备2:分区号输出示例:
CHANGED: partition=2 start=2099200 old: size=207616000 end=209715200 new: size=417331167 end=419430367
或使用 parted 手动扩展分区:
bash parted /dev/vda
(parted) print
(parted) resizepart 2 100%
(parted) quit
刷新分区表:
bash partprobe /dev/vda
验证分区是否扩展:
bash lsblk
输出示例:
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。
bash pvresize /dev/vda2
输出示例:
Physical volume "/dev/vda2" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
验证:
bash pvs
输出示例:
PV VG Fmt Attr PSize PFree
/dev/vda2 centos lvm2 a-- <199.00g 100.00g
物理卷 /dev/vda2 大小已从 99GB 增加到 199GB,卷组剩余空间增加 100GB。
按照【场景一】的步骤扩展逻辑卷和文件系统。
根分区扩容与普通分区扩容流程相同,但需要注意:
步骤与【场景一】或【场景二】相同。
数据分区扩容流程与根分区相同。
若数据分区可以卸载,建议卸载后再扩容(ext4 支持离线扩容,xfs 仅支持在线扩容)。
卸载分区:
bash umount /data
扩展逻辑卷:
bash lvextend -L +50G /dev/centos/data
扩展文件系统(ext4):
bash e2fsck -f /dev/centos/data
resize2fs /dev/centos/data
重新挂载:
bash mount /dev/centos/data /data
验证:
bash df -h /data
若数据分区无法卸载,按照在线扩容流程操作。
bash # 查看磁盘空间使用情况
df -h
df -T
# 查看块设备
lsblk
# 查看磁盘分区
fdisk -l
# 查看物理卷
pvs
pvdisplay
pvscan
# 查看卷组
vgs
vgdisplay
vgscan
# 查看逻辑卷
lvs
lvdisplay
lvscan
# 查看文件系统类型
blkid /dev/mapper/centos-root
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
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
bash # 删除逻辑卷
lvremove /dev/centos/data
# 从卷组中移除物理卷
vgreduce centos /dev/sdc
# 删除卷组
vgremove centos
# 删除物理卷
pvremove /dev/sdc
风险提示:
假设新服务器有两块硬盘 /dev/sdb 和 /dev/sdc,需要创建 LVM 并挂载到 /data。
bash pvcreate /dev/sdb /dev/sdc
bash vgcreate vg_data /dev/sdb /dev/sdc
bash lvcreate -L 500G -n lv_data vg_data
或使用所有空间:
bash lvcreate -l 100%FREE -n lv_data vg_data
bash mkfs.xfs /dev/vg_data/lv_data
bash mkdir -p /data
mount /dev/vg_data/lv_data /data
bash echo"/dev/vg_data/lv_data /data xfs defaults 0 0" >> /etc/fstab
验证:
bash df -h /data
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 而非设备路径,避免设备名称变化导致挂载失败:
bash blkid /dev/mapper/centos-root
输出示例:
/dev/mapper/centos-root: UUID="abc123-def456" TYPE="xfs"
修改 /etc/fstab:
bash UUID=abc123-def456 / xfs defaults 0 0
扩容过程中若出现错误,查看系统日志:
bash dmesg | tail -n 50
bash tail -f /var/log/messages
bash journalctl -xe
使用监控系统(Prometheus、Zabbix、Grafana)监控磁盘使用率。
Prometheus 查询磁盘使用率:
promql 100 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100
设置告警规则,当磁盘使用率超过 80% 时告警。
LVM 命令执行后会记录日志:
bash grep -E "lvm|lvextend|vgextend|pvcreate" /var/log/messages | tail -n 20
或查看 audit 日志:
bash ausearch -m USER_CMD -c lvextend
1. 检查磁盘空间是否不足
↓
2. 确认文件系统挂载点和逻辑卷路径
↓
3. 检查卷组是否有剩余空间
↓
4. 若卷组剩余空间充足:
- 扩展逻辑卷
- 扩展文件系统
- 验证结果
↓
5. 若卷组剩余空间不足:
- 检查是否有新磁盘可用
- 创建物理卷
- 将物理卷添加到卷组
- 扩展逻辑卷
- 扩展文件系统
- 验证结果
↓
6. 若是云服务器:
- 在控制台扩展磁盘
- 刷新系统识别
- 扩展分区
- 扩展物理卷
- 扩展逻辑卷
- 扩展文件系统
- 验证结果
↓
7. 记录操作过程和结果
xfs_repair、e2fsck)lvremove、vgremove、pvremove)会导致数据丢失bash lvs
lvdisplay /dev/centos/root
确认 LV Size 是否符合预期。
bash df -h /
确认容量是否增加。
bash vgs
确认 VFree 是否减少。
bash pvs
vgdisplay centos
确认物理卷数量和卷组大小。
xfs:
bash xfs_repair -n /dev/mapper/centos-root
-n 表示只检查,不修复。
ext4:
bash e2fsck -n /dev/mapper/centos-root
若 lvextend 执行失败,通常不会影响现有数据。
检查错误信息,确认问题:
若 xfs_growfs 或 resize2fs 执行失败,文件系统可能处于不一致状态。
xfs 修复:
bash umount /
# 无法卸载根分区,需要进入单用户模式或使用 Live CD
xfs_repair /dev/mapper/centos-root
mount /
ext4 修复:
bash umount /
e2fsck -f /dev/mapper/centos-root
mount /
若扩容后系统无法启动,可能是 /etc/fstab 配置错误或文件系统损坏。
使用 Live CD 或救援模式进入系统:
/etc/fstab 配置是否正确xfs_repair 或 e2fsck 修复xfs 不支持缩容,ext4 支持但需要卸载文件系统。
风险提示:
步骤:
bash umount /data
bash e2fsck -f /dev/centos/data
bash resize2fs /dev/centos/data 50G
bash lvreduce -L 50G /dev/centos/data
bash mount /dev/centos/data /data
bash df -h /data
原因:
解决:
bash xfs_growfs /
# 或
resize2fs /dev/mapper/centos-root
原因:
解决:
bash echo 1 > /sys/class/block/vda/device/rescan
partprobe /dev/vda
pvresize /dev/vda2
原因:
解决:
bash pvcreate /dev/sdc
vgextend centos /dev/sdc
lvextend -L +50G /dev/centos/root
原因:
解决:
bash lvs
bash lvextend -L +50G /dev/centos/root
xfs_growfs /
原因:
解决:
bash lsof /dev/mapper/centos-root
bash umount /data
原因:
解决:
bash fdisk -l /dev/vda
原因:
解决:
bash iostat -x 1
原因:
解决:
-l 参数指定 PE 数量而非大小bash lvextend -l +100%FREE /dev/centos/root
LVM 是 Linux 下灵活的磁盘管理工具,支持在线扩容,无需停机,无需数据迁移。
核心流程:
关键要点:
常见场景:
风险控制:
预防机制:
通过本文的完整流程,可以安全高效地完成 Linux 磁盘 LVM 扩容,确保业务连续性,避免因磁盘空间不足导致的服务中断。


今天给大家分享一份超级牛掰的Linux学习笔记,足足有1456页!是一位Linux运维大佬整理分享的,分享是获得大佬同意的,大家有需要的尽管收藏起来!
这份笔记非常全面且详细,从Linux基础到shell脚本,再到防火墙、数据库、日志服务管理、Nginx、高可用集群、Redis、虚拟化、Docker等等,与其说Linux学习笔记,不如说是涵盖了运维各个核心知识。
并且图文并茂,代码清晰,每一章下面都有更具体详细的内容,十分适合Linux运维学习参考!






扫描下方二维码,回复暗号“1456页Linux笔记“,即可100%免费领取成功
