这个场景要解决什么
数据卷快满,底层还有余量或刚加了新盘时,按物理卷、卷组、逻辑卷、文件系统四层顺序往上扩,全程在线不用停机。顺序不能乱:分区没变大,物理卷就扩不动;卷组没空间,逻辑卷就扩不了;文件系统没扩,df 看到的容量还是老样子。
基本信息
| 适用场景 | XFS 或 ext4 数据卷容量不足 |
|---|---|
| 目标 | 在线扩容文件系统,业务不中断 |
| 工具链 | df、vgs、lvs、growpart、pvresize、vgextend、lvextend |
| 前提 | 先确认文件系统类型,XFS 只能增不能减 |
三条扩容路径
- 卷组还有剩余空间:直接扩逻辑卷即可
- 新加了物理盘:先分区做成物理卷,加入卷组再扩
- 云盘已经在线扩容:先扩分区,再扩物理卷,然后扩逻辑卷与文件系统
先看现状
先看现状
df -h /data
vgs
lvs
lsblk -f路径 A 卷组有余量
路径 A 卷组有余量
lvextend -r -L +100G /dev/vg0/data
df -h /data路径 B 加了新盘
路径 B 加了新盘
parted -s /dev/sdc mklabel gpt
parted -s /dev/sdc mkpart primary 1MiB 100%
pvcreate /dev/sdc1
vgextend vg0 /dev/sdc1
lvextend -r -l +100%FREE /dev/vg0/data路径 C 云盘已在线扩
路径 C 云盘已在线扩
growpart /dev/vdb 1
pvresize /dev/vdb1
lvextend -r -l +100%FREE /dev/vg0/data四层扩的顺序
| 层 | 要做的事 | 命令 |
|---|---|---|
| 分区 | 让分区覆盖新增容量 | growpart、parted |
| 物理卷 | 让物理卷认识新容量 | pvresize |
| 卷组 | 把新物理卷加入卷组 | vgextend |
| 逻辑卷 | 从卷组里多切出空间 | lvextend |
| 文件系统 | 让文件系统用满新容量 | lvextend 加 -r 自动完成 |
加 -r 让 lvextend 一次性把文件系统也扩了,XFS 与 ext4 都支持在线扩大,不需要停机。
缩容是反方向且必须离线进行,XFS 根本不支持缩小。容量规划要按只增不减来做,提前留出余量。
扩容前先确认底层确实还有容量:云盘要在控制台先把盘扩掉,物理盘要确认分区表允许扩展。底层没有空间时,任何扩卷动作都会以空间不足告终。
扩完用 df -h 与 lsblk 双向核对:df 看文件系统可用空间,lsblk 看块设备大小,两者都变大才算真正完成。
扩容中的异常对照
| 现象 | 含义 | 下一步 |
|---|---|---|
| 报空间不足 | 卷组剩余容量不够 | 先加物理卷扩展卷组 |
| 容量命令显示已扩但使用率不变 | 漏了文件系统这一层 | 按文件系统类型执行扩容 |
| 对 XFS 缩容报错 | 该文件系统不支持缩小 | 改为新建卷迁移数据 |
| 物理卷扩展无效 | 分区表未先扩大或内核未刷新 | 先改分区再刷新内核视图 |
| 扩容中途中断 | 某一层已改另一层未跟上 | 按物理卷到文件系统的顺序逐层核对 |
云主机上磁盘扩容后,容量要依次被虚拟平台、内核分区视图、物理卷三层认到才算真正变大:先确认内核看到新容量,再调整分区,再扩展物理卷与卷组,最后才是逻辑卷与文件系统。顺序颠倒会在中间某层卡住,看起来像扩容命令不生效。