深夜收到磁盘空间告警,数据库写入失败、日志无法生成——这是每位运维都经历过的噩梦。如果服务器使用LVM管理存储,你完全可以在业务不中断的情况下完成扩容。下面是一套经过反复验证的操作流程,从识别磁盘状态到最终确认容量生效,每一步都有明确验证方法。
1. 先确认当前磁盘与LVM布局
盲目执行扩容命令之前,必须搞清楚三件事:哪个分区满了、底层物理磁盘是否还有空闲槽位、LVM各层级的空间分配情况。
首先检查文件系统使用率:
df -hT | grep -v tmpfs
如果发现/var或/data等挂载点使用率超过90%,立即记住挂载点所对应的逻辑卷名称(例如/dev/mapper/vg_data-lv_data)。
接着查看LVM现状:
pvdisplay
vgdisplay
lvdisplay
从输出中确认卷组(VG)是否还有空闲物理区域(Free PE)。如果Free PE大于0,说明VG内部还有未分配的容量,直接通过lvextend配合resize2fs(或xfs_growfs)即可在线扩容,无需新增磁盘。但大多数应急场景下Free PE已耗尽,这时必须添加新磁盘。
2. 新增物理磁盘并创建物理卷
假设服务器是物理机或虚拟机,系统已识别到一块新硬盘/dev/sdb(也可能是/dev/nvme1n1等)。先验证磁盘是否可见:
lsblk | grep disk
若新磁盘显示为sdb且没有分区,直接创建物理卷:
pvcreate /dev/sdb
这条命令会在磁盘头部写入LVM元数据。如果磁盘之前被使用过,系统会提示“already contains a filesystem”,此时需要加-f强制写入——但务必确保没有有用数据。
创建完成后用pvs或pvdisplay确认新物理卷的容量和VG成员为空。
3. 将新PV扩展到目标卷组
核心操作只有一条:
vgextend vg_data /dev/sdb
这里的vg_data是之前通过vgdisplay找到的卷组名称。执行后,卷组的可用空间立即增加新磁盘的全部容量。用vgdisplay vg_data查看Free PE数值,确认已包含新增空间。
注意:如果服务器使用了多个物理卷做条带化或镜像,vgextend会将新PV作为普通成员加入,不会影响现有数据分布。
4. 在线扩展逻辑卷
现在VG有空闲空间了,接下来将指定逻辑卷扩大。假设需要扩容的逻辑卷是/dev/vg_data/lv_data,当前大小500GB,我们希望增加200GB:
lvextend -L +200G /dev/vg_data/lv_data
也可以直接指定扩容后的目标大小:
lvextend -L 700G /dev/vg_data/lv_data
推荐使用+相对值,避免手误。
执行后务必用lvdisplay或lvs确认逻辑卷大小已变化。此时文件系统尚不知道底层变化,还需要最后一步。
5. 调整文件系统大小
这是最容易出错的环节——不同文件系统对应的命令不同。
ext4/ext3/ext2 文件系统
resize2fs /dev/vg_data/lv_data
默认会扩展到逻辑卷的全部可用容量。也可以指定大小:resize2fs /dev/vg_data/lv_data 700G。执行过程中文件系统可正常读写,但建议在业务低峰期操作以减少IO压力。
XFS 文件系统
XFS只能在线扩大,不能缩小。使用xfs_growfs命令,参数是挂载点而非块设备:
xfs_growfs /data
执行后无报错即成功。可通过df -h /data验证容量是否已增加。
其他文件系统
Btrfs使用btrfs filesystem resize;ZFS使用zfs set volsize。不在本文详述。
6. 验证与注意事项
全部操作完成后,务必执行:
df -h | grep lv_data
确认使用率已下降。另外检查应用日志是否恢复正常写入,数据库连接是否恢复。
三个常见陷阱:
- 忘记resize文件系统:lvextend只扩展了块设备,如果跳过resize2fs或xfs_growfs,应用看到的容量不会变化。
- XFS挂载点参数错误:xfs_growfs只能对挂载点执行,不能直接对/dev/mapper/路径操作。
- 新磁盘未分区直接使用:部分旧版系统或某些RAID卡环境要求新磁盘先分区再pvcreate。如果执行
pvcreate /dev/sdb失败,尝试先用fdisk创建单一主分区(类型8e Linux LVM),然后对/dev/sdb1执行pvcreate。
在线扩容完成后,建议在计划维护窗口重新扫描并更新备份策略。同时记录新增磁盘的序列号、槽位信息,方便后续硬件故障排查。
7. 回滚方案(万一扩容失败)
LVM扩容很少导致数据丢失,但如果执行了错误的lvextend(例如扩错了LV),可以缩回去吗?
ext4支持在线缩小(需先卸载),XFS不支持缩小。如果误操作且文件系统不支持缩小,唯一的办法是将数据迁移到另一个LV,然后删掉错误的LV重建。因此强烈建议在扩容前用LVM快照备份:
lvcreate -L 10G -s -n snap_lv_data /dev/vg_data/lv_data
快照非常轻量,可在lvextend后删除快照恢复空间。
结语
LVM最强大的地方在于将物理存储与逻辑视图分离。当磁盘空间满额时,不需要停机迁移数据,只需要插入新磁盘,执行上述几条命令就能让容量瞬间扩展。建议运维人员在测试环境将完整流程演练一遍,确保在生产应急时肌肉记忆正确。磁盘空间告警不可怕,可怕的是没有预案——这份指南就是你的应急预案。
延伸阅读
